python - Hvordan kan jeg konvertere en pakke til en exe ved hjælp af pyinstaller?

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har et open source python kommandolinjeprogram, der kører på Python 2.7, Python3 +, og er cross platform.


Jeg forsøger at pakke det op til en eksekverbar for mine Windows-brugere lettere. Kilden til denne pakke er på Github her: https://github.com/stormpath/stormpath-cli[8]


Jeg forsøger at pakke mit Python-program op ved hjælp af pyinstaller, men jeg har problemer. [9]


Jeg kører følgende kommandoer fra en Windows 8-boks:


$ pyinstaller --onefile setup.py


Dette genererer med succes en EXE-fil til mig, men når jeg går til at køre det, får jeg følgende fejl:


Traceback (most recent call last):
  File "setup.py", line 4, in <module>
  File "c:python27Libsite-packagesPyInstallerloaderpyimod03\_importers.py", line 389, in load\_module
    exec(bytecode, module.\_\_dict\_\_)
  File "site-packagessetuptools\_\_init\_\_.py", line 160, in <module>
  File "site-packagessetuptoolsmonkey.py", line 93, in patch\_all
  File "site-packagessetuptoolsmonkey.py", line 145, in patch\_for\_msvc\_specialized\_compiler
  File "importlib\_\_init\_\_.py", line 37, in import\_module
ImportError: No module named msvc
Failed to execute script setup


Til forsøgsformål, for at hjælpe med at indsnævre problemet, oprettede jeg et test.py script, der indeholder følgende kode:


print('hello, world!')


Og så pakket det ind i en exe også:


$ pyinstaller --onefile test.py


Når jeg kører denne resulterende exe, fungerer alt godt! Hej verden er output som forventet.


Jeg tror, ​​hvad der sker, at jeg ikke fortæller pyinstaller hvordan man korrekt 'opdager' at mit projekt er en python-pakke og ikke et enkelt fil script.


Jeg har læst gennem docs meget og har googled rundt, men har ikke fundet en måde at angive en pakke til pyinstaller til at analysere.


Hvad mangler jeg?

Bedste reference


Selvom jeg synes det er en helt fornuftig ting at gøre, ser det ud som om PyInstaller simpelthen ikke understøtter at opbygge et program fra en pakke (med \_\_main\_\_.py). [10]


Se https://github.com/pyinstaller/pyinstaller/issues/2560.[11]


Som en løsning kan du skrive en lille stub (uden for pakken), der gør det samme som din \_\_main\_\_.py. Herefter peger du på PyInstaller.