Budeme potřebovat následující programy:
- cx_Freeze – vytvoří z pythonovských scriptů binárku pro linux
- CheckInstall – umožňuje udržet pořádek ve vaší distribuci. Slouží k vytváření rpm, deb a slackware balíčků.
- py2exe – vytvoří z pythonovských scriptů binárku pro MS Windows
- Inno Setup – umožnuje vytváření instalátoru pro MS Windows
Vytváříme binárku pod linuxem
Protože pravděpodobně neseženete cx_Freeze v binární podobě pro svou distribuci (u mě Debian), stáhněte si zdrojový kód. Rozbalte stažený balíček a spustťe jako root následující příkazy:
python MakeFrozenBases.py python FreezePython.py --no-copy-deps FreezePython.py
Může se vám stát, že obdržíte následující chybovou hlášku:
Traceback (most recent call last): File "MakeFrozenBases.py", line 57, in ? BuildBase("Console") File "MakeFrozenBases.py", line 11, in BuildBase vars = distutils.sysconfig.get_config_vars() File "/usr/lib/python2.3/distutils/sysconfig.py", line 490, in get_config_vars func() File "/usr/lib/python2.3/distutils/sysconfig.py", line 360, in _init_posix raise DistutilsPlatformError(my_msg) distutils.errors.DistutilsPlatformError: invalid Python installation: unable to open /usr/lib/python2.3/config/Makefile (No such file or directory)
Není to žádná tragédie, chybí vám hlavičkové soubory a statické knihovny pro vytváření pythonovských modulů (v Debianu je to balíček „python-dev“, takže to vyřeší příkaz „apt-get install python-dev“).
Pokud vše proběhne bez problémů, vznikne vám binárka „FreezePython“ a dva adresáře, „bases/“ a „initscripts/“. Nyní máme pro instalaci několik možností. Buď někde (např. ve /usr/lib/ vytvoříme adresář „cx_Freeze“, do něj nakopírujeme binárku „FreezePython“ a oba dva adresáře „bases/“ a „initscripts/“. Pak musíme přidat adresář /usr/lib/cx_freeze/ do cesty „PATH“ (ověříme pomocí „echo $PATH“). Toho dosáhneme úpravou např. v souboru „~/.bash_profile“. Další možností, pokud máte v cestě např. „~/bin/“ je nakopírovat tyto soubory a adresáře přímo do adresáře „~/bin/“. Nouzově se to dá nakopírovat do „/usr/local/bin/“.
Tím bychom měli mít nainstalován „cx_Freeze“. Pokud v konzoli spustíte příkaz „FreezePython -h“, měla by se vám zobrazit nápověda s možnými volbami (doporučuji prostudovat). Nyní se přesuneme do adresáře s příkladem a zadáme příkazy:
mkdir -p distrib.lin FreezePython --target-dir=distrib.lin --target-name=helloworld --base-name=ConsoleKeepPath --init-script=ConsoleKeepPath.py -OO App1.py
V podadresáři „distrib.lin/“ se vám vytvořila binárka „helloworld“ spolu s potřebnými doprovodnými knihovnami.
Poznámka pro uživatele PyQt: Pokud byste chtěli vytvořit binárku s PyQT, přidejte do předchozího příkazu ještě parametr „–include-modules=sip“.
Distribuujeme program pod Linuxem
Máme vytvořenou binárku a chtěli bychom ji distribuovat k dalším uživatelům. Máme opět několik možností:
- zkopírovat adresář „i18n/“ do adresáře „distrib.lin/“, zapakovat jej (např. pomocí „tar cvzf helloworld.tar.gz distrib.lin/“. Dále pak ručně vytvořit *.deb, *.rpm a jinné balíčky ze vzniklého „helloworld.tar.gz“.
- nebo si zjednodušit práci pomocí utilitky „checkinstall“.
Není vcelku problém sehnat „checkinstall“ pro většinu běžných distribucí (v debianu stačí zadat „apt-get install checkinstall“), takže se nebudu rozepisovat o jeho instalaci.
Abyste mohli použít checkinstall, musite v adresáři s příkladem vytvořit soubor Makefile s alespoň minimálním obsahem:
NAME = helloworld INSTALLPATH = /usr/local/lib I18N = i18n/cs_CZ LOCALE_PATH = /usr/share/locale/cs/LC_MESSAGES FRPATH = distrib.lin install: mkdir -p $(INSTALLPATH)/$(NAME)/$(I18N) install -m 0644 -o root -g root $(FRPATH)/* $(INSTALLPATH)/$(NAME)/ chmod 0755 $(INSTALLPATH)/$(NAME)/$(NAME) install -m 0644 -o root -g root $(I18N)/$(NAME).mo $LOCALE_PATH/$(NAME).mo uninstall: rm -fr $(INSTALLPATH)/$(NAME) rm -f $LOCALE_PATH/$(NAME).mo
Použití utilitky „checkinstall“ je pak jednoduché – stačí v adresáři s příkladem zadat příkaz "checkinstall typ_balicku. Jako volbu "typ_balicku můžeme použít:
- -D – balíček *deb (pro Debian)
- -R – balíček *.rpm (pro RedHat, Mandriva, SUSE, …)
- -S – balíček pro Slackware
Vzhledem k tomu, že checkinstall má spoustu voleb a já jsem líný je opisovat, vytvořil jsem pro názornost o maličko rozsáhlejší okomentovaný vzorový Makefile obsahující i volbu checkinstall, který je součástí dnešního zdrojového kódu (nekamenujte mě, je to opravdu jen demo). Stačí zadat jen „make checkinstall“.
Vytváříme binárku pod MS Windows
V úvodu asi zklamu ty, co očekávali, že vytvoří binárku pro MS Windows s využitím emulátoru Wine. Bohužel, podle mých zkušeností to opravdu seriózně nejde a vzniká spousta problémů a nevyřešených závislostí, jejichž rozbor by vydal na samostatný článek. Z toho důvodu, pokud vážněji uvažujete o tom, že budete distribuovat svoji aplikaci pod MS Windows, doporučuji vytvoření binárky provádět právě v nich.
Pro úspěšné sestavení binárky a instalátoru pod MS Windows budete potřebovat následující soubory (stav ke dni 20.6.2006):
- Python.
- wxPython.
- Python Imaging Library
- py2exe.
- Inno Setup QuickStart Pack – pro instalaci budete potřebovat přístup na internet.
Samotná instalace je jednoduchá a proto ji zde nebudu dále popisovat.
Abyste mohli sestavit binárku pomocí utilitky py2exe, budete muset v adresáři s příkladem vytvořit script „setup.py“. Vzhledem k tomu, že je poměrně obsáhlý, nebudu jej zde vypisovat, je součástí dnešního zdrojového kódu.
Samotné sestavení binárky pak provedeme pomocí příkazu (za předpokladu, že máte python nainstalován v adresáři „c:\python24\“):
c:\python24\python setup.py py2exe -pPIL --packages=encodings
Když proběhne příkaz, vzniknou dva adresáře „build\“ a „distrib\“. Adresář „build\“ můžeme klidně smazat. Adresář „distrib\“ obsahuje samotnou binárku a ostatní potřebné soubory pro distribuci.
Pro zjednodušení se nachází ve zdrojovém kódu v adresáři s příkladem i soubor „prevod.bat“, který řeší předchozí příkaz.
Poznámka pro uživatele PyQt: Pokud byste chtěli vytvořit binárku s PyQT, přidejte do předchozího příkazu ještě parametr „–includes sip“.
Distribujeme program pod MS Windows
V adresáři „distrib\“ se nachází soubor „helloworld.iss“. Tento otevřeme pomocí programu „ISTool“.
V podstatě je vše připraveno pro vytvoření instalátoru pro MS Windows, ale můžeme si pohrát s tímto instalátorem (např. počeštit, přidat licenci pomocí „Language“, vytvořit různé typy instalací či specifikovat požadovaný typ MS Windows pomocí „Types“ apod.
Vytvoření instalátoru provedeme stiskem tlačítek „Ctrl+F9 nebo v horní nástrojové liště kliknutím na "“. V adresáři „distrib\“ se vytvoří podadresář „Output\“, který obsahuje instalátor s názvem „setup.exe“.
A to je vše, přátelé. Tímto končím s "HelloWorld a v příštím díle se zkusíme věnovat vývoji jednoduché aplikace s wxPythonem + pysqlite, opět s využitím nástrojů popsaných v předchozích dílech. Chtěl bych se předem omluvit, že se nebudu vyjadřovat k případným komentářům, protože tento týden nebudu na internetu.