-
Python 에서 환경변수(.env) 가져오기Programming/Python 2023. 6. 16. 12:05
우리가 재사용성이 높거나, 비밀리에 보관이 되어야하는 변수들이 있는데 우리는 그것들을 환경변수로 만들어 관리를 한다.
그리고 그것을 파일로 만들어놓은게 .env 파일인데
Python 에서 이 파일을 읽어오는 방식이 대표적으로 3가지가 있다.
- python-dotenv
- python-decouple
- pydantic 의 BaseSettings
이렇게 있다.
일단 예제로 쓸 .env 파일은 이렇게 생겼다.
SECRET_KEY=klajsdlkfjaaksldhjfowie API_KEY=asdjhflkjdioajdf908123jklqsd9a8sxd DATABASE_URL=postgres://admin:admin1234@localhost:5432/test
python-dotenv
설치
pip install python-dotenv # pip 버전 poetry add python-dotenv # poetry 버전
사용
from dotenv improt load_dotenv import os load_dotenv() # .env 파일을 읽어서 환경변수에 설정을 한다. # os를 통해서 현재 등록되어진 환경변수에 접근해서 가져온다.(일시적으로 등록이 되어있다) API_KEY=os.getenv("API_KEY") SECRET_KEY=os.getenv("SECRET_KEY") DATABASE_URL=os.getenv("DATABASE_URL")
이때 주의할 점은 환경변수에 등록을 시켜서 os로 가져오지만 해당 프로그램에서만 가져올 수 있다.
다른 곳에서는 가져오는 것이 불가능하다.
python-decouple
설치
pip install python-decouple # pip 버전 poetry add python-decouple # poetry 버전
사용
from decouple import conifg from dj_database_url import parse as db_url # 추가 라이브러리 API_KEY = config("API_KEY", cast=str) # 지정한 형변환을 사용할 수 있다. DATABASE_URL = config("DATABASE_URL" cast=db_url) SECRET_KEY = config("SECRET_KEY" cast=str)
python-dotenv 하고 다른 점은 os 에 환경변수에 등록되어지는 것이 아닌
decouple 라이브러리가 파일을 읽어서 데이터를 가지고 있는 것이다.
그리고 추가적으로 형변환과 .ini 파일도 지원한다.
Pydantic 의 BaseSettings
설치
pip install pydantic # pip 버전 poetry add pydantic # poetry 버전
사용
from pydantic import BaseSettings, PostgresDsn class Settings(BaseSettings): API_KEY: str SECRET_KEY: str DATABASE_URL: PostgresDsn # 자동 형변환이 일어난다 class Config: env_file = ".env" # env 파일위치, env 를 안넣는 경우 이미 설정되어진 환경변수를 가져온다 case_sensitive = True # 기본값 False, False 인 경우 lower_case 로 변경을 해버린다. settings = Settings() settings.API_KEY settings.SECRET_KEY settings.DATABASE_URL
다른 라이브러리와 비교되는 것은 BaseSettings 을 상속받아 Settings 를 만들고 거기에 Attribute를 명시해준다는 것이고 거기에 더해 타입까지 명시를 한다.
이렇게 하기만 하면 자동으로 형변환이 일어나서 손쉽게 사용할 수가 있다.
그리고 다른 라이브러리는 다른 파일에서는 환경변수를 가져올려면 해당 라이브러리를 다시 import 를 하거나 os 를 통해서 가져왔다면
Pydantic은 생성된 settings를 가져온다.
그래서 다른 곳에서도 가져오는 것이 편하고 IDE의 기능을 활용할 수 있어서 매우 편하다.
추가로 valdator 를 통해서 유효성 검증도 가능하다.
결론
그냥 간단하고 혼자하는 프로젝트를 한다면 셋 중 어느것을 사용해도 무관할 것 같다.
하지만 규모가 있는 프로젝트의 경우에는 Pydantic 을 사용하는 것이 코드로 설정을 설명하는 부분이 맘에 들기도 하고
사용성 측면에서도 매우 뛰어나 Pydantic 을 사용할 것 같다.
'Programming > Python' 카테고리의 다른 글
[Django] Quill Editor 적용하기 (0) 2023.07.06 [Bug] 동일한 이름을 가진 Library 가 꼬이는 경우 (0) 2023.06.16 [Django] DRF Nested Router (0) 2023.06.13 [Django] Serializer HiddenField 활용 (0) 2023.06.13 [Django] Django Proxy Model 을 활용한 방법 (0) 2023.06.13