포스트

Python 빌드한 프로그램에서 외부 경로의 파일 참조하기

프로그램을 만들다보면 코드 외부에서 바꿀 수 있도록 해줄 필요가 있는 환경변수값이 필요하기도 합니다.

이 경우 .env 라는 secret envrionment 텍스트문서를 만들어서 특정 변수들을 저장해두었다가 프로그램을 실행하면 코드가 해당 파일을 읽어서 사용합니다.

또 프로그램을 만들다 보면 특정 패키지는 외부 패키지를 불러와서 사용하도록 되어있는 경우가 있습니다. 대표적으로 동영상 만들 때 사용하는 ffmpeg 모듈입니다. 보통 윈도우에서 사용하게 되면 ffmpeg.exe 등을 다운로드 받아서 환경변수에 등록해두고 사용하죠.

https://www.ffmpeg.org/

FFmpeg A complete, cross-platform solution to record, convert and stream audio and video. Download Converting video and audio has never been so easy. $ ffmpeg -i input.mp4 output.avi Discover more News September 30th, 2024, FFmpeg 7.1 “Péter” FFmpeg 7.1 “Péter” , a new major release, is now available! … A complete, cross-platform solution to record, convert and stream audio and video. Download Converting video and audio has never been so easy. $ ffmpeg -i input.mp4 output.avi Discover more News September 30th, 2024, FFmpeg 7.1 “Péter” FFmpeg 7.1 “Péter” , a new major release, is now available! …

이런 외부 텍스트파일이나 외부 실행파일을 빌드된 python 응용프로그램에서 참조하려면 조금의 추가 코드가 필요합니다.

다음과 같습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# distribution.py

import os
import sys


def get_base_path(__file__):
    """에디터 실행과 exe 실행 모두 호환되는 기본 경로 반환"""
    if getattr(sys, "frozen", False):  # PyInstaller로 빌드된 실행 파일인지 확인
        return os.path.dirname(sys.executable)  # exe가 있는 폴더
    return os.path.abspath(os.path.dirname(__file__))  # Python 스크립트가 있는 폴더


def register_binary_path(base_path):
    """exe 환경일 경우 환경 변수 PATH에 바이너리 경로 추가 (폴더 없으면 생성)"""
    if getattr(sys, "frozen", False):  # PyInstaller로 빌드된 실행 파일인지 확인
        binary_path = os.path.join(base_path, "bin")

        # ✅ 폴더가 없으면 자동으로 생성
        os.makedirs(binary_path, exist_ok=True)

        # ✅ 환경 변수 PATH에 추가
        os.environ["PATH"] += os.pathsep + binary_path

1
2
3
4
base_path = get_base_path(__file__)  # 실행 환경에 맞는 기본 경로 가져오기
register_binary_path(base_path)  # 환경 변수 PATH에 bin 바이너리 경로 추가
resources_path = os.path.join(base_path, "resources", "하위폴더", "하위하위폴더")

  • “프로젝트 경로/bin” 경로 내 외부 참조할 exe 파일들 놓아두기.

sticker

다음은 제가 만든 프로그램입니다.~

[영상]

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.