포스트

Python load_dotenv 에서 헤맨 경험 공유.

.env 환경변수 값을 여러 개 불러오는 과정에서 cursor의 도움을 받았다.

몇 번 시행착오를 거치던 중에 cursor가 powershell에 자체적으로 환경변수를 등록해버리는 명령어를 실행했던 것 같다.

1
$env:CORS_ORIGINS = "http://localhost:3000,http://localhost:3001"

이게 등록된 이후로는 아무리 .env에 선언된 값을 변경해도 요지부동으로 변하지 않았다.

나의 경우는 secret.env에 진짜 비밀 키들을 넣어놓고, .env에는 일반 키들을 넣어놨다. 그런 다음에 .env를 읽을 때에는 override=False로 했었다.

이 문제로 인해 cursor에게 수많은 돈을 지불하고, chatgpt와도 대화하다가, 뺑뺑이만 돌게 됬다. 그러다가 chatgpt4o가 아닌 chatgpt4.1에게 물어봐도 답이 안나왔는데, 몇 번 원인을 추측하다 보니 답이 나왔다.

“뭔가 어디 메모리에 고정되어 있는 것 같다는.”

그래서 override=True로 하니 일단 임시방편으로 해결되었다.

load_dotenv 에서 override = True로 두지 않으면, 파이썬 실행 전 혹은 실행 초기에 설정되었던 값이 그대로 유지되어서 아무리 .env 파일을 수정해도 수정한 값으로 반영이 안됐다.

.env가 파이썬 실행 인스턴스 내부 메모리 외에, 프로그램이 종료되고도 메모리에 저장되어 있을 수 있는 값이었는지를 몰랐다.

딕셔너리 형태로 저장되어 있는데,

시스템 전체 환경변수도 아니고, 프로그램 내부도 아니고, 파워쉘 세션 메모리에 남아있다.

따라서, 혹시나 실수로 위와 같이 어떤 변수를 cmd 내에서 등록하지 않았나 곰곰히 떠올려보자.

이 경우, 등록했던 변수를 제거해주면 된다.

1
python -c "import os; print(os.environ.get('CORS_ORIGINS'))"
1
Remove-Item Env:CORS_ORIGINS                                     
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.