인프런 커뮤니티 질문&답변

자바웹님의 프로필 이미지
자바웹

작성한 질문수

ChatGPT 영어 상황극 채팅 서비스 만들기 (Feat. 파이썬/장고채널스)

[04/03] django-environ 라이브러리를 활용한 환경변수 로딩

환경변수 로딩이 안됩니다 ㅠㅠ

작성

·

736

0

안녕하세요 장고 환경변수 로딩하는 부분, 몇번 돌려보면서 확인했는데 계속 에러가 나오네요. 혹시 어떤게 잘못되었을지 알 수 있을까요.. 도와주세요..

(venv) C:\Users\user\Documents\django_chat>python manage.py shell

Python 3.10.9 | packaged by Anaconda, Inc. | (main, Mar 1 2023, 18:18:15) [MSC v.1916 64 bit (AMD64)] on win32

Type "help", "copyright", "credits" or "license" for more information.

(InteractiveConsole)

>>> from django.conf import settings

>>> settings.OPENAI_API_KEY

Traceback (most recent call last):

File "C:\Users\user\Documents\django_chat\venv\lib\site-packages\environ\environ.py", line 387, in get_value

value = self.ENVIRON[var_name]

File "C:\Users\user\anaconda3\lib\os.py", line 680, in getitem

raise KeyError(key) from None

KeyError: 'OPENAI_API_KEY'

The above exception was the direct cause of the following exception:

Traceback (most recent call last):

File "<console>", line 1, in <module>

File "C:\Users\user\Documents\django_chat\venv\lib\site-packages\django\conf\__init__.py", line 102, in getattr

self._setup(name)

File "C:\Users\user\Documents\django_chat\venv\lib\site-packages\django\conf\__init__.py", line 89, in _setup

self._wrapped = Settings(settings_module)

File "C:\Users\user\Documents\django_chat\venv\lib\site-packages\django\conf\__init__.py", line 217, in init

mod = importlib.import_module(self.SETTINGS_MODULE)

File "C:\Users\user\anaconda3\lib\importlib\__init__.py", line 126, in import_module

return bootstrap.gcd_import(name[level:], package, level)

File "<frozen importlib._bootstrap>", line 1050, in gcdimport

File "<frozen importlib._bootstrap>", line 1027, in findand_load

File "<frozen importlib._bootstrap>", line 1006, in findand_load_unlocked

File "<frozen importlib._bootstrap>", line 688, in loadunlocked

File "<frozen importlib._bootstrap_external>", line 883, in exec_module

File "<frozen importlib._bootstrap>", line 241, in callwith_frames_removed

File "C:\Users\user\Documents\django_chat\mysite\settings.py", line 134, in <module>

OPENAI_API_KEY=env.str("OPENAI_API_KEY")

File "C:\Users\user\Documents\django_chat\venv\lib\site-packages\environ\environ.py", line 212, in str

value = self.get_value(var, cast=str, default=default)

File "C:\Users\user\Documents\django_chat\venv\lib\site-packages\environ\environ.py", line 391, in get_value

raise ImproperlyConfigured(error_msg) from exc

django.core.exceptions.ImproperlyConfigured: Set the OPENAI_API_KEY environment variable

>>>

답변 2

0

이진석님의 프로필 이미지
이진석
지식공유자

보내주신 프로젝트 압축 파일을 살펴보니, .env 파일을 생성하지 않으신 것으로 보여집니다.

manage.py 파일이 있는 경로에 마침표로 시작하는 .env 파일을 생성하셨다면, 파일 저장을 아직 하지 않으셨을 수도 있구요. 아래 스크린샷에서 .env 파일 예시를 확인하실 수 있습니다.

image

확인해보시고, 댓글 부탁드립니다.

0

이진석님의 프로필 이미지
이진석
지식공유자

안녕하세요.

지금 프로젝트 폴더를 압축해서 me@pyhub.kr 메일로 보내주시겠어요?

이진석님의 프로필 이미지
이진석
지식공유자

지정 경로에 .env 파일이 없거나, .env 파일을 로딩하는 코드가 settings.py 에 없거나, 경로 지정이 잘 못 되었거나, 그 코드에 오류가 있거나 정도가 있을 수 있습니다.

프로젝트 젠처 코드를 보내주시면 확인해드리겠습니다. :-)

자바웹님의 프로필 이미지
자바웹
질문자

.env 파일을 manage.py와 동일한 경로로 넣으니 제대로 되었습니다. venv 안에만 있으면 되는 줄 알았습니다^^;;

정말 감사합니다~

이진석님의 프로필 이미지
이진석
지식공유자

잘 해결되어서 다행입니다.


BASE_DIR은 manage.py 파일이 있는 프로젝트 ROOT 폴더 경로이구요.

21 라인에서 BASE_DIR 밑에 .env 파일이 있는 것으로 예상했기 때문입니다.
그 경로에 파일이 있다면 파일을 읽어서 환경변수로서 로딩하고, 별 다른 액션을 취하지 않습니다.

다른 경로에 .env 파일이 있어도, 현재 코드에서는 다른 경로의 .env 파일을 로딩하는 코드가 없습니다.

image

그리고, 참고로 venv 폴더는 가상환경 폴더로서 그 안에는 가상환경 기본 파일 외에 다른 파일들(설정파일 등)을 절대 만들지 않습니다. 몇몇 강의들을 보면 가상환경 폴더 안에서 개발 소스코드를 두는 경우도 있는 데, 좋지 못한 접근입니다.

가상환경 폴더는 그 폴더 자체를 git 버전관리대상에서 제외하는 경우가 대부분입니다.

또 살펴보시고 질문 많이 남겨주세요.

화이팅입니다. :-)

자바웹님의 프로필 이미지
자바웹

작성한 질문수

질문하기