Come posso convertire un .py in .exe per Python?


126

Sto cercando di convertire un programma Python abbastanza semplice in un eseguibile e non sono riuscito a trovare quello che stavo cercando, quindi ho alcune domande (sto eseguendo Python 3.6):

I metodi per farlo che ho trovato finora sono i seguenti

  1. scaricando una vecchia versione di Python e usando pyinstaller/py2exe
  2. configurare un ambiente virtuale in Python 3.6 che mi consentirà di fare 1.
  3. scaricare un convertitore da Python a C ++ e utilizzarlo.

Ecco cosa ho provato / quali problemi ho incontrato.

  • Ho installato pyinstallerprima del download richiesto prima di esso (pypi-something), quindi non ha funzionato. Dopo aver scaricato il file dei prerequisiti, pyinstallercontinua a non riconoscerlo.
  • Se sto configurando un virtualenv in Python 2.7, devo effettivamente avere installato Python 2.7?
  • allo stesso modo, gli unici convertitori da Python a C ++ che vedo funzionano solo fino a Python 3.5: devo scaricare e utilizzare questa versione se ci provo?

4
Non sono sicuro del motivo per cui questo viene sottovalutato (forse perché i consigli sugli strumenti sono offtopici per SO), ma questa domanda sarà utile per altri in futuro. Simili domande precedenti non sono stati segnati offtopic, ad esempio stackoverflow.com/questions/2136837/...
Chris_Rands

Risposte:


127

Passaggi per convertire .py in .exe in Python 3.6

  1. Installa Python 3.6 .
  2. Installa cx_Freeze, (apri il prompt dei comandi e digita pip install cx_Freeze.
  3. Installa idna, (apri il prompt dei comandi e digita pip install idna.
  4. Scrivi un .pyprogramma denominato myfirstprog.py.
  5. Crea un nuovo file python denominato setup.pynella directory corrente del tuo script.
  6. Nel setup.pyfile, copia il codice sottostante e salvalo.
  7. Con il tasto Maiusc premuto, fai clic con il tasto destro sulla stessa directory, in modo da poter aprire una finestra del prompt dei comandi.
  8. Nel prompt, digita python setup.py build
  9. Se lo script è privo di errori, non ci saranno problemi nella creazione dell'applicazione.
  10. Controlla la cartella appena creata build. Ha un'altra cartella in esso. All'interno di quella cartella puoi trovare la tua applicazione. Eseguirlo. Renditi felice.

Vedi lo script originale nel mio blog .

setup.py:

from cx_Freeze import setup, Executable

base = None    

executables = [Executable("myfirstprog.py", base=base)]

packages = ["idna"]
options = {
    'build_exe': {    
        'packages':packages,
    },    
}

setup(
    name = "<any name>",
    options = options,
    version = "<any number>",
    description = '<any description>',
    executables = executables
)

MODIFICARE:

  • assicurati di myfirstprog.pyinserire il .pynome del tuo file di estensione come creato nel passaggio 4 ;
  • si dovrebbe includere ogni importpacchetto ed in .pyin packageslista (es: packages = ["idna", "os","sys"])
  • any name, any number, any descriptionnel setup.pyfile non dovrebbe rimanere lo stesso, si dovrebbe cambiare di conseguenza (es: name = "<first_ever>", version = "0.11", description = '')
  • i importpacchetti ed devono essere installati prima di iniziare il passaggio 8 .

10
C'è un modo per renderlo eseguibile "autonomo"? Se procedo come mi consigliate nel vostro articolo, finisco con la cartella exe.win.32-3.6. che è pieno di file e directory di supporto (come "collezioni /", "email", ecc.). Pessimo per una semplice stampa ("ciao"). Vorrei creare un unico file eseguibile, che verrà eseguito su un altro computer così com'è, senza la necessità di altri file. C'è un'opzione di compilazione per questo?
FanaticD


2
@FanaticD Python non è la soluzione migliore. Cython (un incubo per lavorare) o Nuitka sarebbero la soluzione migliore. Ma convincere quelli che lavorano è di per sé un risultato.
Tetora

Funzionerebbe in Python 3.5.3? (L'ultima versione stabile su Debian 9 Stretch).
Gerard

Come dovrei importare from sklearn.externals import joblib? come menzionato nella modifica, passaggio 2.
Jack

77

Python 3.6 è supportato da PyInstaller.

Apri una finestra cmd nella cartella Python (apri una finestra di comando e usa cdo tenendo premuto il tasto Maiusc, fai clic con il pulsante destro del mouse su Esplora risorse e scegli "Apri finestra di comando qui"). Quindi entra

pip install pyinstaller

E questo è tutto.

Il modo più semplice per usarlo è entrare nel prompt dei comandi

pyinstaller file_name.py

Per maggiori dettagli su come usarlo, dai un'occhiata a questa domanda .


4
appena testato con python 3.7.0. Molti avvisi però sono stati compilati correttamente e in esecuzione su Windows 10
Ole_S

2
Ho compilato un programma con python 3.5.0 e senza avvisi o errori, e funziona come previsto
Menotdan

Qualcuno sa cosa conta in un Pyinstaller? Una build exe su Windows 10 funzionerà in Windows 8? o la build di Windows 10 a 32 bit funzionerà nei sistemi Windows 10 a 64 bit?
Derik81

27

C'è un progetto open source chiamato auto-py-to-exe su GitHub . In realtà utilizza solo PyInstaller internamente ma poiché ha una semplice GUI che controlla PyInstaller, potrebbe essere una comoda alternativa. Può anche produrre un file autonomo rispetto ad altre soluzioni. Forniscono anche un video che mostra come configurarlo.

GUI:

Auto Py to Exe

Produzione:

Produzione


2
Avresti dovuto dire che richiede MVC ++. errore: è richiesto Microsoft Visual C ++ 14.0.
SKR

3
Non trovo alcun valore in questo dato che è costruito su pyinstaller e se ricevi un errore in pyinstaller lo avrai anche qui!
CV_passionate

9

Non posso dirti cosa è meglio, ma uno strumento che ho usato con successo in passato è stato cx_Freeze . Hanno recentemente aggiornato (il 7 gennaio '17) alla versione 5.0.1 e supporta Python 3.6.

Ecco il pypi https://pypi.python.org/pypi/cx_Freeze

La documentazione mostra che esiste più di un modo per farlo, a seconda delle esigenze. http://cx-freeze.readthedocs.io/en/latest/overview.html

Non l'ho ancora provato, quindi indicherò un post in cui è stato discusso il modo semplice per farlo. Tuttavia, alcune cose potrebbero o non potrebbero essere cambiate.

Come si usa cx_freeze?


11
Vale la pena menzionare, cxFreeze non esegue eseguibili a file singolo.
Eddie Hart

7

Sto usando Nuitka e PyInstaller con il mio pacchetto, PySimpleGUI.

Nuitka Si sono verificati problemi durante la compilazione di tkinter con Nuikta. Uno dei contributori del progetto ha sviluppato uno script che ha risolto il problema.

Se non stai usando tkinter, potrebbe "funzionare" per te. Se stai usando tkinter, dillo e cercherò di pubblicare lo script e le istruzioni.

PyInstaller Sto eseguendo 3.6 e PyInstaller funziona alla grande! Il comando che uso per creare il mio file exe è:

pyinstaller -wF miofile.py

Il -wF creerà un singolo file EXE. Poiché tutti i miei programmi hanno una GUI e non voglio che venga visualizzata la finestra di comando, l'opzione -w nasconderà la finestra di comando.

Questo è quanto di più vicino a ottenere quello che sembra un programma Winforms da eseguire che è stato scritto in Python.

[Aggiornamento 20-lug-2019]

Esiste una soluzione basata su GUI PySimpleGUI che utilizza PyInstaller. Utilizza PySimpleGUI. Si chiama pysimplegui-exemaker e può essere installato tramite pip.

pip install PySimpleGUI-exemaker

Per eseguirlo dopo l'installazione:

python -m pysimplegui-exemaker.pysimplegui-exemaker


5

Ora puoi convertirlo usando PyInstaller. Funziona anche con Python 3.

passi:

  1. Accendi il tuo PC
  2. Apri il prompt dei comandi
  3. Immettere il comando pip install pyinstaller
  4. Una volta installato, utilizzare il comando "cd" per accedere alla directory di lavoro.
  5. Esegui comando pyinstall <filename>

Perché le persone votano per difetto? Sto solo postando questa risposta per il bene di aiutare.
Tejas Joshi

3
perché non funziona su Python 3.6 quale OP ha scritto specificamente che sta usando.
uri

Pyinstaller dovrebbe funzionare ora. In caso contrario, dimmelo nei commenti
Tejas Joshi
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.