Python alkalmazások telepítése

dokumentum verziók:

Sok szó eset már a Python-ban, mint objektum orientált programozási nyelvben, megbúvó lehetőségekről, de az elkészült alkalmazás telepítéséről még nem. Ezért most a lehetséges alternatívákról és eszközökről adok egy rövid áttekintést. Elsősorban win32-ra vonatkozóan kaptok segítséget ebből a cikkből, ámbár az ismertetett eszközök egy része más platformon is működik ill. a módszer adaptálható.

A legkézenfekvőbb megoldás

Természetesen a legegyszerűbb megoldás, ha telepítjük a Python-t és az összes szükséges kiegészítő csomagot(pl. win32all) a célgépre. Egyébként ez nem is annyira földtől elrugaszkodott ötlet, hiszen a teljes fejlesztői környezet telepítése nem jár licensz problémákkal és az elfoglat hely sem katasztrófális(nálam a Python, win32all és a wxPython együttes helyfoglalása 33.4 Mb).

Azoknak, akik forrásuk olvashatósága miatt "rettegnek": nem csak ez, de a lentebb ismertetett alternatívák sem tudják ezt megakadályozni, sőt az sem véd meg ha csak a lefordított pyc kiterjesztésű fájlokat másolod fel a kliens gépére! Ha félted a szellemi kincsedet, akkor azt ne Python-ban kódold...

Nem egy linux disztribúciónak már eleve része a Python, ezért ott sokszor a megfelelő verzió megléte okozhat gondot.

Ha ezt az utat választod, akkor Python 2.0-tól része az alapcsomagnak a Distutil csomag, amit esetleg érdemes áttanulmányoznod. A csomag célja szabványos technológát adni arra, hogyan adjunk telepített Python-unkhoz a standard csomagnak nem részét képező kiterjesztéseket, modulokat.

Lehetséges exe-t csinálni python programunkból?

A válasz röviden igen, kicsit hosszabban igen, de...ez nem igazi exe egyik megoldás esetében sem. Az exe-be beágyazva mindig ott lapul egy Python interpreter/bytecode. Kérdés, hogy a Microsoft .NET platformján hogyan fog ez működik, mintha Mark Hammond(aki ezen a porton dolgozik) szerint ott is lesz Python interpreter, de ezt ne vegyétek készpénznek.

Exe gyártási alternatívák:

Gordon McMillan varázslója

Ez az eszköz Linux-on és Windows-on is használható, bár nem mindent tud minegyik platformon. A linuxos verziót még nem kellett használnom ezért erről nem tudok mit mondani. Fontos megjegyeznem, hogy az import, a környezeti változók stb. átírásával saját programunk és az általa használt python modulok, bináris fájlok teljesen elszeparálhatók a célrendszeren már meglevőktől. Azaz nincs keveredés a különböző verziók között és nem rontod el a már telepített és működő rendszert sem. Windows-on a következő lehetőségeink vannak:

Ha valamiért elszállnának a fenti scriptek vagy hibás végeredményt kreálnának, akkor nézzétek meg a generált .cfg fájlt, majd a Builder.log-ot. A log értelemezéséhez jó tudni, hogy a .cfg minden szekciója egy "célobjektumnak" felel meg és a log ezek előállításának részeredményeit tükrözi.

Az aktuális verzók innen letölthetőek. Külön verzó van Python 1.52-höz és Python 2.0-hoz. Itt találsz leírást a belső működésről, az exe felépítéséről stb.

Egy nagyon jó ingyenes eszköz: Inno Setup

Nem kötődik szorosan a Python-hoz, hiszen bármilyen windows-os telepítőt gyárthatsz vele (én még Visual Basic programok telepítésére is ezt használom és nem a beépített varázslóval előállítható meglehetősen bizonytalanul működő telepítőt). Miért ajánlom a figyelmedbe:

Néhány fontos link:

Python win32all-t használó programok telepítése

Milyen problémák vannak:

A fentiek figyelembe vételével a Python-ban írt COM klienseknél következő a menetrend:

  1. A főmodulba az inportok elé betesszük az "import magic_import" sort
  2. Standalone.py-ből kivesszük a "excludes = PyWinTypes20.dll, win32api" sort.
  3. Lefuttatjuk a Standalone.py-t
  4. Az így összeszedett fájlok alapján elkészítjük a telepítőt.

Python-ban írt COM szerverekhez is lehet a fenti nódon telepítőt készíteni, csak működni nem fog. A legnagyobb baj az, hogy a regisztrációs szkriptek nincsenek felkészítve arra, hogy nincs külön python interpreter ill. hogy a COM komponensünket implementáló script nem létezik a fájlrendszerben hanem az exe-ben van elrejte. Arra sem jön rá az installer, hogy a COM komponensünk működéséhez szükség van a localserver.py-re és az összes általa használt szkriptre (mert a localserver.py-re nincs hivatkozás, csak a regisztráció során a registry-be kerül be a hivatkozás).

Az előbbi rengeteg zűrös kérdés miatt feladtam az exe formátumú terjesztés lehetőségét, hanem helyette némi ügyeskedéssel egy minimális Python és Python COM-ot rakok össze amit aztán Inno Setup segítségével gyúrok össze telepítővé(vagy éppenséggel egy meglevő Inno Setup script részévé teszem). Az Inno Setup azért "kell", hogy a telepítővel a regisztrációt is meg tudjam oldani. Ha egy komplett alkalmazás részeként akarom Python COM komponenseimet terjeszteni, akkor persze az ahhoz használt telepítő legalább olyan jó mint az Inno Setup:-).

Innen tudod letölteni a PyCOMDist.zip csomagot, ami segítségedre lehet Python-ban írt COM komponensek telepítésében.

A "Python és COM, II. rész" című cikkemben szereplő dynamit.py COM szerverhez letölthettek egy minta Inno Setup szkriptet. A PyCOMDist.zip csomagban levő FullCollect.py segítségével generájátok le ti is a könyvtárszerkezetet, tegyétek be ezt a szkriptet a dist_dynamit könyvtárba, aktulizáljátok benne a könyvtárneveket és végül fordítsátok le az Inno Setup-al.

Összegzés

Tudom mindez arra kevés, hogy a fenti eszközökkel gond nélkül boldoguljatok. Az egész cikket elsősorban áttekintésnek szántam és csak a lehetőségeket kívántam felvillantani.

A telepítőt tesztelni is kell. Erre nálam a vmware vált be. A vmware ad egy virtuális gépet és így operációsrendszert futtathatsz az operációs rendszerben, sőt egyszerű fájlmásolással tudod lementeni az operációs rendszeredet. Igy nem kell külön gép, külön partíció csak licensz a tesztelendő Windows-hoz. Linux-on is fut a vmware és Linux-ot is tud futtatni. Sajna nem ingyenes, de az ára megfizethető és egy hónapra érvényes teszt licenszet(nincs benne az időn kívül más korlátozás) is lehet kérni tőlük.

Kiss Árpád