Python tech/Python Experience

[Python] PyQt5를 exe 파일로 만들기 (오류 해결 과정)

콜레오네 2020. 12. 29. 00:11

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 파일로 변환해주는 사이트를 첨부합니다.

https://icoconvert.com

 


 발생 가능한 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 -*-

위 코드를 적어주어 인코딩 문제를 해결합니다.

 

반응형