Mi aplicación se ve así:
main.py ventanas / __init__.py mainwindow.py ... modelo/ __init__.py orders.py ... recursos / image1.png logo.jpg ...
El programa se inicia con main.py. ¿Existe una buena manera de crear una aplicación 'final' a partir de ella? Estoy pensando en algo como py2exe / py2app, pero sin copiar el intérprete / módulos de Python en la aplicación donde uno solo tiene un ejecutable.
Eché un vistazo a distutils, pero parece que instala un programa en el directorio de Python, lo que no es habitual en plataformas que no son Linux.
Por el momento, solo copio toda la carpeta de origen en la máquina de destino y creo un alias main.pyw
en Windows. Algunos inconvenientes:
- El icono es el icono de Python predeterminado.
- Tengo que crear el alias manualmente.
- En mi directorio de origen hay muchos archivos adicionales como la carpeta de control de origen.
- Tengo que cambiar el nombre
main.py
amain.pyw
manualmente. - Sería bueno si solo los archivos `.pyo * estuvieran en la máquina de destino. No hay una razón real para ello, simplemente no me gusta tener archivos innecesarios.
¿Cómo se crea una buena distribución automatizada?
- ¿para ventanas? (Esa es la única plataforma que tengo que admitir en este momento).
- ¿para Mac?
- para linux?
Respuestas:
La forma normal de distribuir aplicaciones Python es con distutils . Está hecho tanto para distribuir módulos de Python de tipo biblioteca como para aplicaciones de Python, aunque no sé cómo funciona en Windows. En Windows, tendría que instalar Python por separado si usa distutils, en cualquier caso.
Probablemente le recomiendo que lo distribuya con disutils para Linux y Py2exe o algo similar para Windows. Para OS X, no lo sé. Si se trata de una aplicación de usuario final, probablemente desee un tipo de imagen de disco, no sé cómo hacerlo. Pero lea esta publicación para obtener más información sobre la experiencia del usuario. Para una aplicación hecha para programadores, probablemente también esté de acuerdo con una instalación de tipo distutils en OS X.
fuente
dist
y copiar todos los archivos relevantes en él?Recomiendo encarecidamente Pyinstaller , que es compatible con todas las plataformas principales sin problemas. Al igual que py2exe y py2app, produce un ejecutable estándar en Windows y un paquete de aplicaciones en OS X, pero también tiene la ventaja de hacer un trabajo fantástico al resolver automáticamente las dependencias comunes e incluirlas sin ajustes de configuración adicionales.
También tenga en cuenta que si está implementando Python 2.6 en Windows, debe aplicar este parche al tronco de Pyinstaller.
Indicó que no necesita un instalador, pero Inno Setup es una opción fácil de usar y rápida de configurar para la plataforma Windows.
fuente
Hello world
programa simple ocuparía 500 MB de espacio y 3-5 segundos de tiempo de inicialización.Fredrik Lundh
squeeze.py
puede crear un solo archivo que no contiene el intérprete de Python, sino que contiene un código de bytes. Con los argumentos correctos, puede incluir otros archivos, módulos, etc. en el archivo de resultados. Lo usé con éxito en un proyecto. ¡El programa resultante se ejecutó en OS X, Linux y Windows sin ningún problema!PD : Cada máquina debe tener un intérprete de Python que sea compatible con el código de bytes generado por squeeze.py. Puede generar diferentes versiones de bytecode para diferentes versiones de Python, si es necesario (simplemente ejecute squeeze.py con la versión correcta de Python).
fuente
Creo que también vale la pena mencionar PEX (considerando más la atención que recibió esta pregunta y menos la pregunta en sí). Según su propia descripción :
Me encontré con él cuando leí una descripción general del empaquetado para Python . Publicaron esta bonita foto allí:
Para resumir: si puede permitirse confiar en que Python se instale en la máquina de destino, utilice PEX para producir un "ejecutable" autónomo que probablemente tendrá un tamaño de archivo más pequeño que un ejecutable producido por PyInstaller, por ejemplo.
fuente
Puede que me equivoque, pero ¿IronPython no tiene un compilador integrado para Windows?
http://www.ironpython.net
[EDITAR]
Pruebe Cx_Freeze, el mejor compilador .py a .exe (más algunos .dlls) que he usado.
http://cx-freeze.sourceforge.net/
fuente
Si está distribuyendo en Windows, use un instalador para instalar todos los archivos relevantes / interpeter lo que sea necesario. Distribuya un archivo setup.exe. Esa es la mejor forma en Windows. De lo contrario, los usuarios se quejarán.
fuente
La forma multiplataforma más conveniente * de distribuir aplicaciones de escritorio de Python es confiar en el administrador de paquetes conda multiplataforma. Hay varias herramientas que lo utilizan:
* Lo más conveniente para el desarrollador. Suficientemente conveniente para el usuario final.
fuente