
PyQt를 이용하여 Python으로 GUI 프로그램 제작이 가능하다.
QtDesigner, Pycharm 개발 툴을 사용하여 간단한 프로젝트를 하고 있었는데, 실행 파일(.exe) 제작 시 UI 파일의 의존성으로 인해 실행이 안되는 경우가 발생했다.
이번 포스트에서는 해당 문제가 발생하지 않고 실행파일을 만들 수 있는 방법을 소개하겠다.
Pyinstaller 설치pip를 이용하여 터미널에서 Pyinstaller를 설치한다.
pip insatall pyinstaller
.spec 파일 생성 및 수정바로 .exe 파일을 생성할 수 있으나, ui 파일 의존성 때문에 실행이 되지 않는 경우가 발생한다. 따라서, .spec 파일을 생성한 후 수정하여 .exe 파일을 생성해야 의존성 문제를 해결할 수 있다.
pyinstaller는 여러 명령어 옵션이 존재한다.
| 옵션 | 내용 |
|---|---|
| --onefile 또는 -F | 단일 exe 파일 생성 |
| --noconsole 또는 -w | 콘솔창 없이 실행 |
| -n (실행 파일 이름.exe) | 실행 파일 이름 지정 |
이를 이용하여 .spec 파일을 생성한다.
pyi-makespec --onefile --noconsole -n (실행파일 이름).exe (파일 이름).py

생성된 .spec파일의 a리스트의 datas에 .ui파일 경로를 넣어주어야 한다. add_files 리스트를 만들어서 datas에 대입하는 방식이다. 아이콘 이미지 .ico파일의 경로도 넣어주었다.
나중에 다른 파일들을 추가 및 삭제하더라도 add_files 리스트만 수정하면 되므로 편리하다. 요소 타입은 튜플임을 주의하자
exe 부분에 icon을 추가하여 아이콘 이미지도 설정해 주었다.
block_cipher = None
# datas에 넣을 파일들의 리스트
add_files = [ ('src\\RFB.ui', '.'), ('img\\icon.ico', '.') ]
a = Analysis(['src\\printUI.py'],
pathex=['D:\\Github\\RenameFile-for-BOJ'],
binaries=[],
datas=add_files,
...
pyz = PYZ(a.pure, a.zipped_data,
cipher=block_cipher)
exe = EXE(pyz,
a.scripts,
a.binaries,
a.zipfiles,
a.datas,
[],
# 아이콘 설정
icon='D:\\Github\\RenameFile-for-BOJ\\img\\icon.ico',
...
.exe 파일 생성수정된 .spec파일을 이용하여 실행 파일을 만든다.
pyinstaller (spec파일 이름).spec
생성된 실행 파일은 /dist 디렉토리에 저장되어 있다.

.spec 파일에서 datas에 추가해주면 된다.datas에 대입하게 작성하면 추가 및 삭제가 용이하다.pyinstaller에서 제공되는 옵션을 이용한 명령어들은 .spec에서 모두 수정이 가능하다. 즉, 우선 .spec 파일을 생성하고 세부 옵션들을 .spec 파일에서 수정해도 된다.