Django 프로젝트에서 설정 파일을 관리할 때 django-environ 라이브러리를 통해 .env 파일을 읽어들이곤 합니다. 하지만 운영체제에 따라 파일 인코딩이 다르게 동작할 수 있어 주의가 필요합니다.
파이썬에서 파일을 텍스트 모드로 열 때, encoding
인자를 지정하지 않으면 운영체제의 기본 인코딩을 사용합니다:
utf-8
입니다.cp949
입니다.대부분의 소스 파일은 utf-8
인코딩으로 작성되지만, .env
파일에 한글 주석이 포함된 경우 한글 Windows 환경에서 파일을 읽을 때 cp949
인코딩으로 처리됩니다. 이로 인해 UnicodeDecodeError
가 발생할 수 있습니다.
이 문제를 피하기 위해 그동안 .env
파일을 열 때 인코딩을 명시적으로 utf-8
로 지정해야 했습니다. 예를 들면:
# ...
import environ
env_path = BASE_DIR / ".env"
env = environ.Env()
if env_path.is_file():
with env_path.open(encoding="utf8") as f:
env.read_env(f, overwrite=True)
이렇게 매번 파일을 수동으로 열고 인코딩을 지정해야 했기 때문에 번거로움이 있었습니다.
django-environ
의 변화¶최신 버전의 django-environ
라이브러리는 기본 파일 인코딩을 utf-8
로 설정합니다. 즉, 이제 파일을 읽을 때 따로 인코딩을 지정하지 않아도 utf-8
이 적용됩니다.
# ...
import environ
env_path = BASE_DIR / ".env"
env = environ.Env()
if env_path.is_file():
env.read_env(env_path, overwrite=True)
.env
파일에 한글 주석이 있을 때, 엉뚱한 인코딩으로 디코딩하여 UnicodeDecodeError
발생.encoding="utf-8"
명시.django-environ
라이브러리에서 기본 인코딩이 utf-8
이므로 별도 설정 필요 없음.최신 버전을 사용하면 더 깔끔하고 편리하게 .env
파일을 관리할 수 있습니다.
django-environ
의 최신 버전을 사용하고 있는지 확인하세요:pip install --upgrade django-environ
댓글