Django项目中shell_plus --notebook模块导入错误:IPython未使用正确Conda环境的问题排查
解决django-extensions Notebook内核使用错误Conda环境的问题
你的问题核心是:shell_plus --notebook调用了之前注册在django22环境下的django_extensions内核,而非当前激活的booking_j2环境,导致找不到celery模块。下面是具体的排查和修复步骤:
1. 检查已注册的Jupyter内核列表
首先确认当前Jupyter内核的注册情况,运行以下命令:
jupyter kernelspec list
你会看到类似这样的输出,重点关注django_extensions内核的路径:
Available kernels: django_extensions /home/pumpkin/.local/share/jupyter/kernels/django_extensions python3 /home/pumpkin/miniconda3/envs/booking_j2/share/jupyter/kernels/python3
如果django_extensions的路径指向django22环境,那就是问题所在。
2. 删除错误注册的内核
找到错误的内核后,用命令删除它:
jupyter kernelspec remove django_extensions
执行后会提示确认,输入y即可删除。
3. 在当前激活的环境中重新注册内核
确保你已经激活了正确的booking_j2环境:
conda activate booking_j2
然后重新注册django-extensions的Notebook内核,有两种方式:
- 方式一:直接通过django-extensions命令注册
python -m django_extensions install --user - 方式二:运行
shell_plus --notebook触发内核注册
直接执行你原本的命令,此时django-extensions会自动在当前环境注册正确的内核:python manage.py shell_plus --notebook
4. 验证修复结果
再次运行jupyter kernelspec list,确认django_extensions内核的路径已经指向booking_j2环境。此时再创建新的Django shell-plus笔记本,应该就能正常加载模型,不会出现celery模块找不到的问题了。
为什么会出现这种差异?
python manage.py shell_plus --ipython是直接在当前激活的环境进程中启动IPython,所以会使用当前环境的依赖和路径,自然没问题。- 而
--notebook模式是先启动Jupyter服务器,然后调用预先注册的django_extensions内核——如果这个内核是之前在django22环境下注册的,就会使用那个环境的Python解释器和依赖,导致模块缺失。 - 普通Python 3笔记本正常,是因为它使用的是当前环境注册的
python3内核,和django_extensions内核是分开管理的。
内容的提问来源于stack exchange,提问作者sunless
相关产品推荐
相关产品推荐

