파이썬/에러 발생

pyinstaller로 exe 변환 시 에러 발생

토마토농장농장 2022. 1. 19. 14:04

.py 를 .exe로 변환하려고 아래와 같은 명령을 넣었더니 

 

PS C:\Users\M\PycharmProjects\pythonProject> pyinstaller ExceltoDbc.py

 

다음과 같이 출력되면서 오류가 뜸

 

345 INFO: PyInstaller: 4.7
345 INFO: Python: 3.10.0

 

843 INFO: UPX is not available.

2460 INFO: Building Analysis because Analysis-00.toc is non existent

12821 INFO: Processing pre-find module path hook distutils from 'c:\\users\\m\\pycharmprojects\\pythonproject\\venv\\lib\\site-packages\\PyInstaller\\hooks\\pre_find_module_path\\hook-distutils.py'.
12834 INFO: distutils: retargeting to non-venv dir 'C:\\Users\\M\\AppData\\Local\\Programs\\Python\\Python310\\lib'

 

20207 INFO: Processing pre-find module path hook site from 'c:\\users\\m\\pycharmprojects\\pythonproject\\venv\\lib\\site-packages\\PyInstaller\\hooks\\pre_find_module_path\\hook-site.py'.
20211 INFO: site: retargeting to fake-dir 'c:\\users\\m\\pycharmprojects\\pythonproject\\venv\\lib\\site-packages\\PyInstaller\\fake-modules'

 

IndexError: tuple index out of range

 

검색해보니 python 3.10 버젼에서 나오는 버그 같은데 해결책을 찾음

 

[해결 방법]

 

Python 검색 -> 파일 위치 열기 -> python 바로가기 우클릭해서 파일 위치 열기 

-> python310 설치 폴더 ->Lib -> dis.py 실행   (PyCharm 이건 Visual Studio건 등등 코드 열 수 있으면 된다. )

 

 

 

 

_unpack_opargs 함수를 찾아서

else: 항에  

'extended_arg=0'를 추가해준다. 

def _unpack_opargs(code):
    extended_arg = 0
    for i in range(0, len(code), 2):
        op = code[i]
        if op >= HAVE_ARGUMENT:
            arg = code[i+1] | extended_arg
            extended_arg = (arg << 8) if op == EXTENDED_ARG else 0
        else:
            arg = None
            extended_arg=0
        yield (i, op, arg)

 

다시 변환해보니 잘 된다. 

해결!