PyInstaller 리소스 누락: 파일 경로를 코드 기준으로 찾기

PyInstaller 배포에서 이미지나 설정 파일을 읽을 때는 현재 작업 폴더와 패키지 내부 파일 위치를 구분해야 합니다.

어떤 상황에서 적용하나요?

아래는 읽기 전용 리소스를 현재 모듈 파일의 위치를 기준으로 찾는 예제입니다. 실제 bundle에는 해당 파일이 데이터로 포함되어 있어야 합니다. 이 검사는 임시 폴더에서 경로 계산만 확인합니다.

검증 범위: 아래 코드는 외부 서비스에 요청하지 않는 로컬 예제입니다. 실제 서비스 연결은 별도로 검증해야 합니다.

최소 예제로 동작 확인하기

from pathlib import Path
from tempfile import TemporaryDirectory

def resource_path(module_file, name):
    return Path(module_file).resolve().parent / "assets" / name

with TemporaryDirectory() as folder:
    module = Path(folder) / "app.py"
    asset = resource_path(module, "logo.txt")
    asset.parent.mkdir()
    asset.write_text("sample", encoding="utf-8")
    assert asset.read_text(encoding="utf-8") == "sample"
    print(asset.name)

결과는 어떻게 확인하나요?

logo.txt가 출력됩니다. 배포할 때는 사용 중인 PyInstaller 버전의 add-data 또는 spec 설정으로 assets를 포함하고, 번들 안의 실제 상대 위치를 확인하세요.

실제 업무에 적용할 때 확인할 점

번들 내부 리소스와 사용자가 변경하는 설정은 다른 위치에 두어야 합니다. one-file 임시 해제 폴더에 수정 데이터를 저장하면 종료 후 사라질 수 있습니다. 누락 모듈은 hidden import가 필요한지 검토하되 모든 모듈을 한꺼번에 수집하는 설정부터 추가하지 마세요.

공식 자료와 다음 단계

관련 공식 문서에서 사용하는 버전의 기능과 제한을 확인하세요.

학습 경로: 업무 자동화 가이드 · 입력 오류 처리

작성: 로그 · 2026-10-17 수정: 확인되지 않은 경험담과 성능 보장 표현을 제거하고 예제·적용 조건·공식 근거를 보완했습니다.

댓글

이 블로그의 인기 게시물

API 키 저장 방법: 해싱과 암호화의 차이, Fernet 예제

파이썬 Google Sheets API 연동: 서비스 계정 권한과 읽기·쓰기

Pandas 결측치 처리: isna, fillna, dropna 선택 기준