■ PyInstaller 모듈을 사용해 TkInter GUI 프로그램을 배포하는 방법을 보여준다.
1. PyInstaller 모듈 설치 (미설치시)
1.1 명령 프롬프트를 실행한다.
1.2 명령 프롬프트에서
▶ 실행 명령
1 2 3 |
pip install pyinstaller |
2. 소스 코드 작성
▶ common/__init__.py
1 2 3 |
▶ common/graphics/__init.py
1 2 3 |
__all__ = ["shape", "circle", "rectangle"] |
▶ common/graphics/shape.py
1 2 3 4 5 6 7 8 |
class Shape: def __init__(self, canvas): self.canvas = canvas def draw(): pass |
▶ common/graphics/circle.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
from common.graphics.shape import * class Circle(Shape): def __init__(self, canvas, centerX, centerY, radius, outlineColor, fillColor): super().__init__(canvas) self.centerX = centerX self.centerY = centerY self.radius = radius self.outlineColor = outlineColor self.fillColor = fillColor def draw(self): self.canvas.create_oval(self.centerX - self.radius, self.centerY - self.radius, self.centerX + self.radius, self.centerY + self.radius, width = 2, outline = self.outlineColor, fill = self.fillColor) |
▶ common/graphics/rectangle.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
from common.graphics.shape import * class Rectangle(Shape): def __init__(self, canvas, x, y, width, height, outlineColor, fillColor): super().__init__(canvas) self.x = x self.y = y self.width = width self.height = height self.outlineColor = outlineColor self.fillColor = fillColor def draw(self): self.canvas.create_rectangle(self.x, self.y, self.x + self.width, self.y + self.height, width = 2, outline = self.outlineColor, fill = self.fillColor) |
▶ main.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
import os import sys from tkinter import * from common.graphics.circle import * from common.graphics.rectangle import * # 리소스의 상대적 경로를 절대적 경로로 변환한다. def getResourceFilePath(relativePath): basePath = getattr(sys, "_MEIPASS", os.path.dirname(os.path.abspath(__file__))) return os.path.join(basePath, relativePath) tk = Tk() tk.title("TestProject") tk.geometry("800x600") tk.iconbitmap(getResourceFilePath("./images/mars.ico")) # 실행 파일 내에서 아이콘 파일 리소스를 참조하기 위해서 getResourceFilePath 함수를 사용한다. tk.configure(bg = "lightgray") canvas = Canvas(tk, width = 400, height = 400, relief="solid", bd = 1, bg = "gold") canvas.pack() canvas.place(x = 200, y = 50) photoImage = PhotoImage(file = getResourceFilePath("./images/apple.png")) # 실행 파일 내에서 이미지 파일 리소스를 참조하기 위해서 getResourceFilePath 함수를 사용한다. def drawCircle(): canvas.delete("all") circle = Circle(canvas, 200, 200, 180, "blue", "green") circle.draw() def drawRectangle(): canvas.delete("all") rectangle = Rectangle(canvas, 50, 50, 300, 300, "blue", "green") rectangle.draw() def drawImage(): canvas.delete("all") image = canvas.create_image(2, 50, anchor = NW, image = photoImage) button1 = Button(tk, width = 10, text = "원", command = drawCircle) button1.pack() button1.place(x = 200, y = 460) button2 = Button(tk, width = 10, text = "사각형", command = drawRectangle) button2.pack() button2.place(x = 290, y = 460) button3 = Button(tk, width = 10, text = "이미지", command = drawImage) button3.pack() button3.place(x = 380, y = 460) tk.mainloop() |
▶ requirements.txt
1 2 3 4 5 6 7 8 9 10 |
altgraph==0.17.4 packaging==24.0 pefile==2023.2.7 pip==24.0 pyinstaller==6.6.0 pyinstaller-hooks-contrib==2024.5 pywin32-ctypes==0.2.2 setuptools==69.5.1 |
3 실행 파일 생성
3.1 명령 프롬프트를 실행한다.
3.2 명령 프롬프트에서 main.py 파일이 있는 디렉토리로 이동한다. 첨부 프로젝트 파일은 비주얼 스튜디오에서 파이썬 프로젝트를 생성하고 가상 환경을 설정했기 때문에 가상 환경을 활성하면 아래와 같은 명령 프롬프트 화면이 된다.
3.3 아래 명령을 실행해 배포 프로그램을 생성한다.
▶ 실행 명령
1 2 3 |
pyinstaller -F -w --add-data "./images/*:./images" -i "./images/mars.ico" -n TestProject main.py |
• -F : 1개의 실행 파일로 생성한다.
• -w : 콘솔 화면을 표시하지 않고 윈도우만 표시한다.
• –add-data : 리소스 파일이 포함된 디렉토리 경로나 파일 경로를 설정한다.
• -i : 아이콘 리소스 파일일 포함된 파일 경로를 설정한다.
• -n : 생성할 실행 파일명을 설정한다.
• main.py : 시작 스크립트 파일을 설정한다.
※ 위 명령을 실행하면 아래와 같이 디렉토리와 파일이 생성된다.
• build 디렉토리
• dist 디렉토리
• dist/TestProject.exe 파일
• TestProject.spec 파일