¿Cómo puedo convertir un .py a .exe para Python?

126

Estoy tratando de convertir un programa Python bastante simple en un ejecutable y no pude encontrar lo que estaba buscando, así que tengo algunas preguntas (estoy ejecutando Python 3.6):

Los métodos para hacer esto que he encontrado hasta ahora son los siguientes

  1. descargar una versión antigua de Python y usar pyinstaller/py2exe
  2. configurar un entorno virtual en Python 3.6 que me permitirá hacer 1.
  3. descargar un convertidor de Python a C ++ y usarlo.

Esto es lo que he intentado / los problemas con los que me he encontrado.

  • Lo instalé pyinstallerantes de la descarga requerida antes (pypi-something) por lo que no funcionó. Después de descargar el archivo de requisitos previos, pyinstallertodavía no lo reconoce.
  • Si estoy configurando un virtualenv en Python 2.7, ¿realmente necesito tener Python 2.7 instalado?
  • De manera similar, los únicos convertidores de Python a C ++ que veo funcionan solo hasta Python 3.5.¿Necesito descargar y usar esta versión si intento esto?
usuario7396807
fuente
4
No estoy seguro de por qué se rechaza esto (tal vez porque las recomendaciones de herramientas son ajenas al tema de SO), pero esta pregunta será útil para otros en el futuro. Preguntas anteriores similares no se han marcado como fuera de tema, por ejemplo, stackoverflow.com/questions/2136837/…
Chris_Rands

Respuestas:

127

Pasos para convertir .py a .exe en Python 3.6

  1. Instale Python 3.6 .
  2. Instale cx_Freeze, (abra su símbolo del sistema y escriba pip install cx_Freeze.
  3. Instale idna, (abra su símbolo del sistema y escriba pip install idna.
  4. Escribe un .pyprograma llamado myfirstprog.py.
  5. Cree un nuevo archivo de Python nombrado setup.pyen el directorio actual de su secuencia de comandos.
  6. En el setup.pyarchivo, copie el código siguiente y guárdelo.
  7. Con la tecla Mayús presionada, haga clic con el botón derecho en el mismo directorio, para que pueda abrir una ventana de símbolo del sistema.
  8. En el mensaje, escriba python setup.py build
  9. Si su secuencia de comandos está libre de errores, entonces no habrá problemas para crear la aplicación.
  10. Verifique la carpeta recién creada build. Tiene otra carpeta dentro. Dentro de esa carpeta puede encontrar su aplicación. Ejecutarlo. Hazte feliz.

Vea el guión original en mi 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
)

EDITAR:

  • asegúrese de que en lugar de myfirstprog.pyponer su .pynombre de archivo de extensión como se creó en el paso 4 ;
  • que debe incluir cada importpaquete en su ed .pyen packagesla lista (por ejemplo: packages = ["idna", "os","sys"])
  • any name, any number, any descriptionen el setup.pyarchivo no debe seguir siendo el mismo, se debe cambiar en consecuencia (por ejemplo: name = "<first_ever>", version = "0.11", description = '')
  • los importpaquetes ed deben instalarse antes de iniciar el paso 8 .
María Irudaya Regilan J
fuente
10
¿Hay alguna forma de hacerlo ejecutable 'independiente'? Si procedo como me aconseja en su artículo, termino con la carpeta exe.win.32-3.6. que está lleno de archivos y directorios de apoyo (como 'colecciones /', 'correo electrónico', etc.). Mucho para una simple impresión ('hola'). Me gustaría crear un archivo ejecutable único, que se ejecutará en otra computadora tal cual, sin la necesidad de otros archivos. ¿Existe una opción de construcción para eso?
FanaticD
2
@FanaticD Python no es tu mejor opción. Cython (una pesadilla para ponerse a trabajar) o Nuitka serían su mejor opción. Pero hacer que estos trabajen es un logro en sí mismo.
Tetora
¿Funcionaría esto en Python 3.5.3? (La última versión estable en Debian 9 Stretch).
Gerard
¿Cómo importaría from sklearn.externals import joblib? como se menciona en la edición, paso 2.
Jack
77

Python 3.6 es compatible con PyInstaller.

Abra una ventana de cmd en su carpeta de Python (abra una ventana de comando y use cdo mientras mantiene presionada la tecla Mayús, haga clic con el botón derecho en el Explorador de Windows y elija 'Abrir ventana de comando aquí'). Entonces solo entra

pip install pyinstaller

Y eso es.

La forma más sencilla de usarlo es ingresando en el símbolo del sistema

pyinstaller file_name.py

Para obtener más detalles sobre cómo usarlo, eche un vistazo a esta pregunta .

Rodrigo Nascimento
fuente
4
recién probado con python 3.7.0. Sin embargo, hay muchas advertencias, pero compiladas con éxito y ejecutándose en Windows 10
Ole_S
2
Compilé un programa con python 3.5.0 y sin advertencias ni errores, y se ejecuta como se esperaba
Menotdan
¿Alguien sabe lo que importa en un Pyinstaller? ¿Funcionará una compilación exe en Windows 10 en Windows 8? ¿O la compilación de Windows 10 de 32 bits funcionará en sistemas Windows 10 de 64 bits?
Derik81
27

Hay un proyecto de código abierto llamado auto-py-to-exe en GitHub . En realidad, también usa PyInstaller internamente, pero dado que tiene una GUI simple que controla PyInstaller, puede ser una alternativa cómoda. También puede generar un archivo independiente en contraste con otras soluciones. También proporcionan un video que muestra cómo configurarlo.

GUI:

Auto Py a Exe

Salida:

Salida

Charla
fuente
2
Deberías haber mencionado que requiere MVC ++. error: se requiere Microsoft Visual C ++ 14.0.
SKR
3
No encuentro ningún valor en esto ya que está construido en pyinstaller y si obtiene un error en pyinstaller, ¡también lo tendrá aquí!
CV_passionate
9

No puedo decirles qué es lo mejor, pero una herramienta que he usado con éxito en el pasado fue cx_Freeze . Recientemente se actualizaron (el 7 de enero de 2017) a la versión 5.0.1 y es compatible con Python 3.6.

Aquí está el pypi https://pypi.python.org/pypi/cx_Freeze

La documentación muestra que hay más de una forma de hacerlo, según sus necesidades. http://cx-freeze.readthedocs.io/en/latest/overview.html

Todavía no lo he probado, así que voy a señalar una publicación donde se discutió la forma simple de hacerlo. Sin embargo, algunas cosas pueden haber cambiado o no.

¿Cómo uso cx_freeze?

Gerschel
fuente
11
Vale la pena mencionar que cxFreeze no hace ejecutables de un solo archivo.
Eddie Hart
7

He estado usando Nuitka y PyInstaller con mi paquete, PySimpleGUI.

Nuitka Hubo problemas para que tkinter se compilara con Nuikta. Uno de los colaboradores del proyecto desarrolló un guión que solucionó el problema.

Si no está utilizando tkinter, puede que "simplemente funcione" para usted. Si está utilizando tkinter, dígalo e intentaré publicar el guión y las instrucciones.

PyInstaller ¡Estoy ejecutando 3.6 y PyInstaller está funcionando muy bien! El comando que utilizo para crear mi archivo exe es:

pyinstaller -wF myfile.py

-WF creará un único archivo EXE. Debido a que todos mis programas tienen una GUI y no quiero que se muestre la ventana de comandos, la opción -w ocultará la ventana de comandos.

Esto es lo más cercano a conseguir lo que parece un programa Winforms para ejecutar que fue escrito en Python.

[Actualización 20-Jul-2019]

Existe una solución basada en PySimpleGUI GUI que usa PyInstaller. Utiliza PySimpleGUI. Se llama pysimplegui-exemaker y se puede instalar pip.

pip install PySimpleGUI-exemaker

Para ejecutarlo después de la instalación:

python -m pysimplegui-exemaker.pysimplegui-exemaker

MikeyB
fuente
5

Ahora puedes convertirlo usando PyInstaller. Trabajo incluso con Python 3.

Pasos:

  1. Enciende tu PC
  2. Abrir símbolo del sistema
  3. Ingrese el comando pip install pyinstaller
  4. Cuando esté instalado, use el comando 'cd' para ir al directorio de trabajo.
  5. Ejecutar comando pyinstall <filename>
Tejas Joshi
fuente
¿Por qué la gente está rechazando esto? Solo estoy publicando esta respuesta por el simple hecho de ayudar.
Tejas Joshi
3
porque no funciona en Python 3.6, que OP escribió específicamente que está usando.
uri
Pyinstaller debería funcionar ahora. Si no es así, dímelo en los comentarios
Tejas Joshi