Cómo compilar un script de Python en un ejecutable binario


118

Necesito convertir un script de Python a un ejecutable de Windows.

Tengo Python 2.6 instalado para python26 .

He creado un script y lo he guardado C:\pythonscript . Dentro de esta carpeta hay dos archivos

Setup.py y oldlogs.py (este archivo necesita cobertura)

setup.py el código es

from distutils.core import setup
import py2exe

setup(console=['oldlogs.py'])

¿Cómo puedo convertir oldlogs.py a un archivo exe?



Para completar, cx_Freeze es otra herramienta que puede usar para esto (junto con PyInstaller y py2exe, que otras respuestas ya han mencionado).
Thomas K

Respuestas:


63

O use PyInstaller como alternativa a py2exe . Este es un buen punto de partida . PyInstaller también le permite crear ejecutables para linux y mac ...

Así es como se podría usar PyInstaller con bastante facilidad para resolver el problema en cuestión:

pyinstaller oldlogs.py

De la documentación de la herramienta:

PyInstaller analiza myscript.py y:

  • Escribe myscript.spec en la misma carpeta que el script.
  • Crea una compilación de carpeta en la misma carpeta que el script si no existe.
  • Escribe algunos archivos de registro y archivos de trabajo en la carpeta de compilación.
  • Crea una carpeta dist en la misma carpeta que el script si no existe.
  • Escribe la carpeta ejecutable myscript en la carpeta dist.

En la carpeta dist, encontrará la aplicación incluida que distribuye a sus usuarios.


9
cx_Freeze es mejor, es compatible incluso con Python 3.3.
Ashwini Chaudhary

Oye, esto incluso funciona con vino , al menos hasta la versión 3.4 de Python, que es compatible con Windows XP. ¡Realmente grandioso! Creé un ejecutable de Windows con wine , python 3.4 y pip-Win (solo siga las instrucciones de instalación en el sitio web de pyinstaller) en mi máquina Fedora Linux.
erik

3
@AshwiniChaudhary, Ambos parecen ser multiplataforma ... sin embargo, si tuviera que juzgar rápidamente cuál usar solo basado en GitHubestrellas, PyInstallertiene ~ 4000 estrellas, cx_Freezetiene 200 estrellas. Por lo tanto, PyInstallerparece ser más popular y probablemente tenga más casos cubiertos. ¿Por qué crees que cx_Freezees mejor que PyInstaller?
alpha_989

Tenga en cuenta que, en comparación con PyInstaller, "cx_Freeze no admite la creación de un solo archivo exe, donde todas las bibliotecas de su aplicación están integradas en un archivo ejecutable". cx-freeze.readthedocs.io/en/latest/…
Taylor Edmiston

12

Recomiendo PyInstaller , un simple script de Python se puede convertir en un ejecutable con los siguientes comandos:

utils/Makespec.py [--onefile] oldlogs.py

que crea un archivo yourprogram.spec que es una configuración para construir el exe final. El siguiente comando crea el exe a partir del archivo de configuración:

utils/Build.py oldlogs.spec

Puede encontrar más aquí


1
# -*- mode: python -*-

block_cipher = None

a = Analysis(['SCRIPT.py'],
             pathex=[
                 'folder path',
                 'C:\\Windows\\WinSxS\\x86_microsoft-windows-m..namespace-downlevel_31bf3856ad364e35_10.0.17134.1_none_50c6cb8431e7428f',
                 'C:\\Windows\\WinSxS\\x86_microsoft-windows-m..namespace-downlevel_31bf3856ad364e35_10.0.17134.1_none_c4f50889467f081d'
             ],
             binaries=[(''C:\\Users\\chromedriver.exe'')],
             datas=[],
             hiddenimports=[],
             hookspath=[],
             runtime_hooks=[],
             excludes=[],
             win_no_prefer_redirects=False,
             win_private_assemblies=False,
             cipher=block_cipher)
pyz = PYZ(a.pure, a.zipped_data,
             cipher=block_cipher)
exe = EXE(pyz,
          a.scripts,
          a.binaries,
          a.zipfiles,
          a.datas,
          name='NAME OF YOUR EXE',
          debug=False,
          strip=False,
          upx=True,
          runtime_tmpdir=None,
          console=True )
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.