绕过 pip 卸载的确认提示

Posted

技术标签:

【中文标题】绕过 pip 卸载的确认提示【英文标题】:Bypass confirmation prompt for pip uninstall 【发布时间】:2011-07-08 12:48:43 【问题描述】:

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

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

但是 pip 想要确认每个包卸载,并且 pip 似乎没有-y 选项。有没有更好的方法来卸载一批 python 模块? rm -rf .../site-packages/ 是正确的方法吗?有没有 easy_install 替代方案?

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

【问题讨论】:

【参考方案1】:

在www.saturncloud.io,Jupiter 笔记本可以这样使用:

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

【讨论】:

【参考方案2】:

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

pip uninstall -y package1 package2 package3

或来自文件

pip uninstall -y -r requirements.txt

【讨论】:

【参考方案3】:

如果你想从requirements.txt卸载每个包,

pip uninstall -y -r requirements.txt

【讨论】:

【参考方案4】:
pip install -U xxxx 

可以绕过确认

【讨论】:

请尽量写完整有意义的句子并编辑代码部分。【参考方案5】:

Pip 不包含 --yes 选项(自 pip 版本 1.3.1 起)。

解决方法:管道是的!

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

【讨论】:

啊,多么简单。感谢 Unix 程序提醒。 yes 太有用了。 但我不认为这会起作用(今天在我的系统上尝试它太胆小了)。 yes | sudo pip freeze | grep -E '^django-' | xargs pip -q uninstall 因为yeses 会被pip freeze 而不是xargs 参数/命令、pip uninstall 吞噬。 pip freeze > all_to_uninstall.txt yes | pip uninstall -r all_to_uninstall.txt (对于上面的滚刀问题,bash - How can I pipe yes to a program started by xargs? - Stack Overflow)【参考方案6】:

Lakshman Prasad 是对的,pip --upgrade 和/或virtualenv --no-site-packages 是正确的选择。卸载系统范围的 python 模块很糟糕。

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

pip --upgrade install

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

【讨论】:

【参考方案7】:

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

是的。不要过多使用内置系统安装的软件包。许多系统包,特别是在 OS X 中(甚至是 debian 和衍生版本)都过于依赖它们。

pip --upgrade install,但强制安装同样旧的版本以覆盖任何系统模块。

如果在 venv 中安装了一些系统包中已经存在的包,这应该没什么大不了的,特别是如果它们的版本不同。这就是 virtualenv 的全部意义所在。

我尝试激活我的 virtualenv,然后 pip install --upgrade -r requirements.txt 这似乎安装了依赖项,甚至那些存在于我的系统路径中的依赖项,但我不能确定这是否是因为我的系统模块老了。而且 man pip 似乎不能保证这种行为(即安装系统站点包中已经存在的相同版本的包)。

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

【讨论】:

以上是关于绕过 pip 卸载的确认提示的主要内容,如果未能解决你的问题,请参考以下文章

我可以绕过 Visual Studio 安装项目中的卸载吗?

使用 PowerShell 停止进程,我可以绕过确认吗?

绕过android usb主机权限确认对话框

如果用户先前已授权访问,如何绕过 Spring security OAuth2 中的访问确认步骤?

在 Android 9 上绕过 android usb 主机权限确认对话框

绕过/更改“您所做的更改可能无法保存”提示