我正在尝试创建一个虚拟环境并从项目中的 requirements.txt 中安装包。
当我创建环境时,我会检查 python 和 pip 确实来自该环境。也就是说,当我运行:
source ./virtualenv/bin/activate
which pip
which python
我得到的结果指向位于 virtualenv 目录内的二进制文件
然后我继续安装软件包:
pip install -r requirements.txt
有一段时间,requirements.txt 中的这一行让我很困惑pkg-resources=0.0.0
。后来发现,这一行是因为 Ubuntu 的一个 bug 而被输入到这个文件中的。你可能猜到了,我是在一台 Ubuntu 机器上创建了这个文件的。
一旦我划掉线,安装就会继续。
但是,当我在安装后运行 pip list 时,列表仅包含
pip (8.1.1) pkg-resources (0.0.0) setuptools (20.7.0)
而且,如果我停用虚拟环境并全局运行 pip list,我会看到所有依赖项都已全局安装。
这里有两个问题。第一个问题最明显,为什么会发生这种情况?第二个问题是,我该如何清理全局包并卸载现在驻留在那里的污染物?
附录:
另一个奇怪的行为如下。当我尝试sudo pip uninstall -r requirements.txt
在虚拟环境中运行并希望撤销全局安装时,出现以下错误:
无法卸载需求aldryn-apphooks-config,未安装
也就是说,当我尝试卸载时,pip 会尝试在虚拟环境中寻找包。
另一方面,当我停用虚拟环境时,我可以使用相同的命令成功地从全局安装中卸载软件包。
不知何故,与 pip uninstall 命令相比,Ubuntu 上的 pip install 命令的工作方式有所不同。它们在不同的地方“查找”软件包。