Ubuntu 20.04下virtualenv激活异常,pip安装包未写入虚拟环境
问题解决排查步骤
- 第一步 验证虚拟环境是否真实激活
执行以下命令核对路径,正常输出应指向当前虚拟环境venv目录下的bin子目录:
which python3 which pip3 echo $VIRTUAL_ENV
如果输出路径不符合预期,说明activate脚本未正常执行,确认source的路径是否为对应venv目录下的bin/activate,路径错误会导致仅前缀显示(venv)但环境变量未替换。
- 第二步 检查虚拟环境配置
打开venv目录下的pyvenv.cfg文件,查看include-system-site-packages参数值:
如果参数为true,说明创建虚拟环境时开启了继承系统包的配置,会优先读取全局/用户目录的包。可直接修改该参数为false,或删除旧虚拟环境后重新创建:
rm -rf venv # 使用virtualenv创建 virtualenv venv # 或使用系统自带venv创建 python3 -m venv venv
重新创建后再次执行source激活命令。
- 第三步 检查PYTHONPATH环境变量冲突
执行命令echo $PYTHONPATH,如果有非空输出,说明自定义的PYTHONPATH优先级高于虚拟环境的包路径,导致优先读取用户目录的site-packages。执行以下命令临时清空该变量:
unset PYTHONPATH
之后再次查看sys.path,确认虚拟环境的site-packages路径已出现在搜索列表前列。如果需要永久解决,可检查/.bashrc、/.zshrc等终端配置文件,删除手动设置PYTHONPATH的相关行。
- 第四步 检查pip全局配置
执行pip config list查看是否存在global.user=true配置,如果存在该配置,pip会默认将所有包安装到用户目录,忽略虚拟环境。解决方法为编辑~/.pip/pip.conf文件,删除user = true行,或安装包时额外添加--user=false参数:
python3 -m pip install pytest --user=false
验证方法
完成上述操作后执行以下命令,输出的第一个site-packages路径应为当前虚拟环境下的对应目录,即配置生效:
python3 -c "import sys; print([p for p in sys.path if 'site-packages' in p])"
内容的提问来源于stack exchange,提问作者YoavKlein
相关产品推荐
相关产品推荐

