본문 바로가기
개발일지/Django

Django - shell 사용 ImproperlyConfigured 에러 해결, Django jupyter notebook 기본 세팅

by 개발에정착하고싶다 2023. 1. 9.

#1 Django의 기본 shell 인터프리터

기본적으로 Django를 shell로 사용하는 방법은

Django프로젝트가 있는 위치 근처에 manage.py 라는 파일이 있다.

그 파일이 있는 위치에서 터미널로 "ls"라는 리눅스 명령어를 쳐도 manage.py 가 나온다면

동등선상에 있는 것으로 간주되어서 활용이 가능하다.

 

활용을 원한다면

python manage.py shell

이라고 터미널에 입력하면 models를 불러와서 확인하고자 하는 것을 확인이 가능하다.


#1 ipython으로 사용하는 세팅이 필요한 이유

 

ipython을 사용이 가능하다는 말은 내가 필요한 경우

jupyternotebook으로도 사용이 가능하다는 의미가 된다

ipython이 jupyternotebook의 인터프리터 shell이라고 보면 된다.

 

즉, 이 고비를 넘기고 나면 필요에 의해서 jupyternotebook으로 Django를 활용할 수 있다는 의미도 된다.


#2 Django를 ipython으로 사용하기

 

하지만 ipython으로 사용하게될 경우에

from gram.models import Post

이런식으로 models에 정의된 클래스를 가져오려고하면

ImproperlyConfigured: Requested setting INSTALLED_APPS, 
but settings are not configured. You must either define the environment 
variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings.

이런 에러가 뜬다.

 

이를 해소해주는 방법은

#1
import os

#2
os.environ['DJANGO_SETTINGS_MODULE'] = '<프로젝트명>.settings'
라고 입력

예:
os.environ['DJANGO_SETTINGS_MODULE'] = 'instagram.settings'

#3
import django

#4
django.setup()

이 순서대로 해준다면

이제 ipython에서도 models를 불러와서 터미널 인터프리터로 확인이 가능하다.


#3 jupyter notebook 기본 셋팅

import os
os.environ['DJANGO_SETTINGS_MODULE'] = 'instagram.settings'
os.environ["DJANGO_ALLOW_UNSAFE"] = 'true'
os.environ["DJANGO_ALLOW_ASYNC_UNSAFE"] = 'true'

import django
django.setup()

그래도 ipython과 jupyter notebook은 약간은 다른 부분이 있어서

jupyter notebook의 기본셋팅값을 가져왔다.