반응형

파이썬, FastAPI, .env 환경변수 설정 정보 가져오기

 

글. 수알치 오상문

 

파이썬에서는 실제 환경변수 뿐만 아니라 환경변수를 파일로 저장하고 그 값을 환경변수처럼 사용할 수 있습니다.

 

먼저, python-dotenv 패키지를 설치합니다.

pip install python-dotenv

 

".env"라는 텍스트 파일을 생성하고 아래처럼 환경변수로 사용할 내용을 작성하여 저장합니다.

API_KEY=dlkawkdfsdhfkjsd
MY_ID=user
MY_PW=1234
DOMAIN=example.org
ADMIN_EMAIL=admin@${DOMAIN}
ROOT_URL=${DOMAIN}/app

 

 

일반 파이썬 코드에서도 사용 가능하지만, 여기서는 FastAPI에서 해당 환경변수 값을 읽어와서 돌려주는 API 예제를 다룹니다. 당연하지만 FastAPI 설치되어 있어야 합니다. ( pip install fastapi[all] )

 

from fastapi import FastAPI
import os
from dotenv import dotenv_values, load_dotenv
load_dotenv()  # .env 파일 로드

app = FastAPI()

# 방법 1
API_KEY = os.getenv("API_KEY")
MY_ID = os.getenv("MY_ID")
MY_PW = os.getenv("MY_PW")
DOMAIN = os.getenv("DOMAIN")
ADMIN_EMAIL = os.getenv("ADMIN_EMAIL")  
ROOT_URL = os.getenv("ROOT_URL")

# 방법 2
config = dotenv_values(".env")
API_KEY2 = config.get("API_KEY") 
MY_ID2 = config.get("MY_ID") 
MY_PW2 = config.get("MY_PW") 
DOMAIN2 = config.get("DOMAIN") 
ADMIN_EMAIL2 = config.get("ADMIN_EMAIL")
ROOT_URL2 = config.get("ROOT_URL") 


@app.get("/")
async def root():
    return {"message": "Hello World"}

@app.get("/env")
async def env():
    return {f"API_KEY: {API_KEY}",
            f"MY_ID: {MY_ID}",
            f"MY_PW: {MY_PW}",
            f"DOMAIN: {DOMAIN}",                
            f"ADMIN_EMAILD: {ADMIN_EMAIL}",
            f"ROOT_URL: {ROOT_URL}", }

@app.get("/env2")
async def env2():
    return {f"API_KEY: {API_KEY2}",
            f"MY_ID: {MY_ID2}",
            f"MY_PW: {MY_PW2}",
            f"DOMAIN: {DOMAIN2}",                
            f"ADMIN_EMAILD: {ADMIN_EMAIL2}",
            f"ROOT_URL: {ROOT_URL2}", }


if __name__ == "__main__":
    print("RUN Type 1: uvicorn main:app")  # 127.0.0.1:8000  
    print("RUN Type 2: uvicorn main:app --host 127.0.0.1 --port 80 --reload")  # 127.0.0.1:80  
    print("RUN Type 3: uvicorn main:app --host 127.0.0.1 --port 80")           # 127.0.0.1:80
    print("RUN Type 4: [Windows] python -m uvicorn main:app --reload --host 0.0.0.0 --port 80") 
    print("RUN Type 5: [Linux &] python3 -m uvicorn main:app --reload --host 0.0.0.0 --port 80")

 

콘솔(cmd) 화면에서 실행합니다. 

uvicorn main:app --host 127.0.0.1 --port 80 --reload

 

[화면] 웹브라우저에 127.0.0.1/env로 호출한 결과

 

[화면] 웹브라우저에 127.0.0.1/env2로 호출한 결과 (env1과 같은 결과)

 

 

반응형

+ Recent posts