Ich versuche gerade, eine ausführbare Datei mit py2exe zu erstellen. Ich benutze Python 3.6. Das Skript, das ich verwende, wird importiert openpyxl
und pptx
läuft einwandfrei, wenn ich Pycharm verwende oder das Skript über das Befehlsfenster ausführe.
Die Ausgabe erzeugt den Fehler:
IndexError: tuple index out of range
Unten finden Sie die cmd
Ausgabe:
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>
Was verursacht das IndexError
?
Edit: hier ist die setup.py
Datei:
from distutils.core import setup
import py2exe
setup(console=['Storybookmaker.py'])
setup.py
Datei zeigen? weil das problem da ist und nichtpy2exe
wo es gut funktioniert.Storybookmaker.py
Datei im selben Verzeichnis wiesetup.py
? Sie könnten versuchensetup(console=[os.path.join(os.path.dirname(__file__,'Storybookmaker.py')])
, sicher zu sein, die Datei zu finden.Antworten:
Python 3.6 hat den Bytecode für CPython komplett neu gestaltet (es ist überhaupt kein "Byte" -Code mehr, sondern ein Wordcode, bei dem alle Opcodes zwei Bytes breit sind anstatt 1-3).
Der Fehler, den Sie sehen, tritt beim
py2exe
Opcode-Parsing-Code auf, der angesichts der neuesten veröffentlichten Version vonpy2exe
nur Claims Support für 3.3 und 3.4 möglicherweise keine Kenntnis von den neuen Wordcode-Opcodes hat oder diese nicht unterstützt. Sie waren zu dem Zeitpunkt,py2exe
als sie zuletzt aktualisiert wurden, noch nicht einmal konzipiert worden . Der Bytecode ändert sich häufig geringfügig von Version zu Version, wodurch Python 3.5 ausgeglichen werden kann (da nur die Unterstützung von 3.3 und 3.4 explizit beansprucht wird), aber 3.6 schlägt garantiert zu 100% fehl.Update: Zu diesem Zeitpunkt (November 2019) sind seit der letzten
py2exe
Veröffentlichung mehr als fünf Jahre vergangen. Bis Anfang 2020 (wenn die Python 2-Unterstützung vollständig verfällt) wird es auf keiner unterstützten Version von Python ausgeführt (3.4 ist bereits verfügbar) der Unterstützung). Ich denke, man kann mit Sicherheit sagen, dass das Projekt aufgegeben wurde. andere Optionen finden, zBcx_Freeze
oderPyInstaller
.quelle
cx_freeze
. Es ist kompatibel mit Python3.6, kann jedoch keine einzige Exe-Datei erstellen. Das Problem mitPyinstaller
ist, dass Sie keine x86-Exe-Datei über ein x64-Betriebssystem erstellen könnenPython 3.3 and later are supported
. Sicher, im Nachhinein ist es wahrscheinlich ein bisschen naiv zu erwarten, dass etwas so Altes funktioniert, aber wenn Sie ein Anfänger in diesem Bereich sind, gibt es genug Neulinge, mit denen Sie sich befassen können.Die Lösung, die ich verwendet habe, war die Verwendung von PyInstaller als Alternative, da Py2Exe die Entwicklung bei Python 3.4 gestoppt hat und mit neueren Versionen nicht funktioniert.
Dadurch wird ein Unterverzeichnis namens dist mit der Datei yourprogram.exe erstellt, die in einem Ordner namens yourprogram enthalten ist.
Verwenden Sie -F, um alle generierten Dateien in einer ausführbaren Datei zu platzieren.
Verwenden Sie kann -w verwenden, um die Konsolenanzeige für GUIs zu entfernen.
Alles zusammen.
Lesen Sie hier mehr über PyInstaller .
Python Version 3.7.3.
quelle
Ich hatte das gleiche Problem, als Problemumgehung habe ich cx_freeze verwendet. Meine App basiert auf wxPython, Windows 10, Python 3.6, cx_freeze 5.5.1
Dies ist die Setup-Datei, die ich verwendet habe, und ich habe eine MSI-Datei im dist-Ordner.
dann
python setup.py bdist_msi
quelle
from PyQt5 import QtGui
wie gebe ich es einpackages
? NurPyQt5
oder nurQtGui
oder beides?PyQt5
.Ich hatte Erfolg mit einem Python 3.6-Programm, das die Gabelung von py2exe unter https://github.com/albertosottile/py2exe verwendet .
quelle
Ich habe versucht, dieses Problem zu umgehen, indem ich Python 3.4.3 installiert habe:
1) Geben Sie in Ihren Skriptordner ein
2) Deaktivieren Sie alle Antivirenprogramme, die Sie haben (seltsame Sache, wissen Sie durch eine andere SO-Frage xD)
3) Rufen Sie den Python 3.4.3-Interpreter über seinen absoluten Pfad auf. In meinem Fall habe ich Folgendes installiert:
4) Führen Sie den Befehl aus
quelle
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.
Wenn ich versuche, pip zu aktualisieren, erhalte ich den gleichen Fehler!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?
Möglicherweise haben Sie zwei Pythons und müssen angeben, welche Sie aktualisieren möchten.