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.

IDG

A .spec fájl létrehozásához használt futtatható PyInstaller., Vegye figyelembe a excludesalatt felsorolt névtereket. Ezek kimaradnak a létrehozott csomagból a helytakarékosság érdekében.

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 a pandas és bokeh, 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 a hiddenimports listában. Vegye figyelembe, hogy a glob -stílusú helyettesítő karaktereket több fájl megadásához használhatja.,
  • binaries a hiányzó önálló binárisok: Mint datas, akkor a binaries á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 a glob -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.

IDG

A PyInstaller által létrehozott szállítható könyvtár. A könyvtárban található nagyszámú fájl miatt egy harmadik féltől származó telepítőprojekt, például az NSIS használható arra, hogy a könyvtárat egy önkicsomagoló archívumba csomagolja, majd automatikusan létrehoz egy parancsikont a futtatható fájlhoz.,

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)