ompilando código de Python en un solo exe
He estado tratando de compilar el código de Python en un solo exe, y no pude hacerlo correctamente.
He intentado con pyinstaller, y este es el archivo .spec:
# -*- mode: python -*-
a = Analysis([os.path.join(HOMEPATH,'support\\_mountzlib.py'), os.path.join(HOMEPATH,'support\\useUnicode.py'), 'programs\\toolbox.py'],
pathex=['C:\\Users\\Ronaldo\\Desktop\\Python\\pyinstaller'])
pyz = PYZ(a.pure)
exe = EXE( pyz,
a.scripts,
a.binaries,
a.zipfiles,
a.datas,
name=os.path.join('dist', 'program.exe'),
debug=False,
strip=False,
upx=True,
console=False )
Pyinstaller compiló bien, creó un único archivo exe que funcionó, pero aparentemente otros usuarios que no tenían instalada la misma versión de python (2.7.2) no pudieron ejecutarlo. No da ningún error, simplemente no se inicia. Lo probé enviándolo a algunos amigos y también probé en una máquina virtual.
Intenté py2exe. Cuando se trata de compilar (con todas las bibliotecas al lado y el resto de archivos) funciona bien. Intenté compilarlo en un solo archivo, pero el archivo exe compilado me dio el error "toolbox.exe ha dejado de funcionar". Aquí está el informe de error, por si acaso, puede ser útil:
Problem signature:
Problem Event Name: APPCRASH
Application Name: toolbox.exe
Application Version: 0.0.0.0
Application Timestamp: 49180193
Fault Module Name: StackHash_0a9e
Fault Module Version: 0.0.0.0
Fault Module Timestamp: 00000000
Exception Code: c0000005
Exception Offset: 01b61fcb
OS Version: 6.1.7601.2.1.0.256.1
Locale ID: 1033
Additional Information 1: 0a9e
Additional Information 2: 0a9e372d3b4ad19135b953a78882e789
Additional Information 3: 0a9e
Additional Information 4: 0a9e372d3b4ad19135b953a78882e789
El archivo setup.py es:
from distutils.core import setup
import py2exe, sys, os
sys.argv.append('py2exe')
setup(
options = {'py2exe': {'bundle_files': 1}},
windows = [{'script': "toolbox.py"}],
zipfile = None,
) single.py file:
Y aquí está el single.py
import os, sys, ctypes
ctypes.windll.user32.MessageBoxA(0,
"curdir: %s\nexedir: %s\nsys.winver: %s" % (
os.path.abspath(os.curdir),
os.path.abspath(os.path.dirname(sys.argv[0])),
sys.winver,
), "%s - Message" % os.path.basename(sys.executable), 0x30
)
El programa que escribí usa módulos tkinter, sys, random y win32clipboard (pywin). ¿Qué estoy haciendo mal? ¿Hay algún otro compilador mejor?
Update: por consejo de Joël, compilé con depuración y con el modo de consola. Todavía no funcionó para los usuarios que no tienen Python 2.7. Este es el mensaje de error:
C:\Users\XXXXX\Desktop>program.exe
Found embedded PKG: C:\Users\XXXXX\Desktop\program.exe
Extracting binaries
Setting up to run child
Setting magic environment var
Creating child process
Waiting for child process to finish...
Found embedded PKG: C:\Users\XXXXX\Desktop\program.exe
workpath: C:/Users/XXXXX/AppData/Local/Temp/_MEI14042/
manifestpath: C:/Users/XXXXX/AppData/Local/Temp/_MEI14042/program.exe.manifest
Activation context created
Activation context activated
C:\Users\XXXXX\AppData\Local\Temp\_MEI14042\python27.dll
Manipulating evironment
PYTHONPATH=C:/Users/XXXXX/AppData/Local/Temp/_MEI14042;C:/Users/XXXXX/Desktop
importing modules from CArchive
extracted iu
extracted struct
extracted archive
Installing import hooks
outPYZ1.pyz
Realmente espero que esto sirva de ayuda para la posible respuesta.