간혹 작성한 코드를 실행파일 형태로 만들어야 할 때가 있죠.
VS의 C++계열은 각종 라이브러리를 연동시켜주고, 생성한 exe를 실행시키는 컴퓨터에서도 환경설정이나 환경변수, 라이브러리 등을 따로 처리해줘야하는데
파이썬은 그런 부분을 생각하지 않아도 되니 엄청 편하네요.
"Pyinstaller"
코드를 exe형태로 만들어주는 Pyinstaller를 사용하여 프로그램을 만들어 봅니다.
코드는 어떠한 형태든 상관없고, 만드는 형태도 간단합니다.
1. 자신의 파이썬 개발환경/가상환경에 pyinstaller 설치
pip install pyinstaller
2. 터미널에서 변환하고자 하는 .py파일의 위치로 이동한 후, 실행 (이번 예제에서는 XR_Calculator.py 라는 파일을 저는 사용했습니다)
pyinstaller XR_Calculator.py
3. .py하위 폴더인 (새로 생성된) dist 폴더 내의 .exe파일 실행. 끝!
알아두면 좋은 몇 가지 파라미터
-n Newname
--noconsole
--onefile
위 예제 그대로 실행하면, 뭔가 살짝 아쉬운 결과물이 나옵니다.
1) 생성된 exe파일의 이름이 .py의 이름과 동일한점
2) 콘솔창이 생성되는점 (보통의 경우)
3) dist폴더 내에 매우 많은 관련 파일들이 포함되어 있다는 점
이들을 위의 명령어로 해결할 수 있습니다.
A1) "-n 파일명" 으로 새 이름을 부여할 수 있습니다.
A2) "--noconsole" 으로 터미널창을 생략할 수 있습니다.
A3) "--onefile" 으로 하나의 exe파일만을 생성할 수 있습니다.
pyinstaller --onefile -n Test --noconsole XR_Calculator.py
예를들어 이와같이 입력값을 주면 XR_Calculator.py의 코드를 콘솔창이 뜨지 않는 Test.exe파일 하나만으로 생성합니다.
* 다만 주의할점은, --onefile을 주면 파일이 하나만 생성되기에 보기에는 좋으나,
관련 dependency를 .exe실행시에 따로 불러오는 과정이 필요한지 초기 실행에 수 초가 소요되는 단점이 있습니다.
* 따라서 --onefile을 사용할 경우에 불필요한 패키지를 모두 삭제한 가상환경에서 실행하는 것이 좋겠죠.
실행시 바로 터미널창이 꺼지거나, .exe파일을 눌러도 반응이 없는 문제 해결
제 경우에 테스트시 사용한 패키지가 tkinter, numpy, opencv, scikit-image, 정도였습니다만
이상하게 코드를 실행하면 정상적으로 작동하는데
pyinstaller로 생성한 exe를 실행하면 아무 반응이 없는 프로그램이 생성된 문제가 있었습니다.
정확하게는 아무 반응이 없다기 보다, 터미널이 생성되고 바로 꺼져버리는 문제였고,
터미널에서 아래와 같은 오류가 나면서 프로그램이 종료되더라구요.
opencv의 모듈 임포트가 정상적으로 이루어지지 않는 것으로 보입니다.
해결법은 https://github.com/pyinstaller/pyinstaller/issues/4564
에서 참고하였습니다.
pyinstaller로 생성시에 명령어로 opencv의 path를 추가로 줘야 빌드오류가 발생하지 않는다는 내용이네요.
해결법은 간단합니다.
import cv2
print(cv2.__file__)
터미널에서 cv2의 경로를 확인합니다.
제 환경에서는
C:\Users\Ai\.conda\envs\XR\lib\site-packages\cv2\__init__.py
이렇게 나오네요.
여기서 cv2까지의 경로를 복사한 후 아래와 같이 --path에 경로를 추가하면 해결됩니다.
pyinstaller --onefile XR_Error_TKInter.py --paths "C:\Users\Ai\.conda\envs\XR\lib\site-packages\cv2"
'프로그래밍 오류해결, 팁! > Python, PyCharm' 카테고리의 다른 글
파이썬 - 인텔 리얼센스 D435 (Intel RealSense D435) 데이터 획득 (0) | 2022.05.17 |
---|---|
RTX 3090 텐서플로우 개발환경 구축 (윈도우) & 텐서플로우 2.x에서 1.x코드 사용하기 & SubProcess ended with return code 오류 (0) | 2021.11.30 |
RTX 3090 파이토치 개발환경 구축 (윈도우) (0) | 2021.11.29 |
아나콘다, CMD 자주쓰는 명령어 모음 (0) | 2021.09.04 |
Miniconda + Pycharm 개발환경 구축하기 (0) | 2021.09.04 |
댓글