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'])
49
demandé sur ShadowRanger 2017-01-11 00:32:55

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.

42
répondu ShadowRanger 2017-02-19 15:17:48

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

6
répondu Ezequiel Alanís 2018-01-15 23:07:22

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

5
répondu Ricardo Martínez 2017-01-11 02:46:38