В настоящее время я пытаюсь создать исполняемый файл с помощью py2exe. Я использую Python 3.6. Сценарий я использую импорт openpyxl
и pptx
и прекрасно работает , когда я использую PyCharm или запустить скрипт , используя окно командной строки.
Результат выдает ошибку:
IndexError: tuple index out of range
Ниже вы можете найти 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:\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>
Что вызывает IndexError
?
Изменить: вот setup.py
файл:
from distutils.core import setup
import py2exe
setup(console=['Storybookmaker.py'])
setup.py
файл? потому что проблема там а не вpy2exe
чем нормально работает.Storybookmaker.py
файл в том же каталогеsetup.py
? вы можете попытатьсяsetup(console=[os.path.join(os.path.dirname(__file__,'Storybookmaker.py')])
найти файл.Ответы:
Python 3.6 полностью переработал байт-код для CPython (это уже не «байтовый» код, это текстовый код, где все коды операций имеют ширину два байта вместо 1–3).
Сбой, который вы видите, происходит в
py2exe
коде синтаксического анализа кода операции, который, учитывая последнюю опубликованную версиюpy2exe
поддержки утверждений только для 3.3 и 3.4, возможно, не может знать или поддерживать новые коды операций кода операции; они даже не были задуманы во времяpy2exe
последнего обновления. Байт-код часто меняется незначительно от версии к версии, что может нарушить даже Python 3.5 (учитывая, что явно заявлена поддержка только 3.3 и 3.4), но 3.6 гарантированно на 100% потерпит неудачу.Обновление: на данный момент (ноябрь 2019 г.) прошло более пяти лет с момента последнего
py2exe
выпуска , и к началу 2020 г. (когда поддержка Python 2 полностью прекратится) он не будет работать ни на одной поддерживаемой версии Python (3.4 уже отсутствует. поддержки). Я думаю, можно с уверенностью сказать, что проект заброшен; найдите другие варианты, напримерcx_Freeze
илиPyInstaller
.источник
cx_freeze
. Он совместим с python3.6, но не может создать ни одного exe-файла. Проблема вPyinstaller
том, что вы не можете создать exe-файл x86 через операционную систему x64Python 3.3 and later are supported
. Конечно, оглядываясь назад, вероятно, немного наивно ожидать, что что-то настолько старое сработает, но когда вы новичок в этой сфере, у новичков достаточно проблем, с которыми нужно иметь дело.Решение, которое я использовал, заключалось в использовании PyInstaller в качестве альтернативы, потому что Py2Exe остановил разработку на python 3.4 и не будет работать с более новыми версиями.
Это создаст подкаталог с именем dist с файлом yourprogram.exe, содержащимся в папке с именем yourprogram.
Используйте -F, чтобы поместить все сгенерированные файлы в один исполняемый файл.
Используйте -w to, если вы хотите убрать отображение консоли для графического интерфейса.
Собираем все вместе.
Узнайте больше о PyInstaller здесь .
Python версии 3.7.3.
источник
У меня была такая же проблема, в качестве обходного пути я использовал cx_freeze. Мое приложение основано на wxPython, windows 10, python 3.6, cx_freeze 5.5.1
Это установочный файл, который я использовал, и у меня есть файл msi в папке dist.
затем
python setup.py bdist_msi
источник
from PyQt5 import QtGui
как мне его ввестиpackages
? ТолькоPyQt5
или толькоQtGui
или оба?PyQt5
.Я добился успеха с программой Python 3.6 с использованием вилки py2exe по адресу https://github.com/albertosottile/py2exe .
источник
Я попробовал обходной путь, установив Python 3.4.3:
1) войдите в свою папку скрипта
2) деактивируйте любой антивирус, который у вас есть (странная вещь, знаю по другому вопросу SO xD)
3) вызовите интерпретатор python 3.4.3 по его абсолютному пути, в моем случае я установил в:
4) выполнить команду
источник
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.
Когда я пытаюсь обновить pip, я получаю ту же ошибку!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?
может быть, у вас 2 питона, и вам нужно указать, какой из них вы хотите обновить.На момент написания последняя версия python - 3.8, а py2exe работает до python-3.4. pyinstaller работает до python-3.7. Использование параметров командной строки pyinstaller (например, --onefile для создания автономного исполняемого файла) проще, чем параметры кодирования в py2exe setup.py ... Тем более, что файлы setup.py, которые работали для python2, не работают для python3.
Итак, безвременное решение использует python-модуль virtualenv . Затем вы можете создать свой исполняемый файл, не удаляя текущую версию python вместе со всеми его модулями, чтобы заменить его более старой версией.
Параметр командной строки -pc: \ path \ to \ target \ python \ интерпретатор чувствителен к регистру! Для pyinstaller используйте путь, по которому вы загрузили python-3.7 в ( py2exe - путь к 3.4).
При создании виртуального env. генерирует каталог с вашим именем (например, box37) в рабочем каталоге. Выполнение скрипта \ Script \ activate внутри этого каталога попадает в виртуальный env. - уведомление (box37), появляющееся перед моим запросом.
Внутри виртуального окружения python. pip используется для установки модулей, которые не будут доступны для python извне - обратите внимание, что у него есть собственный каталог \ Lib \ site-packages. Следовательно, что делает virtualenv идеальным модулем для настройки тестирования - если вы ошиблись, просто удалите каталог (например, box37).
Загрузите Python 3.7 , исполняемый установщик Windows x86-64. Загрузите Python 3.4 , установщик MSI для Windows x86-64.
источник