파이썬(Python)

python-dotenv가 .env 파일을 찾는 방법

leebaro 2025. 6. 18.
728x90

python-dotenv 라이브러리의 load_dotenv() 함수는 기본적으로 현재 작업 디렉토리(current working directory)와 그 상위 디렉토리들을 탐색하여 .env 파일을 찾습니다.


load_dotenv()의 기본 동작

load_dotenv() 함수를 인자 없이 호출하면, 다음과 같은 순서로 .env 파일을 탐색합니다:

  1. 현재 스크립트가 실행되는 디렉토리(Current Working Directory, CWD): 예를 들어, /home/user/project/src에서 python my_script.py를 실행했다면, /home/user/project/src/.env를 먼저 찾습니다.
  2. 현재 작업 디렉토리의 상위 디렉토리들: CWD에서 .env 파일을 찾지 못하면, 그 부모 디렉토리, 그 부모의 부모 디렉토리... 이런 식으로 파일 시스템의 루트까지 거슬러 올라가며 .env 파일을 찾습니다.
  3. 처음으로 찾은 .env 파일을 로드합니다.

이러한 동작 덕분에 프로젝트의 루트 디렉토리.env 파일을 두는 것이 일반적인 관행이 됩니다. 예를 들어, 프로젝트 구조가 다음과 같을 때:

my_project/
├── .env           # 여기에 .env 파일이 있음
├── app/
│   ├── __init__.py
│   └── main.py
├── scripts/
│   └── run_script.py
└── requirements.txt
  • my_project/app/main.py 파일 내에서 load_dotenv()를 호출하더라도, my_project/.env 파일을 찾아서 로드합니다.
  • my_project/scripts/run_script.py에서 load_dotenv()를 호출해도 마찬가지입니다.

특정 .env 파일 경로 지정하기

만약 기본 탐색 경로가 아닌 특정 위치의 .env 파일을 로드하고 싶다면, load_dotenv() 함수에 파일 경로를 명시적으로 전달할 수 있습니다.

from dotenv import load_dotenv
import os

# 특정 경로의 .env 파일 로드
# 예시: './config/.env.production' 파일을 로드
load_dotenv(dotenv_path='./config/.env.production')

# 환경 변수 사용
api_key = os.getenv("MY_API_KEY")
print(f"API Key: {api_key}")

이 기능은 여러 환경별 .env 파일(예: .env.local, .env.development, .env.production)을 관리할 때 유용하게 사용됩니다. 이 경우, APP_ENV와 같은 환경 변수를 사용하여 어떤 .env 파일을 로드할지 동적으로 결정할 수 있습니다.


요약

python-dotenv는 편의를 위해 현재 작업 디렉토리부터 상위 디렉토리로 .env 파일을 탐색하지만, 필요한 경우 명시적인 경로를 지정하여 특정 .env 파일을 로드할 수도 있습니다. 프로젝트의 루트 디렉토리.env 파일을 두는 것이 가장 일반적이고 권장되는 방식입니다.

728x90