'프로그래밍/파이썬'에 해당되는 글 1건

Pyinstaller는 파이썬 코드를 독립 실행형 실행 파일로 변환하기 위한 라이브러리입니다.

프로그램을 제작하면서 사용되는 다양한 이미지나 파일을 포함하는 방법을 알아보겠습니다.

 

우선 --ondir 모드에서 파일을 추가하는 방법을 알아보겠습니다.

 

--onedir 모드에서 파일을 추가하는 것은 비교적 간단합니다. 이미지 파일을 py 스크립트와 같은 경로에 배치하면 Pyinstaller가 자동으로 출력 경로에 포함시킵니다.

 

testApp
|-main.py
|-image.png

 

이렇게 포함된 파일은 --add-data 옵션을 사용하여 경로 상의 파일을 빌드에 포함시킬 수 있습니다. 루트 경로의 다른 폴더에 있는 파일을 포함시키고 싶은 경우 아래와 같이 포함하면 됩니다.

 

pyinstaller --onedir --add-data="image.png;." main.py

 

문자열 끝의 '.'은 루트 폴더에 위치시키겠다는 뜻입니다. 또한 ';'는 소스 및 대상 경로 뒤에 있는 구분 기호입니다.

리눅스의 경우 ';'(세미콜론) 대신 ':'(콜론)을 사용해야 할 수도 있습니다.

 

pyinstaller --onedir --add-data "images/image.png;images/" main.py

 

이 경우 Pyinstaller에게 images 서브 경로에 위치한 image.png 파일을 포함시켜 출력 경로의 images라는 이름의 서브 경로에 배치하라는 의미입니다.

 

 

다음으로는 --onefile 모드에서 파일을 추가하는 방법을 알아보겠습니다.

 

우선 onefile 모드에 대해서 간단히 알아보겠습니다. 이미지 파일을 포함한 모든 파일을 하나의 실행 파일로 묶는 모드를 말하는데요, 실행 파일이 실행되면 번들 파일을 임시 경로에 추출하고 거기서 응용프로그램이 실행되는 구조입니다.

 

이 언패킹 과정에서 시간이 걸리기 때문에 onedir 모드에 비해서 다소 느릴 수도 있습니다.

 

프로그램 어딘가에서 "banner.png" 파일이 사용되며 이미지가 파이썬 스크립트와 같은 경로에 위치한다고 가정하겠습니다. 이후, 아래 코드와 같이 작성하고 프로그램을 실행하면 이미지가 출력된 것을 확인할 수 있습니다.

 

banner = tkinter.PhotoImage(file = "banner.png")

bannerPanel = tkinter.Label(window, image = banner)
bannerPanel.pack()

 

이후 pyinstaller를 통해 실행 파일을 생성해보겠습니다.

 

pyinstaller -w -F --onefile --add-data="banner.png;." main.py

 

빌드 후 프로그램을 실행하면 아래와 같이 banner.png 파일을 찾을 수 없다고 합니다.

 

 

 

이 때, 아래의 함수를 추가하여 경로를 가져오면 정상적으로 이미지가 출력되는 것을 확인할 수 있습니다.

 

def resource_path(relative_path):
    base_path = getattr(sys, '_MEIPASS', os.path.dirname(os.path.abspath(__file__)))
    return os.path.join(base_path, relative_path)
    
banner = tkinter.PhotoImage(file = resource_path("banner.png"))

bannerPanel = tkinter.Label(window, image = banner)
bannerPanel.pack()

 

 

참조 : https://coderslegacy.com/add-image-data-files-in-pyinstaller-exe/#google_vignette

블로그 이미지

NIA1995

,