ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Python 에서 환경변수(.env) 가져오기
    Programming/Python 2023. 6. 16. 12:05

    우리가 재사용성이 높거나, 비밀리에 보관이 되어야하는 변수들이 있는데 우리는 그것들을 환경변수로 만들어 관리를 한다.

    그리고 그것을 파일로 만들어놓은게 .env 파일인데

    Python 에서 이 파일을 읽어오는 방식이 대표적으로 3가지가 있다.

     

    1. python-dotenv
    2. python-decouple
    3. 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 을 사용할 것 같다.

Designed by Tistory.