ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Python] PyQt5, Qt Designer, Pyinstaller 이용하여 Python GUI 프로그램(.exe) 만들기
    스터디 2019. 10. 4. 19:18

    1. PyQt5(5.13.1), PyQt-sip(4.19.19) 설치하기


    Anaconda Prompt에서 

    pip install PyQt5 / pip install PyQt-sip으로 설치 또는
    pip install --upgrade PyQt5 / pip install --upgrade PyQt5-sip 으로 버전 업그레이드할 수 있다.


    2. Qt Designer 이용하여 UI 디자인 하기

    https://opentutorials.org/module/544/5001 를 참고하여 아~주 간단한 UI를 만들었다. 다 만든 UI는 'myFirstUI.ui'라는 파일 명을 가진 .ui 파일로 저장했다.

     

    Qt Designer로 UI

     

    메모장을 통해 'myFirstUI.ui'를 열어보니 xml 형식이었다.

     

    myfirstui.ui

     

     

    3. pyuic5 이용하여 .ui 파일을 .py 파일로 변환하기

    https://yonoo88.tistory.com/1209 를 참고하여 2번에서 만든 .ui 파일을 .py 파일로 변환했다. 자동으로 코드를 작성해준다. 왕 신기! 

     

    원래는 2번 사이트의 예제처럼 새로운 .py 파일에서 .ui 파일을 불러오려고 했다. 'MyFirstPyQt5.py' 라는 파일을 만들고, 1번에서 만든 'myFirstUI.ui'를 이 안에서 불러왔다.

     

    MyFirstPyQt5.py


    하지만, .exe 파일 생성 후 실행 시, 계속 pyexpat이라는 라이브러리 관련 ModuleNotFoundError가 났다. 검색해보니, pyexpat은 xml 형식인 .ui 파일을 .py 파일에서 파싱하는 라이브러리 같았다. 이 라이브러리를 설치하려고 해도 버전이 맞는 pyexpat은 찾을 수 없다며 설치가 안됐다...ㅠ.ㅠ

     

    pyexpat 관련 ModuleNotFoundError


    그래서 .ui 파일을 .py 파일로 변환하는 방법을 선택했다.  (myFirstUI.ui -> myFirstUI.py)

    명령어는 다음과 같다.

     

    pyuics -x myFirstUI.ui -o myFirstUI.py

     

    myFirstUI.py



    기존 .py 파일에 타 기능이 있었다면 두 개의 파일을 하나로 만드는 과정이 필요했겠지만, MyFirstPyQt5.py에는 다른 기능이 없으므로 변환된 파일을 그대로 사용할 수 있었다.


    4. pyinstaller 이용하여 .py 파일을 .exe 파일로 변환하기

    기본적인 사용법은 https://mainia.tistory.com/5610 요기에서 참고했다.

    하지만 운명처럼 많은 오류들을 만나고 구선생님의 도움을 받아 어려움을 헤쳐나갔다. 다행히도 '난다! 에러! 백퍼!'라고 언급한 https://tina0430.tistory.com/34 요 블로그에서 에러를 해결하는데 많은 도움을 받았다!

    대표적으로

    1) dll 파일 관련 에러 : 위 블로그 3번을 참고하여 -p 옵션 사용하여 dll 파일 전부 때려 박았다.
     
    -p C:\Program Files (x86)\Windows Kits\10\Redist\ucrt\DLLs\x64

    그럼에도 불구하고, exe 파일은 정상적으로 생성되었으나, 실행 시 python37.dll 관련하여 에러가 났다. 그래서 오류에서 명시해준 하위 폴더에 직접 python37.dll 파일을 넣어주었다. 

     



    2) PyQt5 내부 모듈 관련 에러 : 역시 -p 옵션 이용하여 PyQt5 하위 디렉토리 내 파일을 전부 넣었다.

    -p C:\ProgramData\Anaconda3\Lib\site-packages\PyQt5

    역시 exe 파일은 정상적으로 생성되었으나, 실행 시 오류가 나서,, 또 오류에서 명시해준 하위 폴더에 직접 PyQt5 디렉토리를 넣어주었다.

     



    3) PyQt5.sip 관련 에러 : 위 블로그 4번을 참고했다.

    --hidden-import=PyQt5.sip


    최종 명령어는

    pyinstaller --clean -D -p C:\Program Files (x86)\Windows Kits\10\Redist\ucrt\DLLs\x64;C:\ProgramData\Anaconda3\Lib\site-packages\PyQt5 --hidden-import=PyQt5-sip C:\personal\exetest\MyFirstPyQt5.py

    이지만, 너무 알 수 없는 오류가 나서(...) 그냥 하나씩 옵션을 넣다 뺐다 하면서 실행해보았다. 새로운 오류(?)가 떴고, 새로운 오류가 떴다는 것은 기존의 오류는 해결됐다는 것이니깐 기쁜 일이다..

    이때 나타난 새로운 오류는 3번에 언급한 pyexpat 관련 오류이다. 3번에서 언급한 대로 해결을 했고, 그래서 정말로 최종적인 명령어는 아래와 같다.

    pyinstaller --clean --onefile C:\personal\exetest\myFirstUI.py

    계속 -D 옵션을 사용하다가 --onefile 옵션으로 변경하고 다른 옵션들을 추가하지 않았는데, 이상하게도 위에서 언급한 에러들이 하나도 나오지 않았다. 왜 그런지는 모르겠다. 성공적으로 현재 디렉토리에 몇 개의 하위 폴더와 파일들이 생겼다.

     

     

    dist 폴더에 들어가면 myFirstUI.exe가 있고, 정상 실행된다 ^_^ 끝!

     

     

    댓글

Designed by Tistory.