작성
·
597
1
안녕하세요 강사님
RuntimeError: populate() isn't reentrant
에러관련해서 검색을 해봤더니, 환경 by 환경의 문제 같더라구요 ㅠㅠ 핵심을 잘 못짚겠어서 고치질 못하기에
여태 주피터 노트북 활용하는 강의는 따라하질 못하고 막혀있는데요.
어떻게 해결하면 될까요?
#1 이게 제 코드구여
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()
#2 이게 에러 메세지 이구요
---------------------------------------------------------------------------
RuntimeError Traceback (most recent call last)
Input In [3], in <cell line: 7>()
4 os.environ['DJANGO_ALLOW_ASYNC_UNSAFE'] = 'true'
6 import django
----> 7 django.setup()
File ~/opt/anaconda3/lib/python3.9/site-packages/django/__init__.py:24, in setup(set_prefix)
20 if set_prefix:
21 set_script_prefix(
22 "/" if settings.FORCE_SCRIPT_NAME is None else settings.FORCE_SCRIPT_NAME
23 )
---> 24 apps.populate(settings.INSTALLED_APPS)
File ~/opt/anaconda3/lib/python3.9/site-packages/django/apps/registry.py:83, in Apps.populate(self, installed_apps)
78 # An RLock prevents other threads from entering this section. The
79 # compare and set operation below is atomic.
80 if self.loading:
81 # Prevent reentrant calls to avoid running AppConfig.ready()
82 # methods twice.
---> 83 raise RuntimeError("populate() isn't reentrant")
84 self.loading = True
86 # Phase 1: initialize app configs and import app modules.
RuntimeError: populate() isn't reentrant
이에 따라서 에러메세지에 표시된 경로에 위치한 init.py 파일 내용입니다.
from django.utils.version import get_version
VERSION = (4, 1, 1, "final", 0)
__version__ = get_version(VERSION)
def setup(set_prefix=True):
"""
Configure the settings (this happens as a side effect of accessing the
first setting), configure logging and populate the app registry.
Set the thread-local urlresolvers script prefix if `set_prefix` is True.
"""
from django.apps import apps
from django.conf import settings
from django.urls import set_script_prefix
from django.utils.log import configure_logging
configure_logging(settings.LOGGING_CONFIG, settings.LOGGING)
if set_prefix:
set_script_prefix(
"/" if settings.FORCE_SCRIPT_NAME is None else settings.FORCE_SCRIPT_NAME
)
apps.populate(settings.INSTALLED_APPS)
답변 1
1
안녕하세요.
현재 사용 중이신 jupyter notebook에서 상단 메뉴 중에 Kernel -> Restart & Clear Output 메뉴를 통해, 커널을 재시작 후에 다시 수행해보시면 어떤가요?
RuntimeError: populate() isn't reentrant 오류는 django.setup()가 여러 번 호출되었을 경우에 발생하는 경우가 종종 있더라구요.
커널을 재시작하면 모든 코드 수행내역이 초기화되니까, 그 후에 django.setup() 코드를 1회만 수행하시고 실습을 이어나가보세요.
확인해보시고 댓글 부탁드립니다.
화이팅입니다. :-)
네! 그런데 메일로 보내드리는 것 보다 깃헙이 더 나으실수도 있을것같아서
https://github.com/daniel4191/new_instagram
깃헙링크도 같이 드립니다! 메일은 보내드렸습니다!
다른점이 있다면 저는 프로젝트 이름을 instagram으로 했고,
따라서 instagram이라는 app 네임 대신에 gram으로 사용하고 있습니다!
메일로 보내주신 프로젝트에서, python 3.9 로 가상환경 생성하고, 아래 라이브러리 목록으로 최신버전을 설치하고,
django==4.1.5
django-extensions==3.2.1
django-debug-toolbar==3.8.1
pillow==9.4.0
jupyter
python -m jupyter notebook 명령으로 쥬피터 노트북을 실행시켜서, 아래와 같이 수행해보니, 저는 그 오류가 재현이 안 되네요.
흠. 가상환경 재생성/활성화하시고, 위 라이브러리 목록으로 라이브러리를 재설치하시고, python -m jupyter notebook 명령으로 쥬피터 노트북을 다시 실행해서 확인해보시겠어요?
위 목록을 requirements.txt 파일로 저장하시고, python -m pip install -r requirements.txt 명령으로 설치하시는 겁니다.
화이팅입니다. :-)
감사합니다!!
기존에는 터미널에 jupyter notebook이라고 쓰다가
계속 아까와같은 에러가 나기에, 같은 케이스로 다른분들이 겪은 사례는 없을까 찾던중, 동일한 케이스를 찾았습니다.
거기에는 python -m jupyter로 하면 된다고 하셨던 것으로 기억합니다.
그래서 그대로 해봤더니 역시나 에러가 생기길래 이상해서 pip install jupyter
를 해준 후에도 python -m jupyter로도 해봐서 안되기에 계속 아나콘다를 참조하는 jupyter notebook에서 이도저도 못하고 있었는데
저에게 핵심은 python 가상환경을 참조하는 python -m jupyter notebook
이 포인트였습니다!
도움주셔서 너무 감사드립니다!! ㅠㅠ
알려주신대로 저 커널 에서 리스타트 & 클리어 아웃풋을 혹시몰라서 4차례씩 해봤는데도 안되더라구요 ㅠㅠ