Python Language
PyInstaller - Python-code distribueren
Zoeken…
Syntaxis
- pyinstaller [opties] script [script ...] | specfile
Opmerkingen
PyInstaller is een module die wordt gebruikt om python-apps in één pakket te bundelen, samen met alle afhankelijkheden. De gebruiker kan de pakket-app vervolgens uitvoeren zonder een python-interpreter of modules. Het bundelt correct vele grote pakketten zoals numpy, Django, OpenCv en andere.
Enkele belangrijke punten om te onthouden:
- Pyinstaller ondersteunt Python 2.7 en Python 3.3+
- Pyinstaller is getest tegen Windows, Linux en Mac OS X.
- Het is GEEN cross-compiler. (Een Windows-app kan niet in Linux worden verpakt. U moet PyInstaller in Windows uitvoeren om een app voor Windows te bundelen)
Installatie en instellingen
Pyinstaller is een normaal python-pakket. Het kan worden geïnstalleerd met behulp van pip:
pip install pyinstaller
Installatie in Windows
Voor Windows is pywin32 of pypiwin32 een vereiste. De laatste wordt automatisch geïnstalleerd wanneer pyinstaller wordt geïnstalleerd met behulp van pip.
Installatie in Mac OS X
PyInstaller werkt met de standaard Python 2.7 die wordt meegeleverd met de huidige Mac OS X. Als latere versies van Python worden gebruikt of als belangrijke pakketten zoals PyQT, Numpy, Matplotlib en dergelijke worden gebruikt, is het raadzaam om ze te installeren met behulp van hetzij MacPorts of Homebrew .
Installeren vanuit het archief
Als pip niet beschikbaar is, downloadt u het gecomprimeerde archief van PyPI .
Download het gecomprimeerde archief van de ontwikkelingstak van de PyInstaller Downloads- pagina om de ontwikkelingsversie te testen.
Vouw het archief uit en zoek het script setup.py
. Voer python setup.py install
met beheerdersrechten om PyInstaller te installeren of te upgraden.
Verifiëren van de installatie
Het commando pyinstaller
zou op het systeempad voor alle platforms moeten bestaan na een succesvolle installatie.
Controleer het door pyinstaller --version
in de opdrachtregel te typen. Hiermee wordt de huidige versie van pyinstaller afgedrukt.
Pyinstaller gebruiken
Navigeer in het eenvoudigste geval naar de map waarin uw bestand zich bevindt en typ:
pyinstaller myfile.py
Pyinstaller analyseert het bestand en maakt:
- Een myfile.spec- bestand in dezelfde map als
myfile.py
- Een map te bouwen in dezelfde map als
myfile.py
- Een dist- map in dezelfde map als
myfile.py
- Log bestanden in de map te bouwen
De gebundelde app is te vinden in de map dist
opties
Er zijn verschillende opties die kunnen worden gebruikt met pyinstaller. Een volledige lijst met opties vindt u hier .
Eenmaal gebundeld kan uw app worden uitgevoerd door 'dist \ myfile \ myfile.exe' te openen.
Bundelen naar één map
Wanneer PyInstaller wordt gebruikt zonder opties om myscript.py
te bundelen, is de standaarduitvoer een enkele map (met de naam myscript
) met een uitvoerbaar bestand met de naam myscript
( myscript.exe
in Windows) en alle benodigde afhankelijkheden.
De app kan worden gedistribueerd door de map te comprimeren in een zipbestand.
Een mapmodus kan expliciet worden ingesteld met de optie -D
of --onedir
pyinstaller myscript.py -D
voordelen:
Een van de grote voordelen van bundelen naar één map is dat het eenvoudiger is om problemen op te lossen. Als modules niet kunnen worden geïmporteerd, kan dit worden gecontroleerd door de map te inspecteren.
Een ander voordeel wordt gevoeld tijdens updates. Als er een paar wijzigingen in de code zijn, maar de gebruikte afhankelijkheden exact hetzelfde zijn, kunnen distributeurs alleen het uitvoerbare bestand verzenden (dat doorgaans kleiner is dan de hele map).
nadelen
Het enige nadeel van deze methode is dat de gebruikers moeten zoeken naar het uitvoerbare bestand uit een groot aantal bestanden.
Gebruikers kunnen ook andere bestanden verwijderen / wijzigen waardoor de app mogelijk niet correct werkt.
Bundelen naar een enkel bestand
pyinstaller myscript.py -F
De opties om een enkel bestand te genereren zijn -F
of --onefile
. Dit bundelt het programma in een enkel bestand myscript.exe
.
Het uitvoerbare bestand voor één bestand is langzamer dan de bundel met één map. Ze zijn ook moeilijker te debuggen.