Distribujeme programy v binární podobě s wxPythonem

Pavel Šibal 29. 6. 2006

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.

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.

Našli jste v článku chybu?
Podnikatel.cz: Česká pošta vycouvala ze služby ČP Cloud

Česká pošta vycouvala ze služby ČP Cloud

Měšec.cz: Test: Výběry z bankomatů v cizině a kurzy

Test: Výběry z bankomatů v cizině a kurzy

Měšec.cz: 10 změn novely zákoníku práce

10 změn novely zákoníku práce

Měšec.cz: TEST: Vyzkoušeli jsme pražské taxikáře

TEST: Vyzkoušeli jsme pražské taxikáře

Lupa.cz: Olympiáda zakázala GIFy. Moc to nepomáhá

Olympiáda zakázala GIFy. Moc to nepomáhá

Měšec.cz: Do ostravské MHD bez jízdenky. Stačí karta

Do ostravské MHD bez jízdenky. Stačí karta

DigiZone.cz: Hodlá Markíza skončit v DVB-T?

Hodlá Markíza skončit v DVB-T?

Vitalia.cz: Galerie: Strouhanka ze starých rohlíků? Kdepak

Galerie: Strouhanka ze starých rohlíků? Kdepak

Měšec.cz: Co když na dovolené přijdete o kartu?

Co když na dovolené přijdete o kartu?

Vitalia.cz: Vakcína Cervarix je oficiálně i pro chlapce

Vakcína Cervarix je oficiálně i pro chlapce

Podnikatel.cz: Kauza z Vinohrad pokračuje. Policie se omlouvá

Kauza z Vinohrad pokračuje. Policie se omlouvá

Měšec.cz: Investiční pasti. Děláte to, co ostatní, ale proděláváte

Investiční pasti. Děláte to, co ostatní, ale proděláváte

Vitalia.cz: Za její cukrovkou stojí rodiče

Za její cukrovkou stojí rodiče

Měšec.cz: Se stavebkem k soudu už (většinou) nemusíte

Se stavebkem k soudu už (většinou) nemusíte

Lupa.cz: Co vzal čas: internetové kavárny a herny

Co vzal čas: internetové kavárny a herny

120na80.cz: Lepší poporodní sexuální život? Žádný problém

Lepší poporodní sexuální život? Žádný problém

120na80.cz: Víte, co je svobodná menstruace?

Víte, co je svobodná menstruace?

Lupa.cz: Elektronika tajemství zbavená. Jak s ní začít?

Elektronika tajemství zbavená. Jak s ní začít?

Měšec.cz: Platíme NFC mobilem. Konečně to funguje!

Platíme NFC mobilem. Konečně to funguje!

Vitalia.cz: Musí moudrák opravdu ven?

Musí moudrák opravdu ven?