Crea un solo ejecutable a partir de un proyecto de Python

87

Quiero crear un solo ejecutable de mi proyecto Python. Un usuario debería poder descargarlo y ejecutarlo sin necesidad de instalar Python. Si solo estuviera distribuyendo un paquete, podría usar pip, wheel y PyPI para construirlo y distribuirlo, pero esto requiere que el usuario tenga Python y sepa cómo instalar paquetes. ¿Qué puedo usar para crear un ejecutable autónomo a partir de un proyecto de Python?

ShadowFlame
fuente
Todavía estoy escribiendo en 2.x (2.7.2 para ser exactos), pero es posible que vea la necesidad de transferir a 3.x (si los módulos y demás son compatibles) y necesitaría una solución también.
ShadowFlame
Tenga en cuenta que el empaquetado complicará enormemente el diagnóstico de problemas. No solo usted (o pdb) no tiene acceso fácil a los archivos que se están ejecutando, py2exe(no sé sobre los demás) no incluye .pyarchivos, por lo que no verá líneas de origen en los seguimientos de pila.
ivan_pozdeev
Solo como un punto de interés, comencé a usar pyinstaller
ShadowFlame

Respuestas:

114

Éstos son algunos de los más comunes. A menos que se indique explícitamente, todos los proyectos enumerados a continuación se mantienen activamente a partir de mi última edición (enero de 2020).

También he incluido enlaces a sus respectivos sitios web, repositorios y listados de PyPi en caso de que desee comprobar por sí mismo la frecuencia con la que se han actualizado.

Además, a menos que se indique lo contrario, todos los programas enumerados a continuación producirán un exe específicamente para el sistema operativo en el que se está ejecutando. Por ejemplo, ejecutar Pyinstaller en Windows producirá un exe de Windows, pero ejecutar Pyinstaller en Linux producirá un exe de Linux. Si desea producir un archivo ejecutable para múltiples sistemas operativos, tendrá que considerar el uso de máquinas virtuales o utilizar algo como Wine .


Los siguientes programas funcionan de manera similar: combinan Python y su programa, combinándolos de manera efectiva para producir un ejecutable.

  • PyInstaller:

    • Enlaces : Sitio web || Repo || PyPi
    • Admite : Python 2.7 y Python 3.4 - 3.7 en Windows, Mac y Linux.
  • cx_Freeze:

    • Enlaces: Sitio web || Repo || PyPi
    • Admite: Python 2.7 y 3.5 - 3.8 en Windows, Mac y Linux.
  • py2app:

    • Enlaces: Sitio web || Repo || PyPi
    • Soporta: Python 2.7 y 3.3 (?) - 3.7 (?) Solo en Mac.
    • Nota: Desde mi última edición, no he podido determinar de manera concluyente el rango exacto de versiones de Python compatibles con pyapp. La última versión menciona la compatibilidad con Python 3.7.

Nota: las versiones anteriores de esta publicación incluían reseñas para py2exe ( repo ) y bbfreeze ( repo ). Ambos proyectos han sido eliminados de esta lista: han visto poca o ninguna actividad durante varios años y parecen estar completamente sin mantenimiento. Consulte el historial de edición de los escritos antiguos.


Por supuesto, esa no es la única forma de hacer las cosas:

  • pynsist:

    • Enlaces: Sitio web || Repo || PyPi
    • Soporta: ¿ Todas las versiones de Python? Nota: solo creará instaladores de Windows .
    • Otras notas: Pynsist parece admitir la combinación de cualquier versión arbitraria de Python con su aplicación. Sin embargo, la herramienta en sí requiere Python 3.5+ para ejecutarse.

      Pynsist creará un instalador de Windows para su programa que instalará directamente Python en la computadora del usuario en lugar de empaquetarlo con su código y creará accesos directos que enlacen con su script de Python. Aunque este programa solo produce instaladores de Windows, parece que aún puede ejecutar Pynsist en computadoras Mac y Linux.

  • Nuitka:

    • Enlaces: Sitio web || Repo (espejo de Github) || PyPi
    • Soporta: Python 2.6 - 2.7 y Python 3.3 - 3.7 en Windows, Mac y Linux.
    • Otras notas: Nuitka compilará literalmente su código Python y producirá un archivo ejecutable (a diferencia de los otros proyectos, que simplemente incluyen Python) para intentar acelerar su código. Como efecto secundario, también obtendrá un práctico exe que puede distribuir. Tenga en cuenta que debe tener un compilador de C ++ disponible en su sistema.
  • cython:

    • Enlaces: Sitio web || Repo || PyPi
    • Soporta: Python 2.6 - 2.7 y Python 3.2 - 3.8 en Windows, Mac y Linux.
    • Otras notas: Cython es similar a Nuitka en que es un compilador de Python. Sin embargo, en lugar de compilar directamente su código, lo compilará en C. Luego puede tomar ese código C y convertir su código en un exe . Necesitará tener un compilador de C disponible en su sistema.

Mi preferencia personal es usar PyInstaller, ya que fue el más fácil de poner en marcha, fue diseñado para funcionar bien con varias bibliotecas populares como numpy o pygame, y tiene una gran compatibilidad con varios sistemas operativos y versiones de Python.

Sin embargo, también he construido con éxito varios ex usando cx_Freeze sin demasiada dificultad, por lo que también debería considerar probar ese programa.

Todavía no he tenido la oportunidad de probar pynist, Nuitka o Cython ampliamente, pero parecen soluciones bastante interesantes e innovadoras. Si tiene problemas al utilizar el primer grupo de programas, puede que valga la pena probar uno de estos tres. Dado que funcionan de manera fundamentalmente diferente a los programas de estilo Pyinstaller / cx_freeze, podrían tener éxito en esos extraños casos extremos en los que falla el primer grupo.

En particular, creo que pynist es una buena forma de eludir todo el problema de distribuir su código por completo: Mac y Linux ya tienen soporte nativo para Python, y solo instalar Python en Windows podría ser realmente la solución más limpia. (La desventaja es que ahora debe preocuparse por apuntar a múltiples versiones de las bibliotecas de instalación de Python +).

Nuitka y Cython (en mi limitada experiencia) parecen funcionar bastante bien. Una vez más, no los he probado exhaustivamente, por lo que mi principal observación es que parecen tardar mucho más en producir un exe que los programas de estilo "congelado".


Dicho todo esto, convertir su programa Python en un ejecutable no es necesariamente la única forma de distribuir su código. Para obtener más información sobre otras opciones disponibles, consulte los siguientes enlaces:

Michael0x2a
fuente
1
Tenga en cuenta que también debe incluir dentro de su paquete los redistribuibles de Microsoft C ++ (también conocido como msvcrxx.dll, donde xxestá un número de versión) para ejecutar el .exe (o pedir a los usuarios que lo instalen por sí mismos). Esto es necesario porque Python está construido en Windows usando Visual Studio.
gaborous
Por lo tanto, parece que ninguno de los IDE de python (pycharm o pydev - eclipse pluggin) aún tiene que incorporar la funcionalidad de compilar a un ejecutable único en el IDE en sí. ¿Es eso correcto? :-)
Nelda.techspiress
Si le preocupa mantener seguro su código fuente, probablemente Cython sea la mejor opción porque compila código C. Los programas que utilizan la técnica de congelación generalmente se pueden descompilar fácilmente.
Martín De la Fuente
PyInstaller se enumera arriba como compatible con Python 3.7. Eso no es cierto según mi experiencia y según la descripción en pyinstaller.org, que dice "PyInstaller funciona con Python 2.7 y 3.3—3.6".
Tom
1
@Tom: después de investigar un poco más, parece que, si bien el propio pyinstaller es compatible con Python 3.7, no han lanzado oficialmente una nueva versión con soporte 3.7. (Por ejemplo, su repositorio de github indica que son compatibles con Python 3.7 +, parece que no quedan problemas abiertos relacionados con 3.7, pero la última versión de pyinstaller en PyPi es de diciembre de 2017). Entonces, si necesita compatibilidad con 3.7, puede intentar compilar e instalar pyinstaller directamente desde la fuente, o esperar hasta la próxima versión. (O use otro programa, por supuesto)
Michael0x2a
10

pyinstaller todavía está en desarrollo activo. Puedes ver los últimos cambios en GitHub.

Tiene soporte para las tres plataformas principales:

  • Windows (32 bits y 64 bits)
  • Linux (32 bits y 64 bits)
  • Mac OS X (32 bits y 64 bits)

y es compatible con las versiones 2.6 y 2.7 de Python. No es compatible con Python 3, pero hay una rama experimental de Python 3 .

Actualizar

A partir de la versión 3.2.1 es compatible con Python 2.7, 3.3-3.5

terraza
fuente
2

Mejor uso pip install auto-py-to-exeque proporciona una hermosa interfaz de usuario con todas las opciones necesarias para crear un ejecutable.

Después de la instalación, simplemente escriba auto-py-to-exesu terminal o símbolo del sistema.

Auto-py-to-exe

Ratnesh Kushwaha
fuente
gracias por seguir respondiendo en un hilo tan antiguo como este. Parece ser un hallazgo asombroso y realmente simplifica el trabajo al configurarlo, además de proporcionar el comando utilizado real: D
ShadowFlame