728x90

결국 구글링으로 해결책을 찾았습니다. 이 방법은 pyinstaller가 패키징을 할 때 UI파일을 수동으로 포함하도록 지정해 주는 방법으로 UI파일이 2개 이상인 경우에도 사용할 수 있는 유용한 방법입니다.

먼저 파이썬 스크립트는 처음 구상했던 대로 실행 위치를 기준으로 UI파일의 절대 경로를 찾아서 실행할 수 있도록 만들어 줍니다.

PYTHON
import os

## python실행파일 디렉토리
BASE_DIR = os.path.dirname(os.path.abspath(__file__)) 
Ui_MainWindow, QtBaseClass = uic.loadUiType(BASE_DIR + r'\GUI.ui')

class MyWindow(QMainWindow):
​​​​def __init__(self):
​​​​​​​​super(MyWindow, self).__init__()
​​​​​​​​self.ui = Ui_MainWindow()

이렇게 되면 스크립트 실행 상태에서는 문제없지만 패키징 상태에서는 문제가 되죠. 그래서 이제 패키징에 UI파일을 포함시키기 위해서 아래 과정을 추가로 진행합니다.

pyinstaller.exe -w -F .\MyCode.py

일단 스크립트를 pyinstaller로 한번 패키징 합니다. 이때 최종 결과에 반영할 옵션을 걸어서 실행합니다. 저는 커맨드 창을 숨기고(-w) 하나의 파일로(-F) 패키징을 하도록 했습니다. 이렇게 하고 나면 실행파일(.exe)도 만들어지지만 작업 폴더에 보면 ".spec"이라는 확장자의 파일이 만들어져 있습니다. (예: MyCode.spec)

pyinstaller가 작업을 하는데 필요한 각종 설정이 저장된 파일인데요. 이 파일을 열어서 아래 그림처럼 수정해 줍니다. Analysis(datas) 부분이 UI 과련 리소스를 지정하는 부분인데 여기에 UI파일을 명기하면 됩니다. 

그리고 또 하나 유용한 게 만약 UI파일이 여러 개인 경우라면 대괄호 안에 리스크 형태로 포맷을 맞춰서 추가할 파일을 더 써주면 됩니다.

이렇게 수정했으면 이 .spec파일을 이용해서 다시 한번 패키징을 해 줍니다.

pyinstaller.exe .\MyCode.spec

이때는 앞서 사용했던 -w -F 옵션이 이미 .spec파일에 반영되어 있기 때문에 다시 지정할 필요는 없습니다.

이렇게 하면 UI파일이 패키징에 포함되어서 하나의 파일만으로도 GUI 프로그램이 잘 실행됩니다. UI파일 2개도 해봤는데 잘 되네요.

728x90

'파이썬+VBA' 카테고리의 다른 글

판다스 dataframe 속 pandas timestamp  (0) 2022.09.22
데이터프레임 역순 정렬  (0) 2022.09.22
파이썬 기본기본  (0) 2022.09.07
왜 집에선 안되니...pdftoexcel  (0) 2022.09.07
메모장 문자열을 역순으로 재 정렬  (0) 2022.09.06

+ Recent posts