Crea un singolo eseguibile da un progetto Python


87

Voglio creare un singolo eseguibile dal mio progetto Python. Un utente dovrebbe essere in grado di scaricarlo ed eseguirlo senza bisogno di installare Python. Se stessi distribuendo un pacchetto, potrei usare pip, wheel e PyPI per crearlo e distribuirlo, ma ciò richiede che l'utente abbia Python e sappia come installare i pacchetti. Cosa posso usare per creare un eseguibile autonomo da un progetto Python?


Sto ancora scrivendo in 2.x (2.7.2 per l'esattezza), ma potrei vedere la necessità di trasferire a 3.x (se i moduli e simili sono compatibili) e anche allora avrei bisogno di una soluzione.
ShadowFlame

Si noti che la confezione complicherà notevolmente la diagnostica del problema. Non solo tu (o pdb) non hai un facile accesso ai file in esecuzione, py2exe(non so riguardo agli altri) non include i .pyfile, quindi non vedrai le linee di origine nelle tracce dello stack.
ivan_pozdeev

Proprio come punto di interesse, ho iniziato a utilizzare pyinstaller
ShadowFlame

Risposte:


115

Eccone alcuni comuni. Se non diversamente specificato, tutti i progetti elencati di seguito vengono mantenuti attivamente a partire dalla mia ultima modifica (gennaio 2020).

Ho anche incluso collegamenti ai rispettivi siti Web, repository e elenchi PyPi nel caso in cui desideri verificare tu stesso la frequenza con cui sono stati aggiornati.

Inoltre, se non diversamente specificato, tutti i programmi elencati di seguito produrranno un exe specifico per il sistema operativo in cui è in esecuzione. Quindi, ad esempio, l'esecuzione di Pyinstaller in Windows produrrà un exe di Windows, ma l'esecuzione di Pyinstaller in Linux produrrà un exe di Linux. Se vuoi produrre un exe per più sistemi operativi, dovrai cercare di utilizzare macchine virtuali o cercare di utilizzare qualcosa come Wine .


I seguenti programmi funzionano tutti in modo simile: raggruppano Python e il tuo programma, combinandoli efficacemente per produrre un eseguibile.

  • PyInstaller:

    • Link : sito web ||Repo || PyPi
    • Supporta : Python 2.7 e Python 3.4 - 3.7 su Windows, Mac e Linux.
  • cx_Freeze:

    • Link: sito web ||Repo || PyPi
    • Supporta: Python 2.7 e 3.5 - 3.8 su Windows, Mac e Linux.
  • py2app:

    • Link: sito web || Repo || PyPi
    • Supporta: Python 2.7 e 3.3 (?) - 3.7 (?) Solo su Mac.
    • Nota: a partire dalla mia ultima modifica, non sono stato in grado di determinare in modo definitivo la gamma esatta di versioni di Python supportate da pyapp. L'ultima versione menziona il supporto di Python 3.7.

Nota: le versioni precedenti di questo post includevano commenti per py2exe ( repo ) e bbfreeze ( repo ). Entrambi i progetti sono stati rimossi da questo elenco: hanno assistito a poca o nessuna attività per diversi anni e sembrano essere completamente non mantenuti. Vedere la cronologia delle modifiche per i vecchi commenti.


Ovviamente non è l'unico modo per fare le cose:

  • pynsist:

    • Link: sito web || Repo || PyPi
    • Supporta: tutte le versioni di Python? Nota: creerà solo programmi di installazione di Windows .
    • Altre note: Pynsist sembra supportare il raggruppamento di qualsiasi versione arbitraria di Python con la tua applicazione. Tuttavia, lo strumento stesso richiede Python 3.5+ per essere eseguito.

      Pynsist creerà un programma di installazione di Windows per il tuo programma che installerà direttamente Python sul computer dell'utente invece di raggrupparlo con il tuo codice e creerà scorciatoie che collegano al tuo script Python. Sebbene questo programma produca solo programmi di installazione di Windows, sembra che puoi ancora eseguire Pynsist su computer Mac e Linux.

  • Nuitka:

    • Link: sito web || Repo (specchio Github) ||PyPi
    • Supporta: Python 2.6 - 2.7 e Python 3.3 - 3.7 su Windows, Mac e Linux.
    • Altre note: Nuitka compilerà letteralmente il tuo codice Python e produrrà un exe (al contrario degli altri progetti, che includono semplicemente Python) per provare ad accelerare il tuo codice. Come effetto collaterale, otterrai anche un pratico file exe che puoi distribuire. Nota che devi avere un compilatore C ++ disponibile sul tuo sistema.
  • cython:

    • Link: sito web || Repo ||PyPi
    • Supporta: Python 2.6 - 2.7 e Python 3.2 - 3.8 su Windows, Mac e Linux.
    • Altre note: Cython è simile a Nuitka in quanto è un compilatore Python. Tuttavia, invece di compilare direttamente il tuo codice, lo compilerà in C. Puoi quindi prendere quel codice C e trasformare il tuo codice in un exe . Avrai bisogno di un compilatore C disponibile sul tuo sistema.

La mia preferenza personale è quella di utilizzare PyInstaller poiché è stato il più facile per me da installare e funzionare, è stato progettato per funzionare bene con varie librerie popolari come numpy o pygame e ha una grande compatibilità con vari sistemi operativi e versioni di Python.

Tuttavia, ho anche creato con successo vari ex utilizzando cx_Freeze senza troppe difficoltà, quindi dovresti anche considerare di provare quel programma.

Non ho ancora avuto la possibilità di provare ampiamente Pynist, Nuitka o Cython, ma sembrano soluzioni piuttosto interessanti e innovative. In caso di problemi nell'utilizzo del primo gruppo di programmi, potrebbe essere utile provare uno di questi tre. Poiché funzionano in modo fondamentalmente diverso rispetto ai programmi in stile Pyinstaller / cx_freeze, potrebbero avere successo in quei casi estremi in cui il primo gruppo fallisce.

In particolare, penso che pynist sia un buon modo per eludere l'intera questione della distribuzione del codice del tutto: Mac e Linux hanno già il supporto nativo per Python e la semplice installazione di Python su Windows potrebbe davvero essere la soluzione più pulita. (Lo svantaggio è ora che devi preoccuparti di prendere di mira più versioni di Python + installazione di librerie).

Nuitka e Cython (nella mia limitata esperienza) sembrano funzionare abbastanza bene. Di nuovo, non li ho testati a fondo personalmente, quindi la mia osservazione principale è che sembrano richiedere molto più tempo per produrre un exe rispetto ai programmi in stile "freeze".


Detto questo, convertire il tuo programma Python in un eseguibile non è necessariamente l'unico modo per distribuire il tuo codice. Per ulteriori informazioni sulle altre opzioni disponibili, vedere i seguenti collegamenti:


1
Nota che devi anche includere all'interno del tuo bundle i ridistribuibili Microsoft C ++ (ovvero msvcrxx.dll, dove xxè un numero di versione) per eseguire il file .exe (o chiedere agli utenti di installarlo da soli). Ciò è necessario perché Python è costruito su Windows utilizzando Visual Studio.
gaborous

Quindi sembra che nessuno degli IDE di python (pycharm o pydev - eclipse pluggin) debba ancora incorporare la funzionalità di compilazione in un singolo eseguibile nell'IDE stesso. È corretto? :-)
Nelda.techspiress

Se ti interessa mantenere al sicuro il tuo codice sorgente, probabilmente Cython è la scelta migliore perché compila codice C. Quei programmi che usano la tecnica di congelamento generalmente possono essere facilmente decompilati.
Martín De la Fuente

PyInstaller è elencato sopra come supporto di Python 3.7. Questo non è vero secondo la mia esperienza e secondo la descrizione su pyinstaller.org, che afferma "PyInstaller funziona con Python 2.7 e 3.3—3.6".
Tom

1
@ Tom - Dopo aver scavato un po 'di più, sembra che mentre lo stesso pyinstaller supporti Python 3.7, non abbiano ufficialmente rilasciato una nuova versione con supporto 3.7. (Ad esempio, il loro repository GitHub afferma che supportano Python 3.7 e non sembrano avere problemi aperti relativi a 3.7, ma l'ultima versione di pyinstaller su PyPi è di dicembre 2017). Quindi, se hai bisogno del supporto 3.7, potresti provare a compilare + installare pyinstaller direttamente dai sorgenti, o aspettare fino alla prossima versione. (Oppure usa un altro programma, ovviamente)
Michael0x2a

10

pyinstaller è ancora in fase di sviluppo attivo. Puoi vedere le ultime modifiche su GitHub.

Supporta tutte e tre le piattaforme principali:

  • Windows (32 bit e 64 bit)
  • Linux (32 bit e 64 bit)
  • Mac OS X (32 bit e 64 bit)

e supporta le versioni Python 2.6 e 2.7. Non supporta Python 3, ma esiste un ramo sperimentale di Python 3 .

Aggiornare

A partire dalla versione 3.2.1 supporta Python 2.7, 3.3-3.5


2

Uso migliore pip install auto-py-to-exeche fornisce una bella interfaccia utente con tutte le opzioni necessarie per creare un eseguibile.

Dopo l'installazione basta digitare auto-py-to-exeil terminale o il prompt dei comandi.

Auto-py-to-exe


grazie per aver ancora risposto su un thread vecchio come questo. Sembra essere una scoperta incredibile e semplifica davvero il lavoro durante la configurazione, oltre a fornire il comando effettivamente utilizzato: D
ShadowFlame
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.