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
파일에서 수정해도 된다.