본문 바로가기
프로그래밍/Python

Pyinstaller 사용해서 PyQt5 UI포함한 실행파일 빌드 방법

by 왕거 2020. 6. 26.
def resource_path(relative_path):
    """ Get absolute path to resource, works for dev and for PyInstaller """
    base_path = getattr(sys, '_MEIPASS', os.path.dirname(os.path.abspath(__file__)))
    return os.path.join(base_path, relative_path)

form = resource_path('_UI_FILENAME_')
form_class = uic.loadUiType(form)[0]

_UI_FILENAME_에 사용할 .ui 파일 이름 넣어주어야 한다.

 

pyinstaller 사용해서 소스파일 빌드

이후 생성된 .spec 파일의 datas 부분을 수정

a = Analysis(['cal_gui.py'],
             ...
             datas=[ ('_UI_FILENAME_', '.') ],
             ...)

 

.spec 파일로 재빌드

ex) pyinstaller _SOURCE_NAME_.spec

주의! 소스파일을 그대로 다시 빌드하면 .spec 파일은 기본으로 변경되고 수정한 사항이 반영이 안됨.

 

 

dist 디렉토리에서 결과물 확인

 

 

단일 실행파일로 빌드하는 옵션 때문인지 실행속도가 조금 느린 점을 빼면 문제없이 작동함.

 

추가적으로 pyinstaller 사용해서 빌드할 때 사용한 옵션

  • --noconsole, -w : 실행시에 콘솔창이 안뜨게하는 옵션인데 왜인지 모르겠는데 내 경우에는 적용이 안되서 .spec 파일에서 EXE 파트에서 console 부분을 False로 직접 변경해주었더니 콘솔창이 안떴음
  • -onefile, -f : 단일 실행파일로 빌드하는 옵션인데 이건 문제없이 잘 작동했음

윈도우 환경에선 문제없이 잘 작동하는 걸 확인했는데 다른 OS에서는 어떤 방법을 사용해야하는지 알아볼 필요가 있어보인다.