Actualmente estoy tratando de hacer un ejecutable usando py2exe. Yo uso Python 3.6. El script que estoy usando se importa openpyxl
y pptx
funciona bien cuando uso Pycharm o ejecuto el script usando la ventana de comandos.
La salida produce el error:
IndexError: tuple index out of range
A continuación puede encontrar la cmd
salida:
C:\Python36>python setup.py py2exe
running py2exe
Traceback (most recent call last):
File "setup.py", line 4, in <module>
setup(console=['Storybookmaker.py'])
File "C:\Python36\lib\distutils\core.py", line 148, in setup
dist.run_commands()
File "C:\Python36\lib\distutils\dist.py", line 955, in run_commands
self.run_command(cmd)
File "C:\Python36\lib\distutils\dist.py", line 974, in run_command
cmd_obj.run()
File "C:\Python36\lib\site-packages\py2exe\distutils_buildexe.py", line 188, in run
self._run()
File "C:\Python36\lib\site-packages\py2exe\distutils_buildexe.py", line 267, in _run
builder.analyze()
File "C:\Python36\lib\site-packages\py2exe\runtime.py", line 160, in analyze
self.mf.import_hook(modname)
File "C:\Python36\lib\site-packages\py2exe\mf3.py", line 120, in import_hook
module = self._gcd_import(name)
File "C:\Python36\lib\site-packages\py2exe\mf3.py", line 274, in _gcd_import
return self._find_and_load(name)
File "C:\Python36\lib\site-packages\py2exe\mf3.py", line 357, in _find_and_load
self._scan_code(module.__code__, module)
File "C:\Python36\lib\site-packages\py2exe\mf3.py", line 388, in _scan_code
for what, args in self._scan_opcodes(code):
File "C:\Python36\lib\site-packages\py2exe\mf3.py", line 417, in _scan_opcodes
yield "store", (names[oparg],)
IndexError: tuple index out of range
C:\Python36>
¿Qué causa el IndexError
?
Editar: aquí está el setup.py
archivo:
from distutils.core import setup
import py2exe
setup(console=['Storybookmaker.py'])
setup.py
archivo? porque el problema está ahí y no en elpy2exe
que funciona bien.Storybookmaker.py
archivo en el mismo directorio quesetup.py
? puede intentarsetup(console=[os.path.join(os.path.dirname(__file__,'Storybookmaker.py')])
asegurarse de localizar el archivo.Respuestas:
Python 3.6 rediseñó completamente el código de bytes para CPython (ya no es un código de "bytes", es un código de palabra, donde todos los códigos de operación tienen dos bytes de ancho en lugar de 1-3).
La falla que está viendo ocurre en el
py2exe
código de análisis de código de operación, que, dada la versión publicada más reciente depy2exe
solo soporte de reclamos para 3.3 y 3.4, posiblemente no podría tener conocimiento o soporte para los nuevos códigos de operación de código de palabra; ni siquiera habían sido concebidos en el momento de lapy2exe
última actualización. El código de bytes a menudo cambia en pequeñas formas de una versión a otra que podrían romper incluso con Python 3.5 (dado que solo se afirma explícitamente la compatibilidad con 3.3 y 3.4), pero se garantiza al 100% que la 3.6 fallará.Actualización: en este punto (noviembre de 2019), han pasado más de cinco años desde la última
py2exe
versión , y para principios de 2020 (cuando el soporte de Python 2 caduque por completo), no se ejecutará en ninguna versión compatible de Python (3.4 ya está disponible de apoyo). Creo que es seguro decir que el proyecto está abandonado; buscar otras opciones, por ejemplo,cx_Freeze
oPyInstaller
.fuente
cx_freeze
. Es compatible con python3.6 pero no puede crear un solo archivo exe. El problemaPyinstaller
es que no puede crear un archivo exe x86 a través de un sistemaPython 3.3 and later are supported
. Claro, en retrospectiva, probablemente sea un poco ingenuo esperar que algo tan viejo funcione, pero cuando eres un principiante en este espacio, hay suficientes confusiones para principiantes con las que lidiar.La solución que utilicé fue usar PyInstaller como alternativa porque Py2Exe detuvo el desarrollo en python 3.4 y no funcionará con versiones más nuevas.
Esto creará un subdirectorio llamado dist con yourprogram.exe contenido en una carpeta llamada yourprogram.
Utilice -F para colocar todos los archivos generados en un archivo ejecutable.
Puede usar -w para si desea eliminar la pantalla de la consola para las GUI.
Poniéndolo todo junto.
Lea más sobre PyInstaller aquí .
Python versión 3.7.3.
fuente
Tuve el mismo problema, como solución temporal utilicé cx_freeze. Mi aplicación está basada en wxPython, windows 10, python 3.6, cx_freeze 5.5.1
Este es el archivo de configuración que utilicé y obtuve el archivo msi en la carpeta dist.
luego
python setup.py bdist_msi
fuente
from PyQt5 import QtGui
¿cómo lo ingresopackages
? ¿SoloPyQt5
o soloQtGui
o ambos?PyQt5
.Tuve éxito con un programa Python 3.6 usando la bifurcación de py2exe en https://github.com/albertosottile/py2exe .
fuente
Probé una solución alternativa, instalando Python 3.4.3:
1) ingrese en su carpeta de script
2) desactiva cualquier antivirus que tengas (cosa rara, sé por otra pregunta SO xD)
3) llamar al intérprete de Python 3.4.3 por su ruta absoluta, en mi caso, lo he instalado en:
4) ejecutar el comando
fuente
You are using pip version 8.1.1, however version 9.0.1 is available. You should consider upgrading via the 'python -m pip install --upgrade pip' command.
Cuando intento actualizar pip, aparece el mismo error.1) Try with Python 3.4.3, this one i have already tested.
2) Identify which python you have, when you type at console 'python', what version says?
puede ser que tenga 2 python y necesite especificar cuál desea actualizar.