[pyinstaller] This application failed to start because it could not find or load the Qt platform plugin "windows" in "". / pyqt5 exe파일 배포시 error (에러해결)

JINJU·2022년 3월 30일
0
post-custom-banner

아.. 회사에서 pyqt로 간단한 gui tool만들어서 exe파일로 배포를 하는데 하루종일 이 에러때문에 시간을 날렸다. 하.. 온갖 구글링에서 나온 이유들 다 해봤는데 안되서 나는 내가 해결한 방법 작성하도록 하겠다 ㅠㅠ

개발환경

우선 개발환경은 window환경이고 pycharm에서 Python3를 사용하여 pyqt5를 설치하고 개발을 하였다.

pyinstaller

pyinstaller로 exe파일을 만드는데 자꾸 이와 같은 에러가 났다.

This application failed to start because it could not find or load the Qt platform plugin "windows" in "".

그래서 환경변수에 다음과 같이 넣어보기도 하고 했는데 안됨

구글링을 통한 방법들은 다음과 같았다.

  1. 환경 변수로 pyqt5 폴더안에 plugin 폴더가 잇는데 그 안에 platforms 폴더 속 qwindows.dll 파일이 있는 해당 Path를 추가하는 것. --> 응 안됨

  2. qwindows.dll파일을 exe파일이 생성된 dist파일에 platforms 폴더에 넣어서 넣고, pyqt5를 설치한 bin파일 속에 있는 libEGL.dll를 넣는 것. --> 당연 안됨.

  3. Dependency Walker (exe file or dll file 빠진거 찾아주는거임) 를 사용해서 exe파일 안에 어떤 dll이 빠졌는지 확인해보기 --> 그 결과 "api-ms-win-core *.dll" 파일이 죄다 없었음.

    이 파일은 C:\Program Files (x86)\Windows Kits\10\Redist\ucrt\DLLs\x64 파일 경로에 들어가면 있음!

그래서 exe파일이 생성된 dist파일에 해당 애들을 다 넣어줬는데 안됨~!

해결방법

하.. exe파일을 만들다보면 cmd창에 로그가 찍히는데 맨첫번째 로그에 pyinstaller 버전이 나오고 그다음에 python3 버전이 나옴. 내 컴퓨터는 anaconda2를 사용하여 있어서 python2가 디폴트로 빌드가 되는 것인지.. pyinstaller는 pip3로 install해서 3의 4.1 버전이였고 python2로 빌드를 하고 있었다...!

난 pycharm에서 python3로 pyqt5를 사용하고 있었는데..(pyqt5는 python3에서 지원가능함..) 그래서 당연 안됐던 것. 근데 왜 저런 윈도우 플로그 어쩌고 문제가 나는진 모름..

그래서 python3가 설치되어 있는 경로로 가서 해당 명령어를 사용하여 빌드했더니 ㅠㅠ 너무잘됨...

python3가 있는 경로: C:\Users\owner\AppData\Local\Programs\Python\Python38\Scripts

.\pyinstaller.exe --onedir --clean --hidden-import PyQt5 -p [dll파일이 있는 경로] [exe파일만들고자하는 파일이름].py

--onedir: 하나의 dir로 만드는 거
--hidden-import: exe파일을 만드는데 PyQt5가 modulenotfound여서 이럴경우 없는 모듈을 치면 나옴 단, pip3 install pyqt5를 했는데도 안됐을 경우! 추가적으로, PyQt5.sip 도 없다고 나오는 경우도 있다는데 난 아니였음. 해당사항도 마찬가지로 똑같이 넣으면됨.
--p: 이건 위에서 window관련 dll파일이 없다고 나와서 3번에 있는 폴더에서 dll파일만 복사해서 따로 폴더만들어주고 해당 폴더 경로를 넣어줌.

그랬더니 만들어졌다!!! 예~

후 하다가 나처럼 고생하는사람이 많을 것 같아서 적었다 ㅠㅠ

결국은 python버전과 pyinstaller 버전이 똑같아야한다는 사실이다..!!!!!

post-custom-banner

0개의 댓글