Sto creando un'applicazione Python e non voglio forzare i miei clienti a installare Python e i moduli.
Quindi, c'è un modo per compilare uno script Python in modo che sia un eseguibile autonomo?
Sto creando un'applicazione Python e non voglio forzare i miei clienti a installare Python e i moduli.
Quindi, c'è un modo per compilare uno script Python in modo che sia un eseguibile autonomo?
Risposte:
Puoi usare py2exe come già risposto e usare cython per convertire i tuoi .py
file chiave in .pyc
, file compilati in C, come .dll
in Windows e .so
in Linux, molto più difficili da ripristinare rispetto ai comuni .pyo
e ai .pyc
file (e anche ottenere prestazioni!)
È possibile utilizzare PyInstaller per impacchettare i programmi Python come eseguibili autonomi. Funziona su Windows, Linux e Mac.
PyInstaller Quickstart
Installa PyInstaller da PyPI:
pip install pyinstaller
Vai alla directory del tuo programma ed esegui:
pyinstaller yourprogram.py
Questo genererà il bundle in una sottodirectory chiamata
dist
.Per una procedura dettagliata, consultare il manuale .
Potresti voler indagare su Nuitka . Prende il codice sorgente di Python e lo converte in chiamate API C ++. Quindi si compila in un file binario eseguibile (ELF su Linux). È in circolazione da alcuni anni e supporta una vasta gamma di versioni di Python.
Probabilmente otterrai anche un miglioramento delle prestazioni se lo usi. Consigliato.
Vorrei compilare alcune informazioni utili sulla creazione di file autonomi su Windows utilizzando Python 2.7.
Ho usato py2exe e funziona, ma ho avuto alcuni problemi.
Ha mostrato alcuni problemi per la creazione di singoli file in Windows 64 bit: l' utilizzo di bundle_files = 1 con py2exe non funziona ;
È necessario creare un file setup.py affinché funzioni. http://www.py2exe.org/index.cgi/Tutorial#Step2 ;
Ho avuto problemi con le dipendenze che devi risolvere importando i pacchetti nel file di installazione;
Non sono riuscito a farlo funzionare insieme a PyQt ..
Quest'ultima ragione mi ha fatto provare PyInstaller http://www.pyinstaller.org/ .
Secondo me, è molto meglio perché:
Suggerisco di creare un file .bat con le seguenti righe (pyinstaller.exe deve trovarsi nel percorso di Windows):
pyinstaller.exe --onefile MyCode.py
È possibile creare un singolo file, tra le altre opzioni ( https://pyinstaller.readthedocs.io/en/stable/usage.html#options ).
Ho avuto solo un problema con PyInstaller e il pacchetto multiprocessing che è stato risolto usando questa ricetta: https://github.com/pyinstaller/pyinstaller/wiki/Recipe-Multiprocessing .
Quindi, penso che, almeno per Python 2.7, un'opzione migliore e più semplice sia PyInstaller.
--onefile
flag non ti aiuterà a renderlo portatile su Windows, perché l'eseguibile vuole ancora collegarsi con la api-ms-win-crt-runtime-l1-1-0.dll
libreria (o / e altri) che deve essere installata attraverso il vcredist
pacchetto. Quindi una dipendenza è ancora lì e deve essere installata prima dell'esecuzione.
Sì, è possibile compilare gli script Python in eseguibile autonomo.
PyInstaller può essere utilizzato per convertire i programmi Python in file eseguibili autonomi, in Windows , Linux , Mac OS X , FreeBSD , Solaris e AIX . È uno dei convertitori consigliati.
py2exe converte gli script Python in eseguibili solo nella piattaforma Windows.
Cython è un compilatore statico sia per il linguaggio di programmazione Python che per il linguaggio di programmazione Cython esteso.
E una terza opzione è cx_Freeze
, che è multipiattaforma.
cx_Freeze
versioni quotate su pypi dalla fine del 2017. Questo progetto è stato abbandonato?
ti potrebbe piacere py2exe . troverai anche informazioni per farlo su Linux
Usa py2exe .... usa sotto i file di configurazione:
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()
)
Mi piace pyinstaller - in particolare la variante "a finestre":
pyinstaller --onefile --windowed myscript.py
Creerà un singolo file * .exe in una cartella dist /.
Consiglio anche pyinstaller
per una migliore compatibilità con le versioni precedenti come python 2.3 - 2.7.
per py2exe , devi avere python 2.6
Per gli script Python 3.2 l'unica scelta è Cxfreeze. Costruiscilo da fonti altrimenti non funzionerà.
Per python 2.x suggerisco pyinstaller in quanto può impacchettare un programma python in un singolo eseguibile, a differenza di CxFreeze che genera anche librerie.
py2exe creerà il file exe desiderato ma è necessario disporre della stessa versione di MSVCR90.dll sul computer in cui verrà utilizzato il nuovo exe. Vedi http://www.py2exe.org/index.cgi/Tutorial per maggiori informazioni.
Puoi trovare l'elenco delle utility di distribuzione elencate @ https://wiki.python.org/moin/DistributionUtilities .
Uso bbfreeze e ha funzionato molto bene (ancora per avere il supporto di Python 3).
.so
file o copierà i file .egg direttamente e saranno tutti presenti in una singola directory (o come un singolo file). Non è richiesta l'installazione.
Usando pyinstaller, ho trovato un metodo migliore usando il collegamento a .exe anziché crearlo --onefile
. Comunque ci sono probabilmente dei file di dati in giro e se stai eseguendo un'app basata sul sito, il tuo programma dipende anche da file html, js, css. Inutile spostare tutti questi file da qualche parte .. invece cosa succede se spostiamo il percorso di lavoro verso l'alto.
Crea una scorciatoia per l'exe, spostala in alto e imposta la destinazione e i percorsi di avvio come specificato, per avere percorsi relativi che vanno a dist \ folder:
Target: %windir%\system32\cmd.exe /c start dist\web_wrapper\web_wrapper.exe
Start in: "%windir%\system32\cmd.exe /c start dist\web_wrapper\"
posso rinominare la scorciatoia in qualsiasi cosa, così rinominando in "GTFS-Manager"
Ora quando raddoppio -fai clic sul collegamento, è come se avessi eseguito Python sul file! Ho trovato questo approccio migliore di --onefile
quello come:
Oh, ricorda di eliminare la cartella di build dopo la creazione, salverà sulla dimensione.
Usa Cython per convertire in c, compilare e collegarti con gcc. Un altro potrebbe essere, rendere le funzioni principali in c (quelle che si vogliono rendere difficili da invertire), compilarle e usare python boost per importare il codice compilato (in più si ottiene un'esecuzione del codice molto più veloce). quindi utilizzare qualsiasi strumento menzionato per distribuire.
Mi è stato detto che PyRun, https://www.egenix.com/products/python/PyRun/ , è anche un'opzione.