Chapter 26. EXE 만들기

EXE 파일은 Windows에서 실행할 수 있는 프로그램 파일입니다. 파이썬으로 만든 프로그램은 보통 .py 파일로 실행하지만, 다른 사람에게 배포하려면 Python이 설치되어 있지 않아도 실행할 수 있도록 .exe 파일로 만드는 것이 좋습니다.
- Python 설치 없이 실행 가능
- 더블클릭으로 실행 가능
- 수강생이나 사용자에게 배포하기 편리
- GUI 프로그램을 일반 프로그램처럼 사용할 수 있음
예) member_app.py → member_app.exe
PyInstaller는 파이썬 프로그램을 EXE 파일로 변환해주는 도구입니다. Tkinter, SQLite, 이미지 파일 등을 포함한 프로그램도 EXE로 만들 수 있습니다.
명령 프롬프트에서 실행합니다.
pip install pyinstaller
pyinstaller --version
예제 파일: main.py
명령 프롬프트에서 main.py가 있는 폴더로 이동합니다.
cd C:\python_project
pyinstaller main.py
실행 후 다음 폴더가 생성됩니다.
- build
- dist
- main.spec
실행 파일 위치: dist/main/main.exe
여러 파일이 아닌 하나의 EXE 파일로 만들려면 --onefile 옵션을 사용합니다.
pyinstaller --onefile main.py
생성 위치: dist/main.exe
Tkinter GUI 프로그램은 검은색 콘솔 창이 함께 뜰 수 있습니다. 콘솔 창을 숨기려면 --windowed 옵션을 사용합니다.
pyinstaller --onefile --windowed main.py
또는
pyinstaller --onefile -w main.py
프로그램 아이콘을 넣으려면 .ico 파일을 준비합니다.
pyinstaller --onefile --windowed --icon=app.ico main.py
주의할 점은 PNG나 JPG가 아니라 ICO 파일을 사용해야 합니다.
이미지, DB 파일, 설정 파일 등을 함께 포함해야 할 때가 있습니다.
예)
project/
├── main.py
├── member.db
└── images/
└── logo.png
Windows에서는 --add-data 옵션을 사용합니다.
pyinstaller --onefile --windowed --add-data "member.db;." main.py
이미지 폴더 포함
pyinstaller --onefile --windowed --add-data "images;images" main.py
EXE로 만들면 파일 경로가 달라질 수 있습니다. 따라서 다음과 같은 함수를 사용하면 안전합니다.
import os
import sys
def resource_path(relative_path):
try:
base_path = sys._MEIPASS
except Exception:
base_path = os.path.abspath(".")
return os.path.join(base_path, relative_path)
이미지 사용 예
logo_path = resource_path("images/logo.png")
DB 파일 사용 예
db_path = resource_path("member.db")
EXE 파일을 만든 후 dist 폴더 안의 실행 파일을 사용자에게 전달하면 됩니다.
dist/main.exe 이 파일 하나만 전달하면 됩니다.
dist/main/ ├── main.exe ├── python.dll └── 기타 파일
폴더 전체를 압축해서 전달해야 합니다.
- 다른 PC에서 실행되는지 확인
- DB 파일 경로 확인
- 이미지 파일 포함 여부 확인
- 한글 파일 경로 문제 확인
- 백신 오탐 여부 확인
- Windows 버전 확인
- ① pyinstaller 명령어가 안 되는 경우
- ② 모듈을 찾을 수 없는 경우
- ③ 이미지가 안 나오는 경우
- ④ DB 파일을 못 찾는 경우
python -m PyInstaller --onefile main.py
py -m PyInstaller --onefile main.py
필요한 라이브러리가 설치되어 있는지 확인합니다.
pip install 라이브러리명
이미지 파일을 포함했는지 확인합니다.
--add-data "images;images"
코드에서는 resource_path()를 사용합니다.
SQLite DB 파일 경로를 확인합니다.
db_path = resource_path("member.db")
Tkinter 프로그램을 EXE로 만들기
pyinstaller --onefile --windowed --icon=app.ico main.py
이미지 폴더 포함
pyinstaller --onefile --windowed --icon=app.ico --add-data "images;images" main.py
DB 파일 포함
pyinstaller --onefile --windowed --icon=app.ico --add-data "member.db;." main.py
이미지와 DB 모두 포함
pyinstaller --onefile --windowed --icon=app.ico --add-data "images;images" --add-data "member.db;." main.py
회원관리프로그램/ ├── member_app.exe ├── 사용방법.txt └── sample_data/
사용방법.txt 예시
- member_app.exe를 실행합니다.
- 회원등록 버튼을 클릭합니다.
- 회원 정보를 입력합니다.
- 조회 버튼으로 회원 목록을 확인합니다.
- EXE 파일은 Windows에서 실행할 수 있는 프로그램 파일이다.
- PyInstaller를 사용하여 파이썬 프로그램을 EXE로 변환할 수 있다.
- --onefile 옵션으로 하나의 EXE 파일로 만들 수 있다.
- --windowed 옵션으로 콘솔 창을 숨길 수 있다.
- --add-data 옵션으로 파일을 포함할 수 있다.
- 배포 전 여러 확인 사항을 체크해야 한다.