IndexError : py2exe를 사용할 때 튜플 인덱스가 범위를 벗어났습니다.


106

현재 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'])

2
setup.py파일 을 보여줄 수 있습니까? 문제가 있고 제대로 py2exe작동 하지 않기 때문 입니다.
Jean-François Fabre

1
Jean-Francois 님, 원본 게시물에 파일을 추가했습니다. 미리 감사드립니다!
Dennis

1
는 IS Storybookmaker.py와 같은 디렉토리에있는 파일은 setup.py? 당신은 시도 할 수있는 setup(console=[os.path.join(os.path.dirname(__file__,'Storybookmaker.py')])파일을 찾을 수 있는지 확인합니다.
Jean-François Fabre

1
@ Jean-FrancoisFabre C : \ Python36 폴더의 setup.py와 Storybookmaker.py 모두 중요하지 않지만 어쨌든 코드로 시도했습니다. 동일한 IndexError가 발생합니다. 다른 생각은?
Dennis

답변:


96

Python 3.6 은 CPython 용 바이트 코드를 완전히 재 설계했습니다 (더 이상 "바이트"코드가 아니며 모든 opcode가 1-3이 아닌 2 바이트 너비 인 워드 코드입니다).

당신이보고있는 오류는 py2exeopcode 구문 분석 코드 에서 발생하는데 , 이는 py2exe3.3과 3.4에 대한 클레임 지원 의 가장 최근에 게시 된 버전을 고려할 때 새로운 워드 코드 opcode에 대한 지식이나 지원을 가질 수 없었습니다. 그들은 py2exe마지막으로 업데이트 되었을 때 생각조차하지 않았습니다 . 바이트 코드는 종종 Python 3.5 (3.3 및 3.4 지원 만 명시 적으로 주장 됨)를 깨뜨릴 수있는 버전으로 조금씩 변경되지만 3.6은 100 % 실패 할 것을 보장합니다.

업데이트 : 현재 (2019 년 11 월) 마지막 py2exe릴리스 이후 5 년이 지났으며 2020 년 초 (Python 2 지원이 완전히 종료되는 시점)까지 지원되는 Python 버전에서 실행되지 않습니다 (3.4가 이미 출시됨). 지원). 프로젝트가 중단되었다고 말하는 것이 안전하다고 생각합니다. 다른 옵션 (예 : cx_Freeze또는)을 찾으십시오 PyInstaller.


4
그래서 대안이 없습니까?
Alex Jolig 2017

@AlexJolig : 모두 Python 3.6과 호환되는지 확인하지 않았지만 있습니다. 나는 PyInstaller와 cx_Freeze를 알고 있습니다. 다른 것이있을 수 있습니다.
ShadowRanger 2017

8
나는 테스트했다 cx_freeze. python3.6과 호환되지만 단일 exe 파일을 만들 수 없습니다. 문제는 Pyinstaller당신이의 x64 운영 체제를 통해 86 exe 파일을 만들 수 있습니다
알렉스 졸릭

이 정보에 감사드립니다. 이것이 어딘가에 실제로 문서화되어 있지 않다는 것에 약간 놀랐습니다. py2exe 설명조차도 Python 3.3 and later are supported. 물론, 돌이켜 보면 너무 오래된 무언가가 작동하기를 기대하는 것은 다소 순진하지만이 공간에서 초보자라면 처리 할 초보자 혼란이 충분합니다.
fostandy

39

내가 사용한 해결책은 Py2Exe가 Python 3.4에서 개발을 중단하고 최신 버전에서는 작동하지 않기 때문에 PyInstaller를 대안으로 사용하는 것이 었습니다.

C:/>pip install pyinstaller
C:/>pyinstaller yourprogram.py

그러면 yourprogram이라는 폴더에 포함 된 yourprogram.exe와 함께 dist라는 하위 디렉토리가 생성됩니다.

-F를 사용하여 생성 된 모든 파일을 하나의 실행 파일에 배치합니다.

C:/>pyinstaller -F yourprogram

GUI의 콘솔 디스플레이를 제거하려면 -w를 사용하십시오.

C:/>pyinstaller -w yourprogram.py

모든 것을 더 이상하게합니다.

C:/>pyinstaller -w -F yourprogram.py

여기에서 PyInstaller에 대해 자세히 알아보십시오 .

Python 버전 3.7.3.


2
내가 다른 컴퓨터에 프로그램을 실행하면, 나는 "어떤 모듈이하는 오류를 찾을 수 없습니다 ..."얻을
yarin 코헨

pyinstaller에 대한 솔루션에 감사드립니다. Windows 10에서 minggw64 python3.8.2 릴리스 및 gtk를 사용하여 독립형 프로젝트를 성공적으로 만들 수 있습니다. gi, gtk, dlls .. 모든 항목은 minggw64 셸에서 간단한 "$ pyinstaller yourprogram"명령을 사용하여 dist 폴더에 있습니다. pyinstaller + cython은 멋진 콤보처럼 보입니다.
jerome

10

해결 방법으로 cx_freeze를 사용하여 동일한 문제가 발생했습니다. 내 앱은 wxPython, Windows 10, python 3.6, cx_freeze 5.5.1을 기반으로합니다.

이것은 내가 사용한 설치 파일이며 dist 폴더에 msi 파일이 있습니다.

#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


4
당신과 마찬가지로, 파이썬 버전과 호환되고 사용하기 쉽기 때문에 cx_freeze를 사용하여 실행 파일을 만들었습니다. 사람들이 이것을 예로 사용할 수 있도록 설정 파일을 공유해 주셔서 감사합니다.
Dennis

나는이 있다면 from PyQt5 import QtGui나는에 입력 어떻게 packages? 만 PyQt5않거나 QtGui또는 둘 다?
Hrvoje T

Hrvoje T, 전체 PyQt5.
Taras Mykhalchuk


7

Python 3.4.3을 설치하여 해결 방법을 시도했습니다.

C:\socket> c:\Python34\python.exe setup.py py2exe

1) 스크립트 폴더에 입력

2) 가지고있는 바이러스 백신 비활성화 (이상한 것, 다른 질문 xD로 알고 있음)

3) 절대 경로로 파이썬 3.4.3 인터프리터를 호출합니다. 제 경우에는 다음 위치에 설치했습니다.

C:\Python34

4) 명령 실행

C:\Python34\python.exe setup.py py2exe

Python 3.5에서 똑같은 작업을 시도했지만 pip에 최신 버전이 필요하기 때문에 py2exe를 설치하는 데 멈춰서 오류가 발생합니다. 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를 업그레이드하려고하면 같은 오류가 발생합니다!
Dennis

내가보기에, 당신은 두 가지 선택 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 개의 파이썬을 가지고 있고 업데이트 할 것을 지정해야 할 수도 있습니다.
Ricardo Martínez

그런데, @Dennis
리카르도 마르티네즈

Martinez 버전은 이제 3.6 대신 3.5로 표시됩니다. 3.5에 대한 경로를 지정했고 3.6에는 이미 9.0.1이 있으므로 pip 8.1.1은 3.5에만 설치됩니다. 여러 버전으로 조언을 해보겠습니다.
Dennis

지연되어 죄송합니다. Python 폴더에 들어가서 'python -m pip install --upgrade pip'를 실행하고 Python 3.5 Pip을 업데이트하세요
Ricardo Martínez
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.