绕过 pip 卸载确认提示

我试图在我的超级用户环境中卸载所有 django 包,以确保所有的 webapp 依赖项都安装到我的 viralenv 中。

sudo su
sudo pip freeze | grep -E '^django-' | xargs pip -q uninstall

但 pip 想要确认每个软件包的卸载,而且好像没有 pip 的 -y选项。有没有更好的方法来卸载一批 Python 模块?rm -rf .../site-packages/是正确的选择吗?有没有易于安装的替代方案?

或者,强制 pip 将所有依赖关系安装到 viralenv,而不是依赖系统 python 模块来满足这些依赖关系(例如 pip --upgrade install) ,但强制安装甚至 一样老版本来覆盖任何系统模块,这样做是否更好。我试着激活了我的 viralenv 和 pip install --upgrade -r requirements.txt,这似乎确实安装了依赖关系,甚至那些存在于我的系统路径中的依赖关系,但我不能确定这是否是因为我的系统模块太旧了。而且 man pip似乎并不保证这种行为(即安装系统站点包中已经存在的包的 一样版本)。

98718 次浏览

或者,强制 pip 将所有依赖项安装到 viralenv,而不是依赖系统 python 模块来满足这些依赖项,

是的。不要对内置系统安装的软件包做过多的修改。许多系统软件包,特别是 OS X (甚至是 debian 和派生品种)过于依赖它们。

Pip ——升级安装,但强制安装同样旧的版本以覆盖任何系统模块。

如果在 venv 中安装了一些已经存在于系统包中的软件包,这应该不是什么大问题,特别是如果它们是不同版本的话。这就是虚拟世界的意义所在。

我试着激活我的 viralenv,然后 pip install —— update-r requments.txt,它似乎安装了依赖关系,甚至是那些存在于我的系统路径中的依赖关系,但我不能确定这是否是因为我的系统模块太旧了。而 man pip 似乎不能保证这种行为(即安装与系统站点包中已经存在的包相同的版本)。

不,它不会安装主安装中已经存在的软件包,除非您使用 --no-site-packages标志来创建它,或者所需的版本和当前版本不同。.

Lakshman Prasad 是对的,pip --upgrade和/或 virtualenv --no-site-packages是正确的选择。

Pip 的 --upgrade选项确实在虚拟 env 中安装了所需的模块,即使它们已经存在于系统环境中,即使所需的版本或最新可用版本与系统版本相同。

pip --upgrade install

并且,在创建虚拟环境时使用—— no-site-package 选项可以确保缺少的依赖项不会被系统路径中缺少的模块所掩盖。这有助于暴露模块从一个包迁移到另一个包的过程中的问题,例如 pinax.apps.groups-> django-groups,特别是当 django 中的 load templatetags 语句在所有可用模块中搜索 templatetags 目录和标记定义时。

Pip 不包括—— yes 选项(从 Pip 版本1.3.1开始)。

变通方法: 管道是它!

$ sudo ls  # enter pw so not prompted again
$ /usr/bin/yes | sudo pip uninstall pymongo

从 pip 版本7.1.2开始,您可以运行 pip uninstall -y <python package(s)>

pip uninstall -y package1 package2 package3

或从档案

pip uninstall -y -r requirements.txt
pip install -U xxxx

可以绕过确认

如果您想从 requirements.txt卸载每个软件包,

pip uninstall -y -r requirements.txt

Www.saturncloud.io上,木星笔记本可以这样使用:

!yes | pip uninstall tensorflow
!yes | pip uninstall gast
!yes | pip uninstall tensorflow-probability