[PyQt5, pyinstaller] Failed to execute script pyi_rth_qt5plugins
PyQt로 만들어진 프로그램을 윈도우에서 pyinstaller로 컴파일을 했으나
만들어진 프로그램은 실행되지 않고 바로 종료 되었다.
콘솔모드로 컴파일후 콘솔로 실행했더니 아래와 같은 trace back을 얻을수 있었다.
Traceback (most recent call last):
File "site-packages\pyinstaller-3.2.1+5b84a8d-py3.5.egg\PyInstaller\loader\rthooks\pyi_rth_qt5plugins.py", line 46, in <module>
File "C:\Python35\lib\site-packages\pyinstaller-3.2.1+5b84a8d-py3.5.egg\PyInstaller\loader\pyimod03_importers.py", line 573, in load_module
module = loader.load_module(fullname)
ImportError: DLL load failed: 지정된 모듈을 찾을 수 없습니다.
Failed to execute script pyi_rth_qt5plugins
구글링으로 두가지 해결방법을 찾을수 있었다.
pyinstaller develop 버전 설치
github에서 develop branch를 내려받는다.
https://github.com/pyinstaller/pyinstaller/archive/develop.zip
기존의 pyinstaller를 제거하고 내려받은 pyinstaller를 설치한다.
py -3 -m pip uninstall pyinstaller cd pyinstaller-develop py -3 setup.py install
그런데 어째선지 나의 경우에는 설치가 되지 않았다. 아마 개발자가 업데이트 도중 아직 release를 하지 못한 모양이다..
어쩔 수 없이 다른 방법을 찾을수 밖에 없었다.
.spec파일 직접 작성
.spec 파일의 pathex 항목에 PyQt5의 bin디렉토리 경로를 추가해준다.
나의 경우에는 python3이 C:\Python35
에 설치돼 있으므로,
PyQt5의 bin 디렉토리 위치는 C:\Python35\Lib\site-packages\PyQt5\Qt\bin
이 된다.
setup.spec 파일을 만들어 각자 상황에 맞게 작성한다.
# -*- mode: python -*- block_cipher = None app_path = 'my_app.pyw' app_name = 'my_app' a = Analysis([app_path], pathex=[r'C:\Python35\Lib\site-packages\PyQt5\Qt\bin'], binaries=[], datas=[], hiddenimports=[], hookspath=[], runtime_hooks=[], excludes=[], win_no_prefer_redirects=False, win_private_assemblies=False, cipher=block_cipher) pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher) exe = EXE(pyz, a.scripts, exclude_binaries=True, name=app_name, debug=False, strip=False, upx=True, console=False , icon='' ) coll = COLLECT(exe, a.binaries, a.zipfiles, a.datas, strip=False, upx=True, name=app_name)
spec파일로 컴파일한다
pyinstaller setup.spec
성공!
'Python > PyQt5' 카테고리의 다른 글
[PyQt5] Drag&drop 으로 파일 경로 얻어오기 (2) | 2017.01.13 |
---|