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
fonctionne correctement lorsque j'utilise Pycharm ou que j'exécute le script à l'aide de la fenêtre de commande.
La sortie produit l'erreur:
IndexError: tuple index out of range
Ci-dessous vous pouvez trouver la 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'])
setup.py
dossier? parce que le problème est là et non danspy2exe
lequel fonctionne bien.Storybookmaker.py
fichier dans le même répertoire quesetup.py
? vous pouvez essayersetup(console=[os.path.join(os.path.dirname(__file__,'Storybookmaker.py')])
d'être sûr de localiser le fichier.Réponses:
Python 3.6 a complètement repensé le bytecode pour CPython (ce n'est plus du tout un code "byte", c'est un wordcode, où tous les opcodes ont une largeur de deux octets au lieu de 1-3).
L'échec que vous voyez se produit dans le
py2exe
code d'analyse d'opcode, qui, étant donné la version la plus récente publiée de lapy2exe
prise en charge des revendications 3.3 et 3.4 uniquement, ne pourrait pas avoir connaissance ou prise en charge des nouveaux opcodes wordcode; ils n'avaient même pas été conçus au moment de lapy2exe
dernière mise à jour. Le bytecode change souvent de petites manières d'une version à l'autre, ce qui pourrait casser même Python 3.5 (étant donné que seul le support 3.3 et 3.4 est revendiqué explicitement), mais 3.6 est garanti à 100%.Mettre à jour: À ce stade (novembre 2019), cela fait plus de cinq ans depuis la dernière
py2exe
version , et au début de 2020 (lorsque le support de Python 2 sera complètement abandonné), il ne fonctionnera sur aucune version prise en charge de Python (la 3.4 est déjà sortie de soutien). Je pense qu'il est prudent de dire que le projet est abandonné; trouver d'autres options, par exemplecx_Freeze
ouPyInstaller
.la source
cx_freeze
. Il est compatible avec python3.6 mais il ne peut pas créer un seul fichier exe. Le problèmePyinstaller
est que vous ne pouvez pas créer de fichier exe x86 via un système d'Python 3.3 and later are supported
. Bien sûr, avec le recul, il est probablement un peu naïf de s'attendre à ce que quelque chose d'aussi vieux fonctionne, mais lorsque vous êtes un débutant dans ce domaine, il y a suffisamment de confusion pour les débutants.La solution que j'ai utilisée était d'utiliser PyInstaller comme alternative car Py2Exe a arrêté le développement à python 3.4 et ne fonctionnera pas avec les versions plus récentes.
Cela créera un sous-répertoire appelé dist avec le yourprogram.exe contenu dans un dossier appelé yourprogram.
Utilisez -F pour placer tous les fichiers générés dans un fichier exécutable.
Use peut utiliser -w to si vous souhaitez supprimer l'affichage de la console pour les interfaces graphiques.
Tout mettre ensemble.
En savoir plus sur PyInstaller ici .
Python version 3.7.3.
la source
J'ai eu le même problème, comme solution de contournement, 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 d'installation que j'ai utilisé et j'ai obtenu le fichier msi sur le dossier dist.
puis
python setup.py bdist_msi
la source
from PyQt5 import QtGui
comment puis-je le saisirpackages
? SeulementPyQt5
ou seulementQtGui
ou les deux?PyQt5
.J'ai eu du succès avec un programme Python 3.6 utilisant le fork de py2exe à https://github.com/albertosottile/py2exe .
la source
J'ai essayé une solution de contournement, en installant Python 3.4.3:
1) entrez dans votre dossier de script
2) désactiver tout antivirus que vous avez (chose étrange, savoir par une autre question SO xD)
3) appelez l'interpréteur python 3.4.3 par son chemin absolu, dans mon cas, j'ai installé dans:
4) exécuter la commande
la source
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.
Lorsque j'essaye de mettre à jour pip, j'obtiens la même erreur!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?
peut-être avez-vous 2 python et devez spécifier celui que vous souhaitez mettre à jour.