Linux Pop!_OS系统虚拟环境site-packages包不被Django识别如何解决
查询当前Python环境可用包的命令
- 查看当前解释器关联的所有已安装包:
python -m pip list
直接调用当前激活环境下的pip查询,避免因PATH优先级问题导致查询到其他环境的包列表。 - 打印Python模块搜索路径,排查路径匹配问题:
python -c "import sys; print('\n'.join(sys.path))" - 查看当前环境对应的site-packages安装路径:
python -m site
包识别异常问题解决方案
- 优先使用当前解释器调用pip安装包
不要直接执行pip install 包名,改为执行:python -m pip install django-anymail corsheaders
该方式可100%保证包安装到当前运行的Python对应的site-packages目录,避免激活环境后shell路径缓存未更新、调用到全局pip的问题。 - 清空shell命令缓存
Pop!_OS默认使用bash或zsh,激活虚拟环境后可能存在命令路径缓存未刷新的问题,执行以下命令清空缓存后重试导入:hash -r - 修复模块搜索路径缺失问题
如果执行python -m site返回的site-packages路径不在sys.path输出中不存在,可临时添加搜索路径:export PYTHONPATH=/你的虚拟环境路径/lib/python对应版本/site-packages:$PYTHONPATH
将路径替换为你实际的虚拟环境site-packages绝对路径即可。如果需要永久生效,可将上述命令添加到虚拟环境的bin/activate脚本末尾,每次激活自动加载。 - 排查Django启动异常点
不要使用sudo执行Django启动命令,sudo会重置环境变量,默认调用系统全局Python启动项目。启动时优先使用:python manage.py runserver
若需要使用django-admin命令,替换为:python -m django <子命令> - 排查全局包冲突
检查用户目录下~/.local/lib/pythonX.X/site-packages路径下是否存在同名的冲突包,若存在可卸载对应全局包,避免搜索路径优先级问题导致优先加载全局不存在的版本。
内容的提问来源于stack exchange,提问作者bradrice
相关产品推荐
相关产品推荐

