使用poetry安装Django后激活的虚拟环境提示No module named django
问题成因
该问题核心是命令调用的Python解释器与Django实际安装的虚拟环境解释器不匹配:
- 虚拟环境bin目录下的django-admin可执行文件执行时,会调用文件头部shebang行指定的Python解释器,若该解释器不属于当前虚拟环境,就无法读取虚拟环境内安装的Django依赖
- 另一种常见场景是虚拟环境激活未生效,shell的PATH变量中系统Python路径优先级高于虚拟环境Python路径,实际调用的是系统Python,自然找不到虚拟环境内安装的包
解决方案
方案1(最稳妥,无需修改配置)
直接使用poetry run前缀执行项目内的所有命令,poetry会自动匹配对应虚拟环境,无需手动激活环境:
# 执行django-admin poetry run django-admin # 其他命令同理,例如启动Django服务 poetry run python manage.py runserver
方案2(适配手动激活虚拟环境的使用习惯)
- 激活虚拟环境后先执行以下命令,确认Python路径匹配:
which python # 预期输出应为 /Users/cjones/Library/Caches/pypoetry/virtualenvs/poetry-demo-Jq168aNm-py3.8/bin/python
- 若输出路径不匹配,检查shell配置文件(
~/.zshrc/~/.bashrc等)是否存在强制修改PATH优先级的规则,调整虚拟环境bin目录的优先级到最高,也可以直接用绝对路径激活虚拟环境:
source /Users/cjones/Library/Caches/pypoetry/virtualenvs/poetry-demo-Jq168aNm-py3.8/bin/activate
- 确认Python路径正确后,也可以直接用
python -m django替代django-admin命令,功能完全一致:
python -m django --version
方案3(重置异常虚拟环境)
如果以上操作都无法解决,删除现有异常虚拟环境后重新生成即可:
# 删除当前项目关联的虚拟环境 poetry env remove python3.8 # 重新安装所有依赖 poetry install # 验证功能 poetry run django-admin --version
内容的提问来源于stack exchange,提问作者strumpy_strudel
相关产品推荐
相关产品推荐

