Estoy creando una aplicación Python y no quiero obligar a mis clientes a instalar Python y módulos.
Entonces, ¿hay alguna manera de compilar un script de Python para que sea un ejecutable independiente?
Estoy creando una aplicación Python y no quiero obligar a mis clientes a instalar Python y módulos.
Entonces, ¿hay alguna manera de compilar un script de Python para que sea un ejecutable independiente?
Respuestas:
Puede utilizar py2exe como ya se ha respondido y el uso Cython para convertir sus claves .py
archivos en .pyc
, archivos de C compilado, al igual que .dll
en Windows y .so
en Linux, mucho más difícil de revertir lo común .pyo
y .pyc
archivos (y también la ganancia en el rendimiento!)
Puede usar PyInstaller para empaquetar programas de Python como ejecutables independientes. Funciona en Windows, Linux y Mac.
Inicio rápido de PyInstaller
Instale PyInstaller desde PyPI:
pip install pyinstaller
Vaya al directorio de su programa y ejecute:
pyinstaller yourprogram.py
Esto generará el paquete en un subdirectorio llamado
dist
.Para un tutorial más detallado, consulte el manual .
Es posible que desee investigar Nuitka . Toma el código fuente de Python y lo convierte en llamadas de API C ++. Luego se compila en un binario ejecutable (ELF en Linux). Ha existido durante algunos años y es compatible con una amplia gama de versiones de Python.
Probablemente también obtendrá una mejora en el rendimiento si lo usa. Recomendado.
Me gustaría recopilar información útil sobre la creación de archivos independientes en Windows con Python 2.7.
He usado py2exe y funciona, pero tuve algunos problemas.
Ha mostrado algunos problemas para crear archivos individuales en Windows 64 bits: el uso de bundle_files = 1 con py2exe no funciona ;
Es necesario crear un archivo setup.py para que funcione. http://www.py2exe.org/index.cgi/Tutorial#Step2 ;
He tenido problemas con las dependencias que tiene que resolver importando paquetes en el archivo de instalación;
No pude hacerlo funcionar junto con PyQt ..
Esta última razón me hizo probar PyInstaller http://www.pyinstaller.org/ .
En mi opinión, es mucho mejor porque:
Sugiero crear un archivo .bat con las siguientes líneas, por ejemplo (pyinstaller.exe debe estar en la ruta de Windows):
pyinstaller.exe --onefile MyCode.py
Puede crear un solo archivo, entre otras opciones ( https://pyinstaller.readthedocs.io/en/stable/usage.html#options ).
Solo tuve un problema al usar PyInstaller y el paquete de multiprocesamiento que se resolvió mediante esta receta: https://github.com/pyinstaller/pyinstaller/wiki/Recipe-Multiprocessing .
Entonces, creo que, al menos para Python 2.7, una opción mejor y más simple es PyInstaller.
--onefile
indicador no lo ayudará a hacerlo portátil en Windows, porque el ejecutable aún desea vincularse con la api-ms-win-crt-runtime-l1-1-0.dll
biblioteca (u otras) que deben instalarse a través del vcredist
paquete. Por lo tanto, todavía existe una dependencia y debe instalarse antes de la ejecución.
Sí, es posible compilar scripts de Python en un ejecutable independiente.
PyInstaller se puede utilizar para convertir programas de Python en ejecutables independientes, en Windows , Linux , Mac OS X , FreeBSD , Solaris y AIX . Es uno de los convertidores recomendados.
py2exe convierte los scripts de Python en solo ejecutables en la plataforma Windows.
Cython es un compilador estático tanto para el lenguaje de programación Python como para el lenguaje de programación extendido Cython.
Y una tercera opción es cx_Freeze
, que es multiplataforma.
cx_Freeze
lanzamientos listados en pypi desde finales de 2017. ¿Se abandonó este proyecto?
te puede gustar py2exe . también encontrarás información para hacerlo en Linux
Use py2exe ... use los archivos de configuración a continuación:
from distutils.core import setup
import py2exe
from distutils.filelist import findall
import matplotlib
setup(
console=['PlotMemInfo.py'],
options={
'py2exe': {
'packages' : ['matplotlib'],
'dll_excludes': ['libgdk-win32-2.0-0.dll',
'libgobject-2.0-0.dll',
'libgdk_pixbuf-2.0-0.dll']
}
},
data_files = matplotlib.get_py2exe_datafiles()
)
Me gusta pyinstaller , especialmente la variante "en ventana":
pyinstaller --onefile --windowed myscript.py
Creará un solo archivo * .exe en una carpeta dist /.
También recomiendo pyinstaller
para una mejor compatibilidad con versiones anteriores, como python 2.3 - 2.7.
para py2exe , debes tener python 2.6
Para los scripts Python 3.2, la única opción es Cxfreeze. Construirlo a partir de fuentes de lo contrario no funcionará.
Para python 2.x, sugiero pyinstaller, ya que puede empaquetar un programa de python en un único ejecutable, a diferencia de CxFreeze, que también genera bibliotecas.
py2exe creará el archivo exe que desea, pero debe tener la misma versión de MSVCR90.dll en la máquina en la que va a usar su nuevo exe. Consulte http://www.py2exe.org/index.cgi/Tutorial para obtener más información.
Puede encontrar la lista de utilidades de distribución enumeradas en @ https://wiki.python.org/moin/DistributionUtilities .
Utilizo bbfreeze y ha funcionado muy bien (aunque todavía tengo soporte para python 3).
.so
archivos, o copiará los archivos .egg directamente y todos estarán presentes en un solo directorio (o como un solo archivo). No se requiere instalación.
No es exactamente un paquete del código de Python, pero ahora también está malhumorado de Google, que transpila el código para ir. No es compatible con la API de Python C, por lo que puede no funcionar para todos los proyectos.
Usando pyinstaller, encontré un mejor método usando el acceso directo al .exe en lugar de hacer --onefile
. De todos modos, es probable que haya algunos archivos de datos y si está ejecutando una aplicación basada en el sitio, su programa también depende de los archivos html, js, css. No tiene sentido mover todos estos archivos a algún lugar ... en cambio, ¿qué pasa si movemos la ruta de trabajo hacia arriba?
Haga un acceso directo al exe, muévalo en la parte superior y establezca el destino y las rutas de inicio como se especifica, para que las rutas relativas vayan a dist \ folder:
Target: %windir%\system32\cmd.exe /c start dist\web_wrapper\web_wrapper.exe
Start in: "%windir%\system32\cmd.exe /c start dist\web_wrapper\"
puede cambiar el nombre del acceso directo a cualquier cosa, así que cambie el nombre a "GTFS-Manager"
ahora cuando doblo -Haga clic en el acceso directo, ¡es como si hubiera ejecutado el archivo en Python! Encontré este enfoque mejor que el --onefile
siguiente:
Ah, recuerde eliminar la carpeta de compilación después de compilar, ahorrará en tamaño.
Use Cython para convertir a c, compilar y vincular con gcc. Otro podría ser, hacer las funciones centrales en c (las que desea dificultar la reversión), compilarlas y usar python boost para importar el código compilado (además obtendrá una ejecución de código mucho más rápida). luego use cualquier herramienta mencionada para distribuir.
Me dicen que PyRun, https://www.egenix.com/products/python/PyRun/ , también es una opción.