Tkinter로 데스크톱 애플리케이션을 개발한 뒤에는, Python이 설치되지 않은 환경에서도 실행할 수 있도록 단독 실행 파일 형태로 패키징(번들링)하는 것이 좋습니다. 이렇게 하면 애플리케이션을 휴대 가능한(portable) 형태로 배포할 수 있습니다. 다행히 Python 생태계에는 애플리케이션 코드와 필요한 모든 종속성을 하나의 실행 가능한 설치 파일로 압축·변환해 주는 다양한 패키지가 존재합니다.
운영체제별 추천 번들링 도구
- Windows — py2exe
- Linux — Freeze
- macOS — py2app
각 도구는 해당 운영체제에 맞는 실행 파일을 생성하며, 인터프리터와 사용된 라이브러리까지 함께 묶어 주기 때문에 별도의 Python 환경 없이 프로그램을 실행할 수 있습니다.
예제: Windows용 실행 파일 만들기
이번 예제에서는 화면에 "Hello World"를 출력하는 간단한 Windows 기반 Tkinter 애플리케이션을 py2exe로 번들해 보겠습니다.
먼저 메인 애플리케이션 파일(main_app.py)이 있는 동일한 디렉터리에 setup.py 파일을 생성합니다. 그다음 setup.py에서 메인 애플리케이션 파일명을 매개변수로 전달하여 빌드 설정을 구성합니다.
1. setup.py 작성
from distutils.core import setup import py2exe setup(console=['main_app.py'])
2. 빌드 명령 실행
명령 프롬프트(cmd)에서 아래 명령을 실행합니다.
python setup.py py2exe
빌드가 완료되면 동일한 디렉터리 안에 dist 폴더가 생성되며, 그 안에 main_app.exe라는 이름의 실행 파일이 포함되어 있습니다. 이 폴더에는 프로그램 실행에 필요한 모든 종속성(DLL, 라이브러리 등)도 함께 들어 있으므로, dist 폴더 전체를 배포하면 됩니다.
3. main_app.py 소스 코드
# tkinter 라이브러리 임포트
from tkinter import *
# tkinter 프레임 인스턴스 생성
win = Tk()
# 창 크기 설정
win.geometry("600x400")
def present():
Label(win, text="Hello World", font=('Times New Roman bold', 30)).pack(pady=10)
Button(win, text="Click Me", command=present).pack(pady=20)
win.mainloop()실행 결과
생성된 main_app.exe 파일을 실행하면 아래와 같이 버튼과 레이블이 배치된 창이 열립니다. "Click Me" 버튼을 클릭하면 "Hello World" 텍스트가 화면에 나타납니다.

마무리
이처럼 py2exe를 활용하면 몇 줄의 설정만으로 Tkinter 애플리케이션을 종속성까지 포함한 단독 실행 파일로 손쉽게 변환할 수 있습니다. macOS 사용자라면 py2app, Linux 사용자라면 Freeze 또는 PyInstaller를 활용해 같은 방식으로 배포용 패키지를 만들 수 있습니다.