激活虚拟环境后不同目录执行pip list显示包列表不一致问题
虚拟环境中pip包列表不一致的问题解析
问题现象
有用户遇到了这样的奇怪情况:
- 创建名为
virtenv的Python虚拟环境,执行workon virtenv激活后,直接运行pip list或pip freeze,显示的包列表很短 - 进入虚拟环境的包目录
~/.../virtual_envs/virtenv/lib/python2.7/site-packages后,再运行相同的pip命令,包列表却更长、更全面 - 两次操作下执行
which pip,输出均为~/bin/pip——明明处于同一个激活的虚拟环境、用的是同一个pip,结果却截然不同
问题根源
经过排查,问题的罪魁祸首是**~/.pydistutils.cfg配置文件**!这个文件会强制让pip始终从~/bin/pip路径运行,直接干扰了虚拟环境的正常工作逻辑:
虚拟环境的核心是拥有独立的Python解释器和包管理链,激活后本该调用虚拟环境内部的pip来管理专属包。但~/.pydistutils.cfg的配置把pip的执行路径固定到了全局的~/bin/pip,导致在虚拟环境根目录运行时,pip读取的是全局或其他非虚拟环境的包信息;而当进入虚拟环境的site-packages目录时,pip会优先扫描当前目录下的包资源,因此能显示出虚拟环境内的完整包列表。
解决方法
只需要移除或重命名~/.pydistutils.cfg文件,之后重新激活虚拟环境(执行workon virtenv),再运行pip list或pip freeze,就能看到虚拟环境专属的完整包列表了。
内容的提问来源于stack exchange,提问作者shaigaco
相关产品推荐
相关产品推荐

