You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在现有Django项目中使用Jupyter?遇两类问题求解答

在Jupyter中访问Django应用的问题排查与解决

问题背景

尝试两种方法在Jupyter中访问Django应用,均失败:

方法1:手动配置Django环境

创建Jupyter文件并添加配置代码:

import sys, os
print('Python %s on %s' % (sys.version, sys.platform))
import django
print('Django %s' % django.get_version())
sys.path.append('D:/VSCODE/GPOSSYS')
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mysite.settings')
if 'setup' in dir(django):
        django.setup()

执行后报错:

1 os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mysite.settings')
 2 if 'setup' in dir(django):
 3     django.setup()
 File d:\\VSCODE\\GPOSSYS\\.venv\\Lib\\site-packages\\django\\__init__.py:24, in
 setup(set_prefix)
 20 if set_prefix:
 21     set_script_prefix("/" if settings.FORCE_SCRIPT_NAME is None else settings.FORCE_SCRIPT_NAME)
 24 apps.populate(settings.INSTALLED_APPS)
 File d:\\VSCODE\\GPOSSYS\\.venv\\Lib\\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

方法2:使用django-extensions

安装jupyter、Django-extensions并添加到INSTALLED_APPS,运行python manage.py shell_plus --notebook报错:

Traceback (most recent call last):
  File "D:\VSCODE\GPOSSYS\.venv\Lib\site
    packages\django_extensions\management\commands\shell_plus.py", line 281, in 
      get_notebook
        from notebook.notebookapp import NotebookApp
ModuleNotFoundError: No module named 'notebook.notebookapp'
CommandError: Could not load shell runner: 'IPython Notebook'.

错误分析与解决办法

针对方法1的报错

RuntimeError: populate() isn't reentrant 说明Django的初始化逻辑被重复触发。解决方式:

  • 重启Jupyter内核,避免内核中已加载过Django环境导致重复初始化;
  • 修改代码,添加初始化状态判断,避免重复执行setup:
import sys, os
print('Python %s on %s' % (sys.version, sys.platform))
import django
print('Django %s' % django.get_version())

# 仅在未初始化时执行配置
if not hasattr(django, 'apps') or not django.apps.ready:
    sys.path.append('D:/VSCODE/GPOSSYS')
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mysite.settings')
    django.setup()

针对方法2的报错

ModuleNotFoundError: No module named 'notebook.notebookapp' 是因为虚拟环境中缺少notebook依赖包。解决步骤:

  1. 在虚拟环境中安装notebook:
pip install notebook
  1. 确保django-extensions与当前Django版本兼容,若版本不匹配,可指定安装兼容版本(例如Django 4.x对应django-extensions>=3.2.0):
pip install django-extensions>=3.2.0
  1. 重新运行启动命令:
python manage.py shell_plus --notebook

替代可行方法

如果上述方法仍有问题,可尝试以下方案:

  • 使用django-jupyter包:安装后直接在项目根目录运行python manage.py jupyter,启动已关联Django环境的Jupyter;
  • 配置专属Jupyter内核:在虚拟环境中执行ipython kernel install --user --name=my_django_env,然后在Jupyter界面选择该内核,再执行方法1的初始化代码(注意确保项目路径正确)。

内容的提问来源于stack exchange,提问作者Peter Johnson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 20:19:50