[python 일반] [Python] pyinstaller] PyInstaller -i, --add-data로 아이콘(icon)을 포함하자

소스와 아이콘이 같은 폴더에 있을 때,
tkinter를 이용한 코드입니다.

import os

if os.path.isfile('foo.ico'):
    self.root.iconbitmap('foo.ico')

 

 

코드를 실행하면,
정상적으로 아이콘을 볼 수 있지만

파이 인스톨러로 만든 실행파일을 실행하면,
아이콘 대신 나뭇잎만 보입니다. :<  

 

 

onefile 옵션을 사용하지 않았을 때는
ico 파일을 새로 만들어진 폴더에 따로 복사하면
아이콘을 볼 수 있습니다. 

하지만, --onefile 옵션을 사용할 때는, 
(따로 복사할 수 없기 때문에)
실행 파일에 아이콘 파일을 포함해야 합니다. 

 

'--onefile'은,
실행에 필요한 파일과 폴더를 모아
하나의 '자동 실행 압축 파일'을
만드는 옵션입니다. 

이 자동 실행 압축 파일을 실행하면
임시 폴더에 압축을 푼 뒤
폴더 내 실행파일을 실행합니다.

이 임시 폴더의 위치가
고정되어 있지 않기 때문에
아이콘 파일을 복사하기 힘듭니다.  

 

빌드 시 --add-data 옵션을 이용하여
"<포함할_파일;저장될_위치>"를 설정해 두면 
실행 파일에 아이콘 파일을 포함할 수 있습니다. 

경축! 아무것도 안하여 에스천사게임즈가 새로운 모습으로 재오픈 하였습니다.
어린이용이며, 설치가 필요없는 브라우저 게임입니다.
https://s1004games.com

Mac OS에서는 ";" 대신 ":"을 사용해야 합니다. 

--add-data는 여러 번 사용할 수 있습니다.

자세한 것은 원문 링크를 참고하세요. 
https://pyinstaller.org/en/stable/usage.html#cmdoption-add-data

.\venv\Scripts\pyinstaller --onefile -w -i=foo.ico --add-data="foo.ico;." foo.py

소스 파일과 같은 위치에
아이콘 파일이 있는 상황이라
'.'으로 설정했습니다. 

-i 옵션의 아이콘
탐색기에서 보이는
exe 파일의 아이콘입니다.
gui 좌측 상단의 아이콘이 아닙니다.

압축 해제된 폴더에서 
실행파일이 실행되기 때문에
아이콘 파일의 위치를
정확하게 찾을 수 있도록 
소스코드도 수정합니다. 

import os

path = os.path.join(os.path.dirname(__file__), 'foo.ico')
if os.path.isfile(path):
    self.root.iconbitmap(path)

 

'__file__'은 현재 실행중인 파이썬 파일의 전체 경로를 의미합니다. 
os.path.dirname()는 전체 경로 중 파일명을 제거합니다. 
os.path.join()은 경로와 문자열(파일명)을 결합합니다. 

from os import path

print(__file__)  # C:\PyProjects\test\test.py
print(path.dirname(__file__))  # C:\PyProjects\test
print(path.join(path.dirname(__file__), 'foo.ico'))  # C:\PyProjects\test\foo.ico

 

PS) 요즘 nuitka도 핫하다는데.... 
https://nuitka.net/

 

[출처] https://comdoc.tistory.com/entry/PyInstaller-%EC%95%84%EC%9D%B4%EC%BD%98%EC%9D%84-%ED%8F%AC%ED%95%A8%ED%95%98%EB%8A%94-%EB%B0%A9%EB%B2%95

 

본 웹사이트는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
번호 제목 글쓴이 날짜 조회 수
87 [python 일반] 파이썬에서 도커 사용하기: 기초부터 배포까지 졸리운_곰 2024.12.01 410
86 [python 일반] 파이썬 디컴파일 방지 난독화 초간단 방법 file 졸리운_곰 2024.08.13 539
85 [python 일반] [Python] python 예제 - 프로그램 실행 위치 확인 방법 3종 - os.getcwd,... 졸리운_곰 2024.07.28 451
84 [python 일반] [Python] How to capture output of Python's interpreter and show in a Text widget? 졸리운_곰 2024.07.26 230
83 [python 일반] [Python] How to Fix Python’s “List Index Out of Range” Error in For Loops 졸리운_곰 2024.07.26 284
82 [python 일반] [Python] Python 리스트에 특정 값이 있는지 체크하기 졸리운_곰 2024.07.26 418
81 [python 일반] [Python] 원하는 시간마다 파이썬 자동 실행 file 졸리운_곰 2024.07.25 337
» [python 일반] [Python] pyinstaller] PyInstaller -i, --add-data로 아이콘(icon)을 포함하자 file 졸리운_곰 2024.07.19 428
79 [python 일반] [Python] pyinstaller : 파이썬 컴파일 시 코드 암호화 & 복호화 file 졸리운_곰 2024.06.10 374
78 [python 일반] ** Date형식을 String형식으로 변환 ** 졸리운_곰 2024.06.08 297
77 [python 일반] [Python] strftime과 strptime file 졸리운_곰 2024.06.07 377
76 [python 일반] How to Run a Periodic Background Task in Python 졸리운_곰 2024.06.07 324
75 [python 일반] *win32ctypes.pywin32.pywintypes.error when using pyinstaller in VS Code - Possible Virus/Trojan? 졸리운_곰 2024.06.07 453
74 [python 일반] 【Python】The 'pathlib' package is an obsolete backport of a standard library ・・・ 졸리운_곰 2024.05.30 318
73 [Python 일반] 파이썬 exe 파일 만들기 졸리운_곰 2024.05.30 307
72 [Python] 클립보드 무엇인가? Pyperclip을 통한 자동화 file 졸리운_곰 2024.05.06 364
71 [Python] PyQt와 PySide에 대한 잡설 file 졸리운_곰 2024.04.25 253
70 [python 일반] How to Update All Python Packages : 설치된 파이썬 패키지 모두 업데이트 하기 file 졸리운_곰 2024.03.16 604
69 [python, C++] Interfacing C++ and Python with the Python API : C++ 및 Python과 Python API의 인터페이스 file 졸리운_곰 2023.08.18 302
68 [python 일반] 파이참 에러 : Fatal Python error: init_stdio_encoding: failed to get the Python codec name of the stdio encoding file 졸리운_곰 2023.07.06 354
대표 김성준 주소 : 경기 용인 분당수지 U타워 등록번호 : 142-07-27414
통신판매업 신고 : 제2012-용인수지-0185호 출판업 신고 : 수지구청 제 123호 개인정보보호최고책임자 : 김성준 sjkim70@stechstar.com
대표전화 : 010-4589-2193 [fax] 02-6280-1294 COPYRIGHT(C) stechstar.com ALL RIGHTS RESERVED