PyInstaller는 작성한 Python 스크립트를 실행파일 (*.exe)으로 만들 수 있다.
몇 번 GUI 프로그램으로 만들다보니 사용해본 옵션과 시행착오를 정리하려고 한다.
본 글은 pyinstaller의 홈페이지인 다음을 참고한다.
https://pyinstaller.org/en/stable/
설치 방법
다음과 같이 pip 를 통해 설치한다.
pip installer pyinstaller
기본 사용 방법
Windows Powershell 등에 다음 명령어를 입력한다.
pyinstaller main.py # Method 1
python -m PyInstaller main.py # Method 2
실행 파일 생성 옵션
아래 옵션을 명령에 추가하여 사용할 수 있다.
1) -F, --onefile
단일 실행파일로 출력하는 옵션
2-1) -w, --windowed, --noconsole
실행파일을 켰을 때, 콘솔 창을 띄우지 않는다.
2-2) -c, --console, --nowindowed
실행 파일을 켰을 때, 콘솔 창을 띄운다. 해당 옵션이 기본이다.
3) -i [ICON_FILE_NAME].ico, --icon=[ICON_FILE_NAME].ico
실행 파일의 아이콘을 지정하는 옵션. --add-data와 같이 사용해서 아이콘을 실행 파일에 포함시켜주는 것이 좋다.
4) -n [OUTPUT_FILE_NAME].exe
출력할 실행파일의 이름을 결정한다.
5) --add-data="SRC;DEST"
아이콘이나 포함할 이미지 파일의 위치를 추가한다., 중복해서 다른 위치도 추가할 수 있다.
6) --collect-submodules="[MODULE_NAME]"
PyInstaller가 묶어서 실행파일을 만들때 인식하지 못해서 안넣은, 필요한 특정 패키지를 추가해준다.
7) --hidden-import="[MODULE_NAME]"
Python 코드에 없어서 Pyinstaller가 인식하지 못한 모듈을 추가한다.
빌드 팁
1) 배포 전엔 콘솔 창을 띄워서 디버깅 용으로 활용
개인적인 추천이다.
2) 실행 파일 가볍게 만드는 방법
conda에서 만들지 말고, 필요한 패키지만 있는 환경을 구축해서 만든다.
3) NoModuleNamed 에러
비슷하게 비행체 로그 파일 (*.bin)을 csv으로 변환하는 mavlogdump 수정 함수 게시글을 보다보면, 코드 상에서 pymavlink.dialect 들이 나타나있지 않으나, 코드 실행 중에 이를 사용한다. 이러한 문제 때문에 해당 함수를 import 한 코드를 실행파일로 만들면 NoModuleNamed 에러가 발생한다.
그래서 다음과 같이 --hidden-import 옵션으로 추가하여 다음과 같이 명령을 구성한다.
python -m PyInstaller log_viewer.py -F -n Fast_LogMaker.exe --add-data="*.ico;./" ^
--icon=symbol_color_32.ico ^
--collect-submodules=lxml --collect-submodules=future^
--hidden-import=pymavlink.dialects.v10 ^
--hidden-import=pymavlink.dialects.v10.ardupilotmega ^
--hidden-import=pymavlink.dialects.v20 ^
--hidden-import=pymavlink.dialects.v20.ardupilotmega ^
4) 콘솔 창 없이 빌드 시에 윈도우 디펜더에서 Trojan 으로 잡아버리는 현상 [2]
pip 으로 설치할 때, 미리 빌드된 pyinstaller을 받아오기 때문이라 한다.
github에서 pyinstaller 파일을 받아서 직접 개발환경에 맞게 빌드해야한다고..
실행파일 만들기 실습
만들었던 파이썬 GUI 코드 중에 blit를 만든 게시글이 있다. 다음 글들을 조합해서 만들어보자.
실습의 요약은
- GUI 프로그램을 하나의 실행파일로 만들고
- 아이콘 경로를 추가하고 아이콘을 표시해준다.
- 콘솔 창을 띄우도록 해둔다.
필요한 패키지를 설치하는 명령어는 다음과 같다.
pyqt5에 비해 상업적 이용이 가능하여 완화된 라이센스를 가진 pyside6을 이용한다.
pip install matplotlib pyside6 pypubsub pyinstaller
아이콘은 아래 주소에서 가져왔다.
https://superawesomevectors.com/graph-flat-icon/
1. 다음을 다운로드 받아서 같은 폴더에 둔 후에
2. 다음 명령을 입력해보자.
pyinstaller gui_blit.py -F -n graph_maker.exe --add-data="*.ico;./" --icon=icon.ico
3. 당 폴더의 dist 폴더를 들어가면 단일 파일로 실행 파일이 생성되어있는 것을 볼 수 있다.
또한 실행파일의 아이콘과, 실행 시 프로그램의 아이콘이 바뀌어있는 것을 볼 수 있다.
이를 다른 곳에 옮겨도 실행이 되며, 만약 오류가 난다면 콘솔 파일에서 오류를 확인하여 수정할 필요가 있다.
Reference
[1] https://booiljung.github.io/technical_articles/mavlink/pyinstaller_with_pymavlink.html
[2] https://uipath.tistory.com/377#google_vignette
** EOF **
'SW' 카테고리의 다른 글
다익스트라 알고리즘 (Dijkstra Algorithm) 정리와 구현 (0) | 2024.06.08 |
---|---|
비행체 로그 파일 (*.bin)을 csv으로 변환하는 mavlogdump 수정 함수 (0) | 2024.04.18 |
[PyQt5] 중복된 띄어쓰기를 1개로 치환해주는 GUI 프로그램 (0) | 2024.02.27 |
Ardupilot 로그 파일 변환하기 (bin, tlog -> csv) (0) | 2024.02.22 |
임베디드 코드에서 C++ 사용하는 방법 찾아보기 (0) | 2023.10.09 |