Python-IndexError: l'indice de tuple est hors de portée lorsqu'on utilise py2exe
j'essaie actuellement de créer un exécutable en utilisant py2exe. J'utilise Python 3.6. Le script que j'utilise importe openpyxl et pptx et fonctionne bien lorsque j'utilise Pycharm ou exécute le script en utilisant la fenêtre de commande. La sortie produit de l'erreur:
IndexError: tuple index out of range
vous trouverez ci-dessous la sortie cmd:
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:Python36libdistutilscore.py", line 148, in setup
dist.run_commands()
File "C:Python36libdistutilsdist.py", line 955, in run_commands
self.run_command(cmd)
File "C:Python36libdistutilsdist.py", line 974, in run_command
cmd_obj.run()
File "C:Python36libsite-packagespy2exedistutils_buildexe.py", line 188, in run
self._run()
File "C:Python36libsite-packagespy2exedistutils_buildexe.py", line 267, in _run
builder.analyze()
File "C:Python36libsite-packagespy2exeruntime.py", line 160, in analyze
self.mf.import_hook(modname)
File "C:Python36libsite-packagespy2exemf3.py", line 120, in import_hook
module = self._gcd_import(name)
File "C:Python36libsite-packagespy2exemf3.py", line 274, in _gcd_import
return self._find_and_load(name)
File "C:Python36libsite-packagespy2exemf3.py", line 357, in _find_and_load
self._scan_code(module.__code__, module)
File "C:Python36libsite-packagespy2exemf3.py", line 388, in _scan_code
for what, args in self._scan_opcodes(code):
File "C:Python36libsite-packagespy2exemf3.py", line 417, in _scan_opcodes
yield "store", (names[oparg],)
IndexError: tuple index out of range
C:Python36>
Quelle est la cause de L'IndexError?
Edit: voici le setup.py
le fichier
from distutils.core import setup
import py2exe
setup(console=['Storybookmaker.py'])
3 réponses
Python 3.6 complètement repensé le bytecode pour Disponible (ce n'est plus du tout un code" byte", c'est un mot-code, où tous les opcodes ont deux octets de large au lieu de 1-3).
L'échec que vous voyez se produit dans py2exe
code de parsing opcode, qui, étant donné la version postée la plus récente de py2exe
ne réclame que le support pour 3.3 et 3.4, ne pouvait pas avoir connaissance, ou le support pour, le nouveau wordcode opcodes; ils n'avaient même pas été conçus à l'époque py2exe
dernière mise à jour. Le bytecode change souvent de petites façons d'une version à l'autre, ce qui pourrait casser Python 3.5 (étant donné que seulement 3.3 et 3.4 sont explicitement revendiqués), mais 3.6 est 100% garanti d'échouer.
j'ai eu le même problème, comme solution j'ai utilisé cx_freeze. Mon application est basée sur wxPython, windows 10, python 3.6, cx_freeze 5.5.1
C'est le fichier de configuration que j'ai utilisé et j'ai obtenu le fichier msi sur dist dossier.
#setup.py
import sys, os
from cx_Freeze import setup, Executable
__version__ = "1.1.0"
include_files = ['logging.ini', 'config.ini', 'running.png']
excludes = ["tkinter"]
packages = ["os", "idna", "requests","json","base64","pyodbc"]
setup(
name = "appname",
description='App Description',
version=__version__,
options = {"build_exe": {
'packages': packages,
'include_files': include_files,
'excludes': excludes,
'include_msvcr': True,
}},
executables = [Executable("b2b_conn.py",base="Win32GUI")]
)`
python setup.py bdist_msi
Dennis, quelques heures plus tard que toi, je teste la même chose sans chance, J'ai installé Python 3.6 et pour le moment, ça ne marche pas.
j'essaie un tour de piste, J'ai installé Python 3.4.3, et j'essaie ceci:
C:\socket> c:\Python34\python.exe setup.py py2exe
1) entrez dans votre dossier de script 2) Désactiver tout antivirus que vous avez (chose étrange, savoir par une autre question SO xD)
2) appeler le python 3.4.3 interprète par son chemin absolu, dans mon cas, j'ai installé dans:
C:\Python34
3) Exécutez la commande
c:\Python34\python.exe setup.py py2exe
j'espère que vous aider comme moi