- Published on
os.environ과 load_dotenv
파이썬을 통하여 프로그램을 개발하고 배포할 때, 환경변수를 많이 사용한다.
파이썬 프로그램안에서 환경변수를 불러올 때 주로 os.getenv()
혹은 os.environ.get()
등의 함수를 활용하여 환경변수, 특히 .env
파일의 사용자가 설정한 중요한 설정값들을 불러온다.
위 환경변수를 불러오기 위해서는 load_dotenv()
함수를 사전에 먼저 호출하고 os
모듈 함수들을 사용하는데, 두 함수의 각각의 역할과 어떤 상관관계가 있을까?
아래에는 각 모듈, 함수들의 역할을 정리하고 정확한 순서를 파악해보자.
os.environ
우선 파이썬을 통해 환경변수에 접근하기 위해서는 내장 모듈인 os
모듈을 불러와야 한다.
>>> import os
os
모듈 속 다양한 속성 중 environ
속성을 불러와서 환경변수에 접근할 수 있다.
>>> os.environ[PATH]
/usr/local/bin:/usr/local/sbin:/System/Cryptexes/App/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin:...
사용법
위 코드에서 본 []
를 활용하여 직접 불러오는 방식을 포함하여, os.environ
을 통하여 환경변수를 불러오는 방법은 3가지가 있다.
- os.environ["KEY_NAME"]
- os.environ.get("KEY_NAME")
- os.getenv("KEY_NAME")
environ
및 getenv()
를 통해 불러오는 값은 모두 Key-Value
인 딕셔너리 형식으로 제공된다.
만약 설정해준 적 없는 CUSTOM_KEY
값을 environ[]
을 통해 불러오면 어떤 일이 생길까?
>>> os.environ['CUSTOM_KEY']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<frozen os>", line 679, in __getitem__
KeyError: 'CUSTOM_KEY'
파이썬의 딕셔너리가 없는 키값을 참조할 때 발생되는 KeyError
가 발생한다. 이러한 에러를 보완하기 위한 함수로 os.environ.get()
과 os.getenv()
함수가 존재한다.
environ.get()과 getenv()
os.environ.get()
과 os.getenv()
함수에서 없는 값을 참조할 때, None
을 리턴한다.
>>> os.environ.get('CUSTOM_KEY') is None
True
함수내의 2번째 인자로 기본값을 같이 넘겨 초기값을 설정할 수 있다.
>>> os.environ.get('CUSTOM_KEY', 'something')
'something'
반대로 새로운 환경변수는 어떻게 파이썬에서 설정할 수 있을까?
환경변수 등록하기
결론부터 얘기하자면 os.environ
을 활용하여 간편하게 시스템에 직접 환경변수를 설정하는 방법은 없다.
Unix 계열에서는 export 명령어, Windows 계열에서는 SET 명령어를 사용하여 파이썬 프로그램이 구동되기 이전에 정의를 하고, 해당 값을 조회하는 방법은 가능하다. 다음의 코드를 살펴보자.
$ export CUSTOM_KEY=zzz
$ python
Python 3.13.1 (main, Dec 3 2024, 17:59:52) [Clang 16.0.0 (clang-1600.0.26.4)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> os.getenv('CUSTOM_KEY')
'zzz'
그러나 구동중인 파이썬으로 현재 시스템의 환경변수를 임의로 설정하는 방법은 다음의 경우 가능하다.
winreg
모듈을 활용하여 Windows 환경에서의 환경변수 등록.bashrc
파일을 직접 접근하여 Unix계열(MacOS, Linux 등등) 환경에서의 환경변수 등록
주로 $PATH
, $PWD
등과 같이 사전에 있는 환경변수 값들은 즉시 불러 올 수 있지만, 개발자가 임의로 지정하는 $AWS_SECRET
등의 변수는 아직 값이 없다. 애초에 키값도 아직 환경에 설정되어 있지 않을 것이다. 이러한 커스텀 변수값들을 등록시켜주는 함수가 바로 아래의 load_dotenv()
함수를 활용하여 가능하다.
load_dotenv
python-dotenv
라이브러리는 개발자가 환경변수를 쉽게 관리할 수 있게 도와준다. 설치하는 명령어는 다음과 같다.
$ pip install python-dotenv

dotenv
객체 내부에는 다양한 함수가 존재하는데, 이 중 가장 많이 사용되는 함수는 load_dotenv()
함수로서, 프로젝트 폴더 내부의 .env
파일을 읽고 내부 값들을 파싱, os.environ
에 딕셔너리 형태로 등록하는 역할을 수행한다.
.env 파일을 활용하여 원하는 환경변수를 일괄 작성하고, 작성한 값들을 load_dotenv()
를 활용하여 일괄 등록, 마지막으로 os.environ
을 활용하여 원하는 값을 원하는 곳에 호출하여 python코드 내에서 활용 가능하다.
TL;DR
os.environ
은 시스템의 환경변수만을 읽어 오는 함수dotenv
의load_dotenv()
함수는 프로젝트의.env
파일을 읽어 키-값들을 환경변수로 등록하는 기능을 수행함load_dotenv()
를 한 후, 필요한 곳에os.getenv()
함수를 통하여 환경변수 값을 주입하자