home contents changes options help subscribe edit

Vytváření exe souborů

Přestože na každém dobrém stroji je Python nainstalovaný, a pokud není, tak je často lepší ho tam nainstalovat a volat skripty zcela průhledně, tak přesto někdy může být potřeba nějaký ten exe vytvořit.

Důvody vytváření exe mohou být různé:

Je doporučeno šířit scripty a ne exe.

py2exe

Je ke stažení na adrese http://www.py2exe.org. Podporuje wxPython, Tkinter, PyGTK, pygame i win32com. Modul se nainstaluje standardně do adresáře site-packages. Pro Win98/Me musíte navíc ještě stáhnout Microsoft Layer for Unicode on Windows 95/98/ME Systems (unicows.dll). Je to pěkně popsáno v dokumentaci.

Jednoduchý příklad

Nejprve si vytvořte "pomocný" soubor setup.py ve stejném adresáři, jako je váš script:

# setup.py
from distutils.core import setup
import py2exe

setup(console=["myscript.py"])
# setup(windows=["myscript.py"])  # pro okenní aplikace, aby nevyskakovalo černé okno

Z windowsovské Příkazové řádky zavolejte: python setup.py py2exe. Aby vám tento příkaz neskončil chybou dříve než začal, je třeba dodržet následující pravidla:

  • musíte stát ve složce s programem - tzn., že když dáte dir uvidíte kromě jiného i setup.py i váš program
  • v systémové proměnné PATH musí být cesta k Pythonu, vyzkoušejte tak, že zadejte příkaz python a pokud se python spustí, je vše OK, pokud ne, přidejte Pythona do PATH

Po úspěšné dokončení vám vznikne, kromě jiného, adresář dist, ve kterém bude uloženo vše, co musíte uživateli poslat. Mezi jinými je tam i ten exe soubor. Je zde mnoho dalších voleb (jeden velký exe, okenní programy, NT služby, com servery). Popis najdete na domovské stránce http://www.py2exe.org.

Důležité FAQ pro puntičkáře: Pokud přejmenujete název exe souboru, program přestane chodit! Řada lidí to přejmenovává a pak se nestačí divit a považuje to za chybu programátora. Je třeba do manuálu jasně napsat, že název exe se nesmí přejmenovat jinak program nefachá!

Složitější příklad

from distutils.core import setup
import py2exe

setup(
    name = '....',
    version = '1.0',
    description = '....',
    author = '...',
    author_email = '....',
    url = 'http://...',
    packages = ['....', '....'],
    windows = [{'script': '........',
                 "icon_resources": [(1, ".........")]}],
    options = {'py2exe': {
                      'packages':'...',
                      'includes': '..., ...., ..., ....',
                      'excludes': '..., ... ,... ',
                      "dll_excludes": '..., ,....'}},
    data_files=[('bitmaps', ['....', '....']),
                ('config', ['....']),]
    )

Kromě 'console' a 'windows' existují ještě další klíčová slova a parametry. py2exe je podřízen modulu distutils, který je Pythonu standardně. Takže:

  1. Ve skriptu setup.py můžete využívat všechna klíčová slova a parametry, která obsahuje distutils: http://docs.python.org/dist/simple-example.html.
  2. Navíc můžete použít klíčová slova a parametry, které přidává samotný py2exe. Jejich přehled se v současnosti dá získat pouze takto
import py2exe
help(py2exe)

PyInstaller

Žije na adrese http://pyinstaller.hpcf.upr.edu/ . Je to nástupce již nežijícího Python Installer.

Vypadá jako mohutnější, s daleko více volbami. Pro začátečníky je tedy snad vhodnější py2exe. Podrobný postup je popsán v dokumentaci, takže tady jen stručně.

  1. Není nutno instalovat, rozbalit archiv kamkoliv. Je dobré si k němu ještě pořídit upx: http://upx.sourceforge.net
  2. Konfigurace - spustit soubor Configure.py
  3. vytvoření "mezisouboru" - *.spec - Zde se nadefinují všechny možné volby pro výsledný exe: python Makespec.py '[OPTIONS]' script
  4. sestavení exe - python Build.py specfile, kde místo specfile zadejte jméno souboru *.spec, který vám vznikl z předchozího bodu.

V adresáři distproject vám vznikne, podobně jako u py2exe, vše včetně žádaného exe souboru. Původní script se však dá v exe nalézt v celé své kráse. Další volby je možno najít v dokumentaci, která se stáhne společně s modulem.

cx_Freeze

Funguje pro Linux i Windows: http://starship.python.net/crew/atuining/cx_Freeze/

Autor cx_Freeze prostudoval py2exe, Python Installer a Freeze a některé jejich vlastnosti spojil do výsledného produktu. Hlavní výhodou cx_Freeze je to, že dokáže sestavit spustitelnou binárku na více systémech (Windows, UN*X, Mac) - prostě tam, kde je dostupný Python a překladač a linker C. Na druhou stranu je sestavení spustitelného programu velmi pomalé.

cx_Freeze mám vyzkoušené, dokonce funguje i s velkými moduly PyQt a cx_Oracle (vlastně by bylo divné, že by to nefungovalo s modulem stejného autora;))

Příklad použití:

FreezePython --include-modules=cx_Oracle --target-dir=oraschemadoc-exe oraschemadoc-dev\oraschemadoc.py
# anebo
FreezePython --include-modules=PyQt4,sip,reportlab,datetime --target=srcdir-bin srcdir/appname.py

Single exe --Fil-kun, Fri, 20 Aug 2010 09:08:08 +0200 reply

Tento příklad vytvoří samostatné exe:

from distutils.core import setup import py2exe, sys, os

sys.argv.append('py2exe')

setup(
options = {'py2exe': {'bundle_files': 1}}, windows = [{'script': "hello.py"}]?, zipfile = None,

)

Single exe --Fil-kun, Fri, 20 Aug 2010 09:08:58 +0200 reply

Oprava:

from distutils.core import setup import py2exe, sys, os

sys.argv.append('py2exe')

setup(
options = {'py2exe': {'bundle_files': 1}}, windows = [{'script': "key.py"}]?, zipfile = None,

)




subject:
  ( 118 subscribers )