Hlavní navigace

Distribujeme programy v binární podobě s wxPythonem

29. 6. 2006
Doba čtení: 5 minut

Sdílet

V dnešním díle bych chtěl konečně dokončit "HelloWorld" z přechozích dílů tím, že si ukážeme, jak vytvořit binární baličky jak pro linux, tak i pro MS Windows. Chtěl bych ještě poznamenat, že níže uvedené postupy lze s úspěchem použít např. i pro PyQt apod.

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í:

  1. 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“.
  2. 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):

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“.

boa03-01

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.

root_podpora

Vytvoření instalátoru provedeme stiskem tlačítek „Ctrl+F9 nebo v horní nástrojové liště kliknutím na "ikonka“. 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.

Byl pro vás článek přínosný?