PyQt5로 제작한 프로그램을 exe 파일로 만들어봅시다.
실행하기도 편리하고, 배포하기도 쉽습니다.
1. pyinstaller 설치
python은 pyinstaller를 통해 exe 파일로 만들 수 있습니다.
cmd> pip install pyinstaller
pip로 간단하게 pyinstaller 설치가 가능합니다.
설치중 오류가 발생한다거나, 최신 버전 설치가 필요하신 분은 수동으로 설치해주어야 합니다.
@최신 버전 수동 설치
pip install https://github.com/pyinstaller/pyinstaller/archive/develop.tar.gz
2. exe 파일 생성, using pyinstaller
가장 기본적인 exe 파일 생성 방법은 아래와 같습니다.
예시로, 파이썬 파일 이름을 main.py로 하겠습니다.
cmd> pyinstaller main.py
이렇게 설치하면 build, dist 폴더와 main.spec 파일이 생성됩니다.
./dist/main/main.exe 에서 우리가 찾는 exe 파일을 발견할 수 있습니다.
그런데.....
이렇게 생성하면 파일이 너무 많이 생성이 됩니다.
우리는 pyinstaller에 option을 주어 여러 방법으로 exe 파일을 생성할 수 있습니다.
pyinstaller --onefile --noconsole -n newName --icon=myicon.ico main.py
--onefile : exe 파일 하나만 생성해줍니다. 물론, build, dist 폴더와 .spec 파일은 생성됩니다. 하지만 dist 폴더 내에는 exe 파일 하나만 남게 됩니다.
--noconsole : exe 파일을 실행시켰을 때, 나타나는 console 화면이 보이지 않게 됩니다.
--n newName : exe 파일의 이름을 python 파일의 이름과 다르게 설정할 수 있습니다.
--icon=myicon.ico : exe 파일의 아이콘을 설정할 수 있습니다. 주의할 점은, 아이콘 이미지는 .ico 확장자만 가능합니다.
아래에 이미지 파일을 .ico 파일로 변환해주는 사이트를 첨부합니다.
발생 가능한 Errors
PyQt에서는....
exe 파일이 오류 없이 생성되어도 실행시키면 오류가 발생하는 경우가 있습니다.
exe 파일을 클릭하면, Failfailed to execute script 이런 에러 창이 나타는 경우에도 의심해볼 수 있습니다.
발견된 오류 내용은 다음과 같습니다.
ModuleNotFoundError: No module named 'PyQt5.sip'
도대체 PyQt5.sip이라는 모듈을 한 번도 사용하지 않았고, 소스 코드에도 없는 모듈인데도 에러가 발생합니다.
그래서 구글링한 결과
pyinstaller 옵션 추가> --hidden-import PyQt5.sip
위 옵션을 pyinstaller 실행 시, 추가해주면 해당 에러가 해결됩니다.
pyinstaller --onefile --noconsole -n newName --icon=myicon.ico --hidden-import PyQt5.sip main.py
뭐 이런 식으로 말이죠...
exe 생성 도중, 이런 에러도 발견할 수 있습니다.
File "C:\Users\AppData\Local\Programs\Python\Python38\Scripts\pyinstaller-script.py", line 1
SyntaxError: Non-UTF-8 code starting with '\xb1' in file C:\Users\AppData\Local\Programs\Python\Python38\Scripts\pyinstaller-script.py on line 1, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details
이 에러는 pyinstaller-script.py 파일에 인코딩 문제가 발생해서 생기는 문제입니다.
에러 문구에서 보여주는 경로를 통해 pyinstaller-script.py 파일을 열어줍니다.
pyinstaller-script.py 파일 맨 위에
# -*- coding: utf-8 -*-
위 코드를 적어주어 인코딩 문제를 해결합니다.
'Python tech > Python Experience' 카테고리의 다른 글
Colab에서 내 구글 드라이브의 파일 불러오기 (0) | 2021.05.18 |
---|---|
[Python] DFS, BFS 알고리즘 (0) | 2021.04.14 |
[Python] Numpy Array를 DB (SQLite)에 저장하기 (0) | 2021.03.30 |
[PyQt5] QPixmap에서 jpg 파일이 보이지 않는 현상 해결 (0) | 2020.12.28 |