110 votes

IndexError : l'index du tuple est hors de portée lors de l'utilisation de py2exe

J'essaie actuellement de créer un exécutable à l'aide de py2exe. J'utilise Python 3.6. Le script que j'utilise importe openpyxl y pptx et fonctionne bien lorsque j'utilise Pycharm ou que j'exécute le script en utilisant la fenêtre de commande.

La sortie produit l'erreur :

IndexError: tuple index out of range

Vous trouverez ci-dessous les cmd sortie :

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'est-ce qui cause le IndexError ?

Edit : voici le setup.py fichier :

from distutils.core import setup
import py2exe

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

2 votes

Pouvez-vous nous montrer votre setup.py car le problème se trouve à cet endroit et non dans le fichier py2exe qui fonctionne bien.

1 votes

Bonjour Jean-Francois, j'ai ajouté le fichier dans le post original. Merci d'avance !

1 votes

Est le Storybookmaker.py dans le même répertoire que setup.py ? vous pouvez essayer setup(console=[os.path.join(os.path.dirname(__file__,'Storyb‌​ookmaker.py')]) pour être sûr de localiser le fichier.

0voto

jakethefinn Points 46

Au moment de la rédaction du présent document, la dernière version de python est la 3.8. y py2exe fonctionne jusqu'à python-3.4. pyinstaller fonctionne jusqu'à python-3.7. Utilisation de pyinstaller Les options de la ligne de commande (comme --un fichier pour créer un exécutable autonome) est plus facile que de coder des options dans le fichier py2exe D'autant plus que les fichiers setup.py qui fonctionnaient pour python2 ne fonctionnent pas pour python3. Un autre outil utile pyinstaller L'option est --noconsole pour que l'exécutable démarre en tant que processus d'arrière-plan.

Ainsi, une solution rapide consiste à utiliser le module python virtualenv . Vous pouvez alors créer votre exécutable sans désinstaller votre version actuelle de python ainsi que tous ses modules, pour la remplacer par une version plus ancienne.

C:\Users\jf>pip install virtualenv
C:\Users\jf>python -m virtualenv box37 -p c:\users\jf\python37\python.exe
C:\Users\jf>C:\Users\jf\box37\Scripts\activate
(box37) C:\Users\jf>
(box37) C:\Users\jf>pip install pyinstaller
(box37) C:\Users\jf>pyinstaller --onefile test.py
(box37) C:\Users\jf>deactivate
C:\Users\jf>

L'option de ligne de commande -p c : \path\to\target\python\interpreter est sensible à la casse ! Pour pyinstaller utilisez le chemin dans lequel vous avez téléchargé python-3.7 ( py2exe le chemin vers 3.4).

Une fois créé, l'env. virtuel génère un répertoire avec votre nom donné (par exemple box37) dans le répertoire de travail. Exécuter le script \<strkeep>script<strkeep>\activate à l'intérieur de ce répertoire entre l'env. virutale. - La notice (boîte 37) apparaît devant mon invite.

Dans un environnement virtuel python. pip est utilisé pour installer les modules qui ne seront pas accessibles à l'extérieur de python. \Lib\site -packages. Ainsi, ce qui rend virtualenv un module de test parfait - si vous vous plantez, il suffit de supprimer le répertoire (par exemple box37).

Télécharger Python 3.7 Windows x86-64, installateur exécutable. Télécharger Python 3.4 Windows x86-64 MSI installer.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X