Hoe kan ik een zelfstandig uitvoerbaar Python-script zonder enige afhankelijkheid uitvoeren?

Ik ben een Python-toepassing aan het bouwen en wil mijn klanten niet dwingen Python en modules te installeren.

Dus, is er een manier om een Python-script te compileren als een zelfstandig uitvoerbaar bestand?


Antwoord 1, autoriteit 100%

U kunt py2exegebruiken zoals al beantwoord en Cythonom uw belangrijkste .py-bestanden te converteren naar .pyc, C-gecompileerde bestanden, zoals .dllin Windows en .soop Linux.

Het is veel moeilijker terug te zetten dan gewone .pyo– en .pyc-bestanden (en ook prestatiewinst!).


Antwoord 2, autoriteit 98%

Je kunt PyInstallergebruiken om Python-programma’s als zelfstandige uitvoerbare bestanden te verpakken. Het werkt op Windows, Linux en Mac.

PyInstaller-snelstart

PyInstaller installeren vanaf PyPI:

pip install pyinstaller

Ga naar de directory van je programma en voer het volgende uit:

pyinstaller yourprogram.py

Hiermee wordt de bundel gegenereerd in een submap met de naam dist.

pyinstaller -F yourprogram.py

Als u de parameter -F (of –onefile) toevoegt, wordt alles in één “exe” verpakt.

pyinstaller -F --paths=<your_path>\Lib\site-packages  yourprogram.py

Als u “ImportError” tegenkomt, kunt u side-packages overwegen.

pip install pynput==1.6.8

Nog steeds runing in import-erorr – probeer Pyinstaller te downgraden – zie Fout Bij gebruik van pynput met pyinstaller

Zie voor een meer gedetailleerde walkthrough, zie de handmatig .


Antwoord 3, Autoriteit 35%

Misschien wilt u nuitka . Het vergt Python-broncode en converteert het naar C++ API-oproepen. Dan compileert het in een uitvoerbaar binair (ELF op Linux). Het bestaat al een paar jaar en ondersteunt een breed scala aan Python-versies.

U krijgt waarschijnlijk ook een prestatieverbetering als u het gebruikt. Het wordt aanbevolen.


Antwoord 4, Autoriteit 12%

Ja, het is mogelijk om Python-scripts samen te stellen naar stand-alone uitvoerbare bestanden.

Pyinstaller kan worden gebruikt om Python-programma’s om te zetten in stand-alone executables, onder Windows , Linux , Mac OS X , FreeBSD , Solaris , en AIX . Het is een van de aanbevolen converters.

py2exe converteert Python-scripts in alleen uitvoerbaar op het Windows-platform.

Cython is een statische compiler voor zowel de Python-programmeertaal als de uitgebreide taal van Cython.


Antwoord 5, Autoriteit 12%

Ik wil graag enkele nuttige informatie samenstellen over het maken van standalone-bestanden op Windows met Python 2.7.

Ik heb py2exegebruikt en het werkt, maar ik had wat problemen.

Om deze laatste reden probeerde ik PyInstallerhttp://www.pyinstaller.org/ .

Naar mijn mening is het veel beter omdat:

  • Het is gemakkelijker te gebruiken.

Ik stel voor een .bat-bestand te maken met bijvoorbeeld de volgende regels (pyinstaller.exe moet in het Windows-pad staan):

pyinstaller.exe --onefile MyCode.py

Dus ik denk dat, in ieder geval voor Python 2.7, PyInstaller een betere en eenvoudigere optie is.


Antwoord 6, autoriteit 11%

En een derde optie is cx_Freeze, wat cross- platform.


Antwoord 7, autoriteit 7%

pyinstaller yourfile.py -F --onefile

Hiermee wordt een zelfstandig EXE-bestand op Windows gemaakt.

Belangrijke opmerking 1: Het EXE-bestand wordt gegenereerd in een map met de naam ‘dist’.

Belangrijke opmerking 2: vergeet niet –onefile flag

Je kunt PyInstaller installeren met pip install PyInstaller

OPMERKING: In zeldzame gevallen zijn er verborgen afhankelijkheden…dus als u het EXE-bestand uitvoert en een ontbrekende bibliotheekfout krijgt (win32timezone in het onderstaande voorbeeld), gebruik dan zoiets als dit:

pyinstaller --hiddenimport win32timezone -F "Backup Program.py"

Antwoord 8, autoriteit 6%

Ik hou van PyInstaller– vooral de “windowed”-variant:

pyinstaller --onefile --windowed myscript.py

Het zal één enkel *.exe-bestand maken in een distination/map.


Antwoord 9, autoriteit 6%

Misschien vind je py2exeleuk. Je vindt er ook informatie om het op Linux te doen.


Antwoord 10, autoriteit 5%

Gebruik py2exe…. gebruik de onderstaande installatiebestanden:

from distutils.core import setup
import py2exe
from distutils.filelist import findall
import matplotlib
setup(
    console = ['PlotMemInfo.py'],
    options = {
        'py2exe': {
            'packages': ['matplotlib'],
            'dll_excludes': ['libgdk-win32-2.0-0.dll',
                             'libgobject-2.0-0.dll',
            'libgdk_pixbuf-2.0-0.dll']
        }
    },
    data_files = matplotlib.get_py2exe_datafiles()
)

Antwoord 11, autoriteit 5%

Ik raad ook PyInstalleraan voor betere achterwaartse compatibiliteit, zoals Python 2.3 – 2.7.

Voor py2exemoet je Python 2.6 hebben.


Antwoord 12, autoriteit 3%

Voor Python 3.2-scripts is de enige keuze cx_Freeze. Bouw het uit bronnen; anders werkt het niet.

Voor Python 2.x raad ik PyInstaller aan omdat het een Python-programma in een enkel uitvoerbaar bestand kan verpakken, in tegenstelling tot cx_Freeze dat ook bibliotheken uitvoert.


Antwoord 13, autoriteit 2%

py2exe maakt het gewenste EXE-bestand, maar u moet dezelfde versie van MSVCR90.dll hebben op de computer waarop u uw nieuwe EXE-bestand gaat gebruiken.

Zie Tutorialvoor meer informatie.

p>


Antwoord 14, autoriteit 2%

U kunt de lijst met distributiehulpprogramma’s vinden op Distributiehulpprogramma’s.

Ik gebruik bbfreezeen het werkt erg goed (ik heb Python  3 ondersteuning wel).


Antwoord 15

Niet bepaald een verpakking van de Python-code, maar er is nu ook Grumpyvan Google, die transpileert de code naar Go.

Het ondersteunt de Python C API niet, dus het werkt mogelijk niet voor alle projecten.


Antwoord 16

Met behulp van PyInstallervond ik een betere methode door een snelkoppeling naar de .exe te gebruiken in plaats van --onefile. Hoe dan ook, er zijn waarschijnlijk enkele gegevensbestanden in de buurt en als u een sitegebaseerde app gebruikt, is uw programma ook afhankelijk van HTML-, JavaScript- en CSS-bestanden. Het heeft geen zin om al deze bestanden ergens heen te verplaatsen… Wat als we in plaats daarvan het werkpad naar boven verplaatsen?

Maak een snelkoppeling naar het EXE-bestand, verplaats het naar boven en stel de doel- en start-in-paden in zoals gespecificeerd, zodat relatieve paden naar dist\foldergaan:

Target: %windir%\system32\cmd.exe /c start dist\web_wrapper\web_wrapper.exe
Start in: "%windir%\system32\cmd.exe /c start dist\web_wrapper\"

We kunnen de snelkoppeling naar alles hernoemen, dus hernoemen naar “GTFS-Manager”.
Als ik nu dubbelklik op de snelkoppeling, is het alsof ik python-het bestand heb uitgevoerd! Ik vond deze aanpak beter dan de --onefile als:

  1. In het geval van OneFile is er een probleem met een .dll ontbreekt voor de Windows & NBSP; 7 OS die een voorafgaande installatie nodig heeft, enz. Geeuw. Met de gebruikelijke build met meerdere bestanden, geen dergelijke problemen.
  2. Alle bestanden die mijn Python-script gebruikt (het implementeert een Tornado-webserver en heeft een hele freakin’-website aan bestanden nodig om er te zijn!) HOEFT GEEN WERELD WERELD WERELD: Ik maak eenvoudig de snelkoppeling bovenaan.
  3. Ik kan deze exact dezelfde map in feite gebruiken op ubuntu (uitvoeren python3 myfile.py) en Windows (Dubbelklik op de snelkoppeling).
  4. Ik hoef niet de moeite te nemen met de overdreven gecompliceerde hacking van .spec-bestand om gegevensbestanden, enz.
  5. toe te voegen.

Oh, vergeet niet om de build-map na het bouwen te verwijderen. Het bespaart op maat.


Antwoord 17

Gebruik cython om te converteren naar c, compileren en koppeling met GCC.

Een ander zou kunnen zijn, maak de kernfuncties in C (degenen die u wilt maken om te achterhalen), compileer ze en gebruik boost.python om de gecompileerde code te importeren (plus u krijgt een veel snellere code uitvoering). Gebruik vervolgens een gereedschap die wordt vermeld om te distribueren.


Antwoord 18

Omdat het lijkt te ontbreken in de huidige lijst met antwoorden, denk ik dat het de moeite waard is om te vermelden dat de standaardbibliotheek een zipappmodule die voor dit doel kan worden gebruikt. Het basisgebruik is het comprimeren van een aantal Python-bestanden in een zip-bestand met de extensie .pyzdat direct kan worden uitgevoerd als python myapp.pyz, maar u kunt ook een op zichzelf staand pakket uit een requirements.txt-bestand:

$ python -m pip install -r requirements.txt --target myapp
$ python -m zipapp -p "interpreter" myapp

Waar interpreterzoiets kan zijn als /usr/bin/env python(zie De tolk specificeren).

Normaal gesproken zou het gegenereerde bestand .pyz/ .pyzwuitvoerbaar moeten zijn, in Unix omdat het als zodanig wordt gemarkeerd en in Windows omdat Python-installatie deze extensies meestal registreert. Het is echter relatief eenvoudig om een Windows-uitvoerbaar bestand te makendie zou moeten werken zolang de gebruiker python3.dllin het pad heeft.

Als u niet wilt dat de eindgebruiker Python installeert, kunt u de toepassing samen met het insluitbare Python-pakket.


Antwoord 19

Er is mij verteld dat PyRunook een optie is. Het ondersteunt momenteel Linux, FreeBSD en Mac OS X.

Other episodes