Python, erős, sokoldalú, mint ez, hiányzik néhány kulcsfontosságú képességeit a dobozból. Egyrészt a Python nem biztosít natív mechanizmust a Python program önálló végrehajtható csomagba történő összeállításához.
ahhoz, hogy tisztességes legyen, a Python eredeti használati esete soha nem hívott önálló csomagokat. A Python programokat nagyjából a helyén futtatták olyan rendszereken, ahol a Python tolmács egy példánya élt. De a Python növekvő népszerűsége nagyobb igényt teremtett a Python alkalmazások futtatására olyan rendszereken, ahol nincs telepített Python futási idő.,
Több harmadik fél kifejlesztett megoldásokat önálló Python alkalmazások telepítésére. A legnépszerűbb megoldás a csomó, a legérettebb, PyInstaller. PyInstaller nem teszi a Python alkalmazás csomagolásának folyamatát teljesen fájdalommentessé,de hosszú utat tesz meg.
ebben a cikkben megvizsgáljuk a PyInstaller használatának alapjait, beleértve a PyInstaller működését, a PyInstaller használatát önálló Python futtatható fájl létrehozásához, a létrehozott Python futtatható fájlok finomhangolásához, valamint a PyInstaller használatával járó gyakori buktatók elkerüléséhez.,
Pyinstaller csomag létrehozása
a PyInstaller egy Python csomag, amelyet a pip
(pip install pyinstaller
) telepített. PyInstaller lehet telepíteni az alapértelmezett Python telepítés, de a legjobb, hogy hozzon létre egy virtuális környezetet a projekt szeretne csomagolni, majd telepítse PyInstaller ott.
PyInstaller úgy működik, hogy elolvassa a Python programot, elemezve az összes importot, és csomagolja az import példányait a programjával. PyInstaller olvas a programban a belépési pont., Például, ha a program belépési pontja myapp.py
, akkor a pyinstaller myapp.py
futtatná az elemzést. PyInstaller képes felismerni és automatikusan csomagolni sok közös Python csomagok, mint a NumPy, de lehet, hogy meg kell, hogy tippeket bizonyos esetekben. (Erről bővebben később.)
miután elemezte a kódot, és felfedezte az összes általa használt könyvtárat és modult, a PyInstaller ezután létrehoz egy ” spec fájlt.”A python script a kiterjesztés .spec
, ez a fájl tartalmazza a részleteket arról, hogy a Python app kell csomagolni., Az első alkalommal, amikor fut PyInstaller az alkalmazás, PyInstaller létrehoz egy spec fájlt a semmiből, majd töltse fel néhány épelméjű alapértelmezett. Ne dobja el ezt a fájlt; ez a kulcsa a PyInstaller telepítésének finomításához!
végül a PyInstaller megkísérel egy futtatható fájlt előállítani az alkalmazásból,az összes függőséggel együtt. Ha elkészült, egy dist
nevű almappa jelenik meg a projektkönyvtárban (alapértelmezés szerint szabadon megadhat egy másik nevet)., Ez viszont tartalmaz egy könyvtárat, amely a csomagban app-ez egy .exe
fájlt futtatni, valamint az összes könyvtárak és egyéb kiegészítő fájlokat szükséges.
mindössze annyit kell tennie, hogy terjeszteni a programot, akkor, a csomag fel ezt a könyvtárat, mint egy .zip
fájl vagy más csomag. A csomagot általában egy olyan könyvtárban kell kibontani, ahol a felhasználónak írási jogosultsága van a futtatáshoz.
Pyinstaller csomag tesztelése
jó esély van arra, hogy a PyInstaller első kísérlete egy alkalmazás csomagolására nem lesz teljesen sikeres.
annak ellenőrzéséhez, hogy a PyInstaller csomag működik-e, keresse meg a mellékelt futtatható fájlt tartalmazó könyvtárat, majd futtassa a .exe
fájlt a parancssorból., Ha nem fut, a parancssorba nyomtatott hibáknak utalást kell adniuk arra, hogy mi a baj.
a PyInstaller csomag meghibásodásának leggyakoribb oka az, hogy a PyInstaller nem kötötte össze a szükséges fájlt. Az ilyen hiányzó fájlok néhány kategóriába tartoznak:
- rejtett vagy hiányzó import: néha a PyInstaller nem tudja észlelni egy csomag vagy könyvtár importálását, általában azért, mert dinamikusan importálja. A csomagot vagy a könyvtárat manuálisan kell megadni.,
- hiányzó önálló fájlok: Ha a program külső adatfájloktól függ, amelyeket a programhoz kell csomagolni, a Pyinstallernek nincs módja tudni. Manuálisan kell felvennie a fájlokat.
- hiányzó binárisok: itt is, ha a program függ egy külső bináris, mint egy .DLL hogy PyInstaller nem tudja észlelni, akkor kell manuálisan is.
a jó hír az, hogy a PyInstaller egyszerű módot kínál a fenti problémák kezelésére., A PyInstaller által létrehozott.spec
fájl olyan mezőket tartalmaz, amelyeket kitölthetünk, hogy megadjuk azokat a részleteket, amelyeket PyInstaller elmulasztott.
nyissa meg a.spec
fájlt egy szövegszerkesztőben, majd keresse meg aAnalysis
objektum meghatározását. Több paraméter át Analysis
üres listák, de lehet szerkeszteni, hogy adja meg a hiányzó részleteket:
-
hiddenimports
rejtett vagy hiányzó import: Add, hogy ezt a listát egy vagy több karakterláncot a könyvtárak kívánt tartalmazza az alkalmazást., Ha hozzá szeretné adni apandas
ésbokeh
, akkor például azt adja meg, hogy. Vegye figyelembe, hogy a szóban forgó könyvtárakat ugyanabban a Python-példányban kell telepíteni, ahol a PyInstaller fut.
-
datas
hiányzó önálló fájlok esetén: adjon hozzá egy vagy több specifikációt a projektfában lévő fájlokhoz, amelyeket a projekthez be szeretne illeszteni., Minden fájlt át kell adni, mint egy tuple jelzi a relatív elérési utat a fájlhoz a projekt könyvtárában, valamint a relatív elérési utat a disztribúciós könyvtáron belül, ahová a fájlt el szeretné helyezni. Például, ha volt egy./models/mainmodel.dat
fájlja, amelyet be akart illeszteni az alkalmazásba, és azt egy megfelelő alkönyvtárba szeretné helyezni a disztribúciós könyvtárban, akkor a('./models/mainmodel.dat','./models')
– ot használja ahiddenimports
listában. Vegye figyelembe, hogy aglob
-stílusú helyettesítő karaktereket több fájl megadásához használhatja., -
binaries
a hiányzó önálló binárisok: Mintdatas
, akkor abinaries
át egy listát a párok, hogy adja meg a helyszínen, a bináris fájlok a projekt fa, valamint a célok a forgalmazási könyvtár. Ismét használhatja aglob
-stílusú helyettesítő karaktereket.
ne feledje, hogy a Analysis
– nak átadott listák közül bármelyik programozható a .spec
fájlban., Végül is a.spec
fájl csak egy Python szkript más néven.
a .spec
fájl módosítása után indítsa újra a Pyinstallert a csomag újjáépítéséhez. Mostantól azonban feltétlenül adja át a módosított .spec
fájlt paraméterként (pl. pyinstaller myapp.spec
). Tesztelje a futtatható fájlt, mint korábban. Ha valami még mindig törött, akkor újra szerkesztheti a .spec
fájlt, majd ismételje meg a folyamatot, amíg minden működik.,
Végre, amikor elégedett vagy minden működik rendeltetésszerűen lehet szerkeszteni a .spec
fájlt, hogy ne a csomagolt alkalmazást bemutató egy parancssori ablakot, mikor indult. AEXE
objektumbeállításokban a.spec
fájlban állítsa be aconsole=False
értéket. A konzol elnyomása akkor hasznos, ha az alkalmazás rendelkezik GUI-val, és nem akarja, hogy egy hamis parancssori ablak félrevezesse a felhasználókat. Természetesen ne változtassa meg ezt a beállítást, ha az alkalmazáshoz parancssor szükséges.,
egy PyInstaller csomag finomítása
miután az alkalmazást csomagolta a PyInstaller-hez, és megfelelően fut, a következő dolog, amit valószínűleg meg akar tenni, egy kicsit csökkentse. PyInstaller csomagok nem ismert, hogy karcsú.
mivel a Python egy dinamikus nyelv, nehéz megjósolni, hogy mire lesz szükség futásidőben egy adott program. Ezért, amikor a PyInstaller csomagimportot észlel, mindent tartalmaz a csomagban, függetlenül attól, hogy a program futási időben használja-e.
itt van a jó hír., A PyInstaller olyan mechanizmust tartalmaz, amely szelektíven kizárja a teljes csomagokat vagy az egyes névtereket a csomagokon belül. Tegyük fel például, hogy a program import csomag foo
, amely magában foglalja a foo.bar
és foo.bip
. Ha tudja, hogy a program csak a foo.bar
logikát használja, akkor biztonságosan kizárhatja a foo.bip
helyet.
ehhez a excludes
paramétert használja, amelyet a Analysis
objektumra továbbítottak a .spec
fájlban., Átadhatja a nevek listáját-felső szintű modulok, vagy pontozott névterek—, hogy kizárja a csomagból. Például a foo.bip
kizárásához egyszerűen adja meg a értéket.
egy közös kizárás lehet, hogy a tkinter
, a Python könyvtár létrehozására egyszerű cross-platform grafikus felhasználói felületek. Alapértelmezés szerint a tkinter
és az összes támogató fájl PyInstaller projektbe van csomagolva. Ha nem használja atkinter
fájlt a projektben, akkor kizárhatja azt a'tkinter'
excludes
listához való hozzáadásával. A tkinter
kihagyása körülbelül 7 MB-kal csökkenti a csomag méretét.
egy másik gyakori kizárás a test suites., Ha a program által importált csomagnak van egy tesztcsomagja, akkor a tesztcsomag a PyInstaller csomagba kerülhet. Hacsak nem futtatja a tesztcsomagot a telepített programban, biztonságosan kizárhatja azt.
ne feledje, hogy a kizárásokkal létrehozott csomagokat használat előtt alaposan meg kell vizsgálni. Ha végül kizárja azokat a funkciókat, amelyeket valamilyen jövőbeli forgatókönyvben használnak, amelyre nem számított, az alkalmazás megszakad.
PyInstaller tippek
- készítse el PyInstaller csomagját a telepíteni kívánt operációs rendszerre., PyInstaller nem támogatja a cross-platform épít. Ha telepítenie kell az önálló Python alkalmazást MacOS, Linux és Windows rendszerekre, akkor telepítenie kell a PyInstaller alkalmazást, és mindegyik operációs rendszerre külön verziót kell készítenie.
- készítse el PyInstaller csomagját az alkalmazás fejlesztésekor. Amint megtudja, hogy a projektet a PyInstaller segítségével telepíti, készítse el a
.spec
fájlt, majd kezdje el finomítani a PyInstaller csomagot az alkalmazás fejlesztésével párhuzamosan., Ily módon felveheti kizárások vagy zárványok, ahogy megy, majd teszteljék, hogyan Új funkciók vannak telepítve az alkalmazás, ahogy írod őket. - ne használja a PyInstaller
--onefile
módot. PyInstaller tartalmaz egy parancssori kapcsoló,--onefile
, hogy a csomag a teljes alkalmazást egyetlen önkicsomagoló végrehajtható. Ez nagyszerű ötletnek hangzik — csak egy fájlt kell kézbesítenie! – de vannak buktatói. Amikor futtatja az alkalmazást, először ki kell csomagolnia az összes fájlt a végrehajtható fájlból egy ideiglenes könyvtárba., Ha az alkalmazás nagy (például 200 MB), a kicsomagolás néhány másodperces késleltetést jelenthet. Ehelyett használja az alapértelmezett egykönyvtáras módot, majd csomagoljon mindent.zip
fájlként. - telepítő létrehozása A PyInstaller alkalmazáshoz. Ha azt szeretné, hogy valamilyen módon telepíteni az alkalmazást más, mint egy .zip fájl, fontolja meg egy telepítő segédprogram, mint a nyílt forráskódú Nullsoft Scriptable Install System. Ez ad nagyon kevés fölött, hogy a méret a szállítható, lehetővé teszi, hogy konfigurálja sok szempontból a telepítési folyamat, mint a létrehozása parancsikonokat a végrehajtható.,
- ne várjon gyorsítást. A PyInstaller egy csomagolási rendszer, nem fordító vagy optimalizáló. Kód csomagolt PyInstaller nem fut gyorsabban, mint azt, ha fut az eredeti rendszer. Ha fel akarja gyorsítani a Python kódot, használjon egy C-gyorsított könyvtárat, amely megfelel a feladatnak, vagy egy olyan projektet, mint a Cython.,w, hogy gyorsítsák fel a Python
- Hogyan telepítsük a Python okosan
- Jobb Python projekt menedzsment a Költészet
- Virtualenv, valamint venv: Piton virtuális környezetben magyarázta
- Python virtualenv, valamint venv, hogy mit szabad, s mit nem
- Python threading pedig subprocesses magyarázta
- Hogyan kell használni a Python debugger
- Hogyan kell használni timeit hogy profil Python kód
- Hogyan kell használni cProfile hogy profil Python kód
- induláshoz aszinkron Python
- Hogyan kell használni asyncio Python
- Hogyan kell átalakítani Python JavaScript (meg vissza)