파이썬 코드를 윈도우용 exe로 만들어주는 툴은 많지만
생각보다 인기가 없는 분야기 때문에 툴들이 관리가 안되어 있긴합니다.
수많은 툴중에서 그나마 관리가 되고 있는
pyinstaller를 통해서 쉽게 exe파일을 만들 수 있습니다.
Bat파일로 관리
실행하기 편하도록 bat파일을 만들어서 미리 적어두면 매우 편리합니다.
pyinstaller -n cursor-overlay^
--onefile^
--windowed^
--icon="images/icon.ico"^
--add-data="images;images"^
--add-data="fonts/Pretendard-Regular.ttf;fonts"^
--add-data="C:\Users\[UserName]\anaconda3\Lib\site-packages\tkextrafont;tkextrafont"^
--upx-dir C:\upx-5.0.0-win64^
main.py
pyinstaller를 이용해서 exe를 만들면 좋은 장점
1. 빌드 편리 (의존성 처리)
- pip를 통해 설치된 수많은 모듈중에서 프로젝트에서 사용된 모듈을 잘 선택해서 exe파일로 만들어줍니다.
2. 리소스 관리
- 리소스 파일들도 exe파일에 포함되게 설정하면(--onefile flag),
실행될때는 C:\Users\[사용자이름]\Appdata\Local\Temp어쩌구\*.*
일시적인 폴더가 생성되면서 거기에 수많은 파일들이 복사가 되면서 실행됩니다.
3. 멀티플랫폼
- 윈도우 뿐만아니고, 다른 os도 같이 빌드가 가능합니다 (하지만 전 안해봤어요 ㅋㅋ)
pyinstaller 단점
1. 과도한 용량
- 사용자에게 python 설치하고 exe 실행하세요~ 할 수도 없는 상황이니..
간단한 프로그램도 python 인터프리터가 포함되어야 하기 때문에 기본적으로 용량이 50메가가 넘어가게됩니다.
화면 트래킹을 하는 500줄 짜리 간단한 프로그램을 만들었는데, exe파일을 270MB정도가 나옵니다....
MFC나 C#을 이용해서 개발했을땐 13MB가 되는거에 비해 엄청난 차이 입니다.
2. 느린 구동속도
- python 기반이다보니 어쩔 수 없이 인터프리터를 이용하게 되어서 초기 구동시 속도가 느릴 수 있습니다.
3. 특수 라이브러리에 대해서 추가 작업 필요
- pyinstaller가 프레임워크는 아니다보니, 간혹 특정 라이브러리 처리를 해줘야 합니다.
4. 리소스 경로 처리
- 실행파일을 만들때, add-data flag를 줘서 폴더나 파일, 또는 모듈(라이브러리)까지 직접 첨부해줘야합니다.
그리고 디버깅 상태와 다르게 실행파일로 바뀌고 나면 리소스의 경로가 달라져서 별도의 함수를 통해서 경로를 접근하는걸 추천합니다.
# 사용 예시
DEFAULT_APP_ICON = "images/icon.ico" # 기본 아이콘
self.tkRoot.iconbitmap(resource_path(DEFAULT_APP_ICON))
# 상대경로를 찾아주는 함수
import os
import sys
def resource_path(relative_path):
try:
abspath = sys._MEIPASS
except Exception:
abspath = os.path.abspath(".")
return os.path.join(abspath, relative_path)
5. 디버깅이 어렵습니다.
- 빌드 되고난 후니까 당연히 콘솔로만 printf를 출력해서 보는 방법밖에 없습니다. (더 찾으면 방법이야 있겠지만...)
6. 난독화 미제공
- 난독화를 제공하지 않아서 별도의 난독화를 써야합니다.
7. 압축도구 미제공
- 빌드 압축도 제공되지 않기 때문에, upx와 같은 별도의 압축으로 빌드 크기를 줄이는 도구를 이용해야 합니다.
https://github.com/upx/upx 에서 운영체제에 맞는 릴리즈 버전을 받으시고, --upx-dir flag를 이용해서 upx가 설치된 경로를 설정해야만 pyinstaller 사용할때 적용이 됩니다.
다른 대안
- cx_freeze, nuitka, py2exe가 있지만, 대부분 오래된 python 버전(3.8 이하)만 지원합니다.
'스터디 > Python' 카테고리의 다른 글
Python Moviepy - 코딩으로 동영상 만들기 (0) | 2023.03.27 |
---|---|
Python moviepy audiofileclip error. noise. (0) | 2023.02.12 |
Python 설치/삭제 명령어 + 버전 (0) | 2023.01.24 |
Python 비동기 asyncio 사용기 + bs4(파싱) (0) | 2022.09.14 |
Python 개발에서 쓸만한 코드 모음 (0) | 2022.07.24 |
댓글