Programovanie

Ako používať program PyInstaller na vytvorenie spustiteľných súborov Pythonu

Python, taký výkonný a všestranný, že mu chýba niekoľko základných schopností. Za prvé, Python neposkytuje žiadny natívny mechanizmus na kompiláciu programu Python do samostatného spustiteľného balíka.

Aby sme boli spravodliví, pôvodný prípad použitia pre Python nikdy nevyžadoval samostatné balíčky. Programy Python boli vo všeobecnosti spustené na mieste v systémoch, kde žila kópia tlmočníka Pythonu. Zvyšujúca sa popularita Pythonu však spôsobila väčší dopyt po spustení aplikácií Pythonu v systémoch bez nainštalovaného runtime Pythonu.

Niekoľko tretích strán navrhlo riešenia na nasadenie samostatných aplikácií Python. Najpopulárnejším a najvyzretejším riešením partie je program PyInstaller. PyInstaller nevytvára proces balenia aplikácie v jazyku Python úplne bezbolestne, ale vedie tam dlhou cestou.

V tomto článku preskúmame základy používania aplikácie PyInstaller vrátane toho, ako PyInstaller funguje, ako používať program PyInstaller na vytvorenie samostatného spustiteľného súboru Pythonu, ako doladiť vami vytvorené spustiteľné súbory Pythonu a ako sa vyhnúť niektorým bežným nástrahám s použitím PyInstaller.

Vytvorenie balíka PyInstaller

PyInstaller je balík Python, nainštalovaný s pip (nainštalovať pyinstaller). PyInstaller je možné nainštalovať do predvolenej inštalácie Pythonu, ale je najlepšie vytvoriť virtuálne prostredie pre projekt, ktorý chcete zbaliť, a nainštalovať tam PyInstaller.

Program PyInstaller pracuje tak, že číta váš program Python, analyzuje všetky importy, ktoré vykonáva, a spája kópie týchto importov s programom. PyInstaller číta váš program od jeho vstupného bodu. Napríklad ak je vstupným bodom vášho programu myapp.py, bežali by ste pyinstaller myapp.py vykonať analýzu. PyInstaller dokáže zistiť a automaticky zabaliť mnoho bežných balíkov Pythonu, napríklad NumPy, ale v niektorých prípadoch budete musieť poskytnúť radu. (Viac o tom neskôr.)

Po analýze vášho kódu a objavení všetkých knižníc a modulov, ktoré používa, PyInstaller potom vygeneruje „spec súbor“. Pythonovský skript s príponou .spec, tento súbor obsahuje podrobnosti o tom, ako je potrebné zabaliť vašu aplikáciu v jazyku Python. Pri prvom spustení aplikácie PyInstaller vo vašej aplikácii program PyInstaller vygeneruje od začiatku súbor spec a vyplní ho niekoľkými rozumnými predvolenými nastaveniami. Nezahadzujte tento súbor; je to kľúč k zdokonaleniu nasadenia PyInstaller!

Nakoniec sa program PyInstaller pokúsi vytvoriť spustiteľný súbor z aplikácie, ktorý obsahuje všetky jeho závislosti. Po dokončení bude pomenovaný podpriečinok dist (predvolene; môžete zadať iný názov) sa zobrazí v adresári projektu. Toto zase obsahuje adresár, ktorý je vašou pribalenou aplikáciou - má .exe súbor, ktorý sa má spustiť, spolu so všetkými požadovanými knižnicami a ďalšími doplnkovými súbormi.

Všetko, čo musíte urobiť, aby ste distribuovali svoj program, je potom zabaliť tento adresár ako .PSČ súbor alebo iný zväzok. Zväzok bude zvyčajne potrebné rozbaliť v adresári, kde má používateľ povolenie na zápis, aby mohol byť spustený.

Testovanie balíka PyInstaller

Existuje veľká šanca, že váš prvý pokus o použitie balíka aplikácií pomocou programu PyInstaller nebude úplne úspešný.

Ak chcete skontrolovať, či váš balíček PyInstaller funguje, prejdite do adresára, ktorý obsahuje pribalený spustiteľný súbor, a spustite program .exe súbor tam z príkazového riadku. Ak sa nespustí, chyby, ktoré uvidíte vytlačené na príkazovom riadku, by mali pomôcť pri odstraňovaní problémov.

Najčastejším dôvodom zlyhania balíka PyInstaller je to, že PyInstaller nedokázal spojiť požadovaný súbor. Takéto chýbajúce súbory spadajú do niekoľkých kategórií:

  • Skryté alebo chýbajúce importy: Niekedy program PyInstaller nedokáže zistiť import balíka alebo knižnice, zvyčajne preto, že sa importuje dynamicky. Balík alebo knižnicu bude potrebné zadať ručne.
  • Chýbajú samostatné súbory: Ak program závisí na externých údajových súboroch, ktoré je potrebné s programom spojiť, program PyInstaller to nemá ako vedieť. Súbory budete musieť zahrnúť ručne.
  • Chýbajú binárne súbory: Ak váš program závisí na externom binárnom formáte, ako je .DLL, ktorý program PyInstaller nedokáže zistiť, budete ho musieť zahrnúť manuálne.

Dobrou správou je, že program PyInstaller poskytuje jednoduchý spôsob riešenia vyššie uvedených problémov. The .spec súbor vytvorený PyInstallerom obsahuje polia, ktoré môžeme vyplniť, aby sme poskytli podrobnosti, ktoré PyInstaller zmeškali.

Otvor .spec súbor v textovom editore a hľadajte definíciu súboru Analýza objekt. Niekoľko parametrov prešlo na Analýza sú prázdne zoznamy, ale je možné ich upraviť a určiť tak chýbajúce podrobnosti:

  • skryté importy za skrytý alebo chýbajúci dovoz: Pridajte do tohto zoznamu jeden alebo viac reťazcov s názvami knižníc, ktoré chcete zahrnúť do svojej aplikácie. Keby ste chceli pridať pandy a bokeh, zadali by ste to napríklad ako['pandy', 'bokeh']. Upozorňujeme, že príslušné knižnice musieť byť nainštalovaný v rovnakej inštancii Pythonu, kde používate PyInstaller.
  • údaje pre chýbajúce samostatné súbory: Pridajte sem jednu alebo viac špecifikácií súborov vo strome projektu, ktoré chcete zahrnúť do projektu. Každý súbor musí byť odovzdaný ako n-tica označujúca relatívnu cestu k súboru v adresári projektu a relatívnu cestu v distribučnom adresári, kam chcete súbor umiestniť. Napríklad, ak ste mali súbor ./models/mainmodel.dat ktoré ste chceli zahrnúť do svojej aplikácie a chcete ich umiestniť do zodpovedajúceho podadresára v distribučnom adresári, použili by ste ('./models/mainmodel.dat','./models') ako jeden záznam v skryté importy zoznam. Všimnite si, že môžete použiť glob-zástupné znaky určujúce viac ako jeden súbor.
  • dvojhviezdy za chýbajúce samostatné binárne súbory: Ako s údaje, môžeš použiť dvojhviezdy odovzdať zoznam n-tic, ktoré určujú umiestnenie binárnych súborov v strome projektu a ich ciele v distribučnom adresári. Opäť môžete použiť glob-zástupné znaky v štýle.

Nezabudnite, že niektorý zo zoznamov bol odovzdaný Analýza je možné programovo generovať skôr v .spec spis. Koniec koncov, .spec súbor je iba skript v jazyku Python s iným menom.

Po vykonaní zmien v .spec súbor, znova spustite program PyInstaller a znovu zostavte balík. Odteraz však upravený určite odovzdajte .spec súbor ako parameter (napr. pyinstaller myapp.spec). Spustiteľný súbor otestujte ako predtým. Ak je stále niečo poškodené, môžete znova upraviť súbor .spec súbor a opakujte postup, kým všetko nefunguje.

Nakoniec, keď budete spokojní, že všetko funguje tak, ako má, môžete upraviť.spec súbor, aby sa zabránilo spusteniu zabalenej aplikácie v okne príkazového riadku. V exe nastavenie objektu v .spec spis, setconsole = False. Potlačenie konzoly je užitočné, ak má vaša aplikácia grafické používateľské rozhranie a nechcete, aby rušivé okno príkazového riadku zavádzalo používateľov z cesty. Toto nastavenie samozrejme nemeňte, ak vaša aplikácia vyžaduje príkazový riadok.

Spresnenie balíka PyInstaller

Keď už máte svoju aplikáciu zabalenú v programe PyInstaller a správne fungujete, pravdepodobne budete chcieť ešte niečo zredukovať. Nie je známe, že by balíčky PyInstaller boli štíhlé.

Pretože Python je dynamický jazyk, je ťažké predpovedať, čo bude daný program za behu potrebovať. Z tohto dôvodu, keď PyInstaller zistí import balíka, bude obsahovať všetko v tom balíku, bez ohľadu na to, či ho váš program skutočne používa počas behu.

Tu sú dobré správy. PyInstaller obsahuje mechanizmus na selektívne vylučovanie celých balíkov alebo jednotlivcov menné priestory v rámci balíkov. Povedzme napríklad, že váš program importuje balík foo, ktoré zahŕňa foo.bar a foo.bip. Ak viete, že váš program používa iba logiku v foo.bar, môžete bezpečne vylúčiť foo.bip a ušetriť nejaké miesto.

K tomu použijete vylučuje parameter odovzdaný do Analýza objekt v .spec spis. Môžete odovzdať zoznam mien - moduly najvyššej úrovne alebo prerušované obory názvov - ktoré chcete vylúčiť zo svojho balíka. Napríklad vylúčiť foo.bip, jednoducho by ste špecifikovali['foo.bip'].

Jedno bežné vylúčenie, ktoré môžete urobiť, je tkinter, knižnica Python na vytváranie jednoduchých grafických používateľských rozhraní pre rôzne platformy. Predvolene,tkinter a všetky jeho podporné súbory sú zabalené v projekte PyInstaller. Ak nepoužívate tkinter vo svojom projekte ho môžete vylúčiť pridaním „tkinter“ do vylučuje zoznam. Vynecháva sa tkinter zmenší veľkosť balíka približne o 7 MB.

Ďalším častým vylúčením sú testovacie balíčky. Ak má balík, ktorý importuje váš program, testovaciu sadu, mohla by byť testovacia sada zahrnutá do vášho balíka PyInstaller. Pokiaľ vo svojom nasadenom programe skutočne nespustíte testovaciu sadu, môžete ju bezpečne vylúčiť.

Majte na pamäti, že balíčky vytvorené pomocou vylúčení by mali byť pred použitím dôkladne otestované. Ak nakoniec vylúčite funkcie, ktoré sa používajú v budúcom scenári, ktorý ste nepredpokladali, vaša aplikácia sa pokazí.

Tipy pre PyInstaller

  • Vytvorte si svoj balíček PyInstaller na operačnom systéme, na ktorý plánujete nasadiť. Program PyInstaller nepodporuje vytváranie viacerých platforiem. Ak potrebujete nasadiť samostatnú aplikáciu Python na systémy MacOS, Linux a Windows, budete si musieť nainštalovať PyInstaller a vytvoriť samostatné verzie aplikácie pre každý z týchto operačných systémov.
  • Pri vývoji svojej aplikácie si zostavte balíček PyInstaller. Akonáhle viete, že svoj projekt nasadzujete pomocou PyInstaller, zostavte si svoj .spec súbor a začnite vylepšovať balík PyInstaller paralelne s vývojom svojej aplikácie. Týmto spôsobom môžete priebežne pridávať vylúčenia alebo inklúzie a pri písaní vyskúšať, ako sú nové funkcie nasadené v aplikácii.
  • Nepoužívajte program PyInstaller--jeden súbor režim. PyInstaller obsahuje prepínač príkazového riadku, --jeden súbor, ktorý zbalí celú vašu aplikáciu do jedného samorozbaľovacieho spustiteľného súboru. Znie to ako skvelý nápad - musíte doručiť iba jeden súbor! - ale má to niekoľko úskalí. Kedykoľvek spustíte aplikáciu, musí najskôr rozbaliť všetky súbory v spustiteľnom priečinku do dočasného adresára. Ak je aplikácia veľká (napríklad 200 MB), rozbalenie môže znamenať oneskorenie niekoľko sekúnd. Použite namiesto toho predvolený režim jedného adresára a všetko zbalte ako .PSČ spis.
  • Vytvorte inštalačný program pre svoju aplikáciu PyInstaller. Ak chcete nasadiť svoju aplikáciu iným spôsobom ako súbor .zip, zvážte použitie inštalačného programu, ako je open source Nullsoft Scriptable Install System. Pridáva len veľmi malú réžiu k veľkosti dodávky a umožňuje vám konfigurovať mnoho aspektov procesu inštalácie, napríklad vytváranie odkazov na spustiteľný súbor.
  • Nečakajte zrýchlenie. PyInstaller je abalenie systém, nie azostavovateľalebo anoptimalizátor. Kód zabalený s programom PyInstaller nebeží rýchlejšie, ako by bežal pri spustení v pôvodnom systéme. Ak chcete zrýchliť kód v Pythone, použite knižnicu s akceleráciou C vhodnú pre danú úlohu alebo projekt ako Cython.

Ako urobiť viac s Pythonom

  • Výukový program pre Cython: Ako zrýchliť Python
  • Ako inteligentne nainštalovať Python
  • Lepšie riadenie projektov v Pythone s Poetry
  • Virtualenv a venv: Vysvetlenie virtuálnych prostredí Pythonu
  • Python virtualenv a venv robí a nerobí
  • Vysvetlenie vlákien a podprocesov v jazyku Python
  • Ako používať debugger Pythonu
  • Ako používať timeit na profilovanie kódu Pythonu
  • Ako používať cProfile na profilovanie kódu Pythonu
  • Začnite s asynchronizáciou v Pythone
  • Ako používať asyncio v Pythone
  • Ako previesť Python na JavaScript (a späť)
$config[zx-auto] not found$config[zx-overlay] not found