파이썬에서 환경 변수로 작업하기.

11553 단어
종종 소프트웨어를 개발할 때 다른 소프트웨어에서 정의된 값을 읽거나 이러한 변수를 직접 정의해야 할 필요성을 발견합니다! 이 기사는 그것에 대해 모두 이야기 할 것입니다.

전역 환경 변수에 액세스



os.environ 사용


os.environ 사전을 사용하여 환경 변수를 가져오고 설정할 수 있습니다. 환경 변수 값 얻기:

>>> import os
>>> os.environ["HOME"]
'/home/username'


환경 변수 값 설정:

>>> import os
>>> os.environ["FOO"] = "bar"
>>> os.environ["FOO"]
'bar'

os.environmapping 개체이므로 .pop()를 사용하여 os.environ에서 변수를 삭제할 수 있습니다.

>>> import os
>>> os.environ["FOO"] = "bar"
>>> print(os.environ.get("FOO"))
bar
>>> os.environ.pop("FOO")
'bar'
>>> print(os.environ.get("FOO"))
None


환경 변수가 존재하지 않으면 Python은 KeyError 를 발생시켜 이를 완화합니다. 환경 변수가 존재하지 않으면 os.environ.get()를 반환하는 None를 사용할 수 있습니다.

>>> import os
>>> bar = os.environ.get("BAR")
>>> print(bar)
None

os.environ.get()의 깔끔한 트릭은 기본값을 설정하는 것입니다. 변수가 존재하지 않으면 이 값이 반환됩니다. 기본값을 os.environ.get()의 두 번째 매개변수로 전달하여 이를 달성할 수 있습니다.

>>> import os
>>> bar = os.environ.get("BAR")
>>> print(bar)
None
>>> bar = os.environ.get("BAR", "bar")
>>> print(bar)
bar


os.getenv() 사용



이제 "os.environ.get()os.getenv()의 차이점은 무엇입니까?"라고 궁금해하실 수 있습니다. 대답은 단순히 차이가 없다는 것입니다. 성능 측면에서 두 기능은 비교적 유사하게 수행됩니다.

$ python3 -m timeit -s "import os" "os.environ.get('HOME')"
500000 loops, best of 5: 730 nsec per loop
$  python3 -m timeit -s "import os" "os.getenv('HOME')"
500000 loops, best of 5: 809 nsec per loop

os.getenv 의 사용법은 os.environ.get() 와 매우 유사하며 동일한 매개변수와 동작을 가집니다.

>>> import os
>>> bar = os.getenv("BAR")
>>> print(bar)
None
>>> bar = os.getenv("BAR", "bar")
>>> print(bar)
bar


.env 파일의 변수에 액세스



때로는 중요한 데이터를 저장하거나 구성 옵션만 저장하는 등 다른 프로그램을 방해하지 않고 자체 환경 변수를 작성하고 싶을 때가 있습니다. .env 파일이 필요합니다.

configparser를 사용하여 파일에 액세스



.env 파일과 함께 configparser를 사용할 때의 주요 단점은 configparser에 섹션이 필요하다는 것입니다. 즉, .env 파일은 다음과 같아야 합니다.

[SECTION1]
VAR_1=foo


변수에 접근하기:

>>> import configparser
>>> config = configparser.ConfigParser()
>>> config.read(".env")
>>> var_1 = config["SECTION1"]["VAR_1"]
>>> print(var_1)
"foo"


python-dotenv를 사용하여 파일에 액세스



python-dotenv .env 모듈을 사용하여 os 파일에서 환경 변수를 읽을 수 있게 해주는 Python 라이브러리입니다.

# Our .env file
FOO=bar



>>> import os
>>> from dotenv import load_dotenv
>>>
>>> load_dotenv()
>>> foo = os.getenv("FOO")
>>> print(foo)
"bar"

load_dotenv()는 기본적으로 현재 디렉토리 또는 상위 디렉토리에서 .env 파일을 검색한 다음 로드하여 프로젝트에서 액세스할 수 있도록 합니다. 그러나 디렉토리를 수동으로 지정할 수도 있습니다.

...
load_dotenv("path/to/.env")
...


사용 사례: 민감한 데이터 관리



API 토큰으로 작업 중이고 이를 코드에 하드코딩하고 싶지 않아 실수로 일부 버전 제어 소프트웨어에 푸시할 위험이 있다고 가정해 보겠습니다. 환경 변수를 사용하여 토큰을 저장합니다.

# .env
TOKEN=abcdefg12345



import os
from dotenv import load_dotenv

load_dotenv()
token = os.getenv("TOKEN")

# Do stuff with the token
...


결론



이 자습서에서는 os 모듈을 사용하여 호스트 환경 변수에 액세스하는 방법과 .envconfigparser를 사용하여 python-dotenv 파일에 저장된 변수에 액세스하는 방법을 배웠습니다.

추가 자료


  • Relevant Stack Overflow question
  • os.getenv
  • os.environ
  • 좋은 웹페이지 즐겨찾기