스터디/Python

python - exe 실행파일 만들기 (pyinstaller)

Dalmangyi 2025. 5. 7.

파이썬 코드를 윈도우용 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 이하)만 지원합니다.

 

 

 

 

댓글