Why?
vscode에서 python 개발을 할때 .env파일을 변경했음에도, os.getenv()를 진행하였을 때, 기존의 값이 적용됨.
문제 원인
python 개발을 진행할 때, vscode에서 venv를 이용하여, python main.py와 같이 terminal 실행을 자주 하는데, terminal에 최신 환경변수가 적용되지 않아서 발생함.
테스트 코드
import psycopg
from fastapi import FastAPI
import dotenv
import os
import uvicorn
def get_db_connection():
dotenv.load_dotenv()
DB_NAME = os.getenv("DB_NAME")
URL = f"postgresql://postgres:password@localhost:5432/{DB_NAME}"
print(URL)
conn = psycopg.connect(URL)
return conn
app = FastAPI()
@app.get("/test")
def test():
conn = get_db_connection()
if conn is None:
return "failed"
return "success"
if __name__ == "__main__":
uvicorn.run("main:app", host="localhost", port=8000, reload=True)
How?
1. Terminal 재실행
매번 python 실행시 vscode의 터미널을 재실행한다.(혹은 vscode debugging을 이용하면, 새로운 터미널을 매번 생성한다.)
2. dotenv.dotenv_values()를 이용한다.
dotenv_values는 .env파일을 읽어서 dict type으로 변경하는데, 이를 이용해서 개발한다.
config = dotenv.dotenv_values(".env")
DB_NAME = config["DB_NAME"]
Train of thought
- 처음에는 python의 __pycache__가 .env파일의 변경은 변경이 일어나지 않았다고 판단하는 건가? 라는 생각에 python -B를 사용했으나 증상은 동일했다.
'IT' 카테고리의 다른 글
| [python fastapi] Depends에 동적으로 parameter 사용하기 (0) | 2024.09.01 |
|---|---|
| [python] shallow copy, deep copy, pass by assignment (0) | 2024.08.31 |
| [TimescaleDB] timezone이 필요한 날짜 데이터 빠르게 select 하기 (0) | 2024.08.24 |
| [TimescaleDB documents] time_bucket() (0) | 2024.08.18 |
| [fastapi documents] OpenAPI operationId (0) | 2024.08.17 |