Python 빌드한 프로그램에서 외부 경로의 파일 참조하기
프로그램을 만들다보면 코드 외부에서 바꿀 수 있도록 해줄 필요가 있는 환경변수값이 필요하기도 합니다.
이 경우 .env 라는 secret envrionment 텍스트문서를 만들어서 특정 변수들을 저장해두었다가 프로그램을 실행하면 코드가 해당 파일을 읽어서 사용합니다.
또 프로그램을 만들다 보면 특정 패키지는 외부 패키지를 불러와서 사용하도록 되어있는 경우가 있습니다. 대표적으로 동영상 만들 때 사용하는 ffmpeg 모듈입니다. 보통 윈도우에서 사용하게 되면 ffmpeg.exe 등을 다운로드 받아서 환경변수에 등록해두고 사용하죠.
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 파일들 놓아두기.
다음은 제가 만든 프로그램입니다.~
[영상]

