绕过pip卸载的确认提示


86

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

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

但是pip希望确认每个软件包都已卸载,并且-ypip似乎没有选择。有更好的方法来卸载一批python模块吗?是rm -rf .../site-packages/正确的方法吗?是否有easy_install替代方法?

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

Answers:


196

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

pip uninstall -y package1 package2 package3

或来自文件

pip uninstall -y -r requirements.txt

65

点子不包含--yes选项(从点子版本1.3.1开始)。

解决方法:可以。

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

2
啊,多么简单。感谢您的unix程序提醒。yes非常有用
滚刀

但我认为这不会奏效(太胆小,无法在今天的系统上尝试)。yes | sudo pip freeze | grep -E '^django-' | xargs pip -q uninstall因为yeses会被参数/命令而pip freeze不是吞噬。xargspip uninstall
滚刀,

3
pip freeze > all_to_uninstall.txt yes | pip uninstall -r all_to_uninstall.txt
尼克

8

如果您要从中卸载每个软件包requirements.txt

pip uninstall -y -r requirements.txt

1

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

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

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

如果venv中已经安装了一些软件包,并且已经存在于系统软件包中,则不要紧,特别是如果它们是不同版本的话。那就是virtualenv的重点。

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

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


1

拉克什曼·普拉萨德(Lakshman Prasad)是对的,pip --upgrade并且/或者virtualenv --no-site-packages是要走的路。卸载系统范围的python模块是不好的。

--upgrade选项点子并在虚拟ENV安装所需的模块,即使他们在系统环境中已经存在,且即使所需要的版本或最新版本是一样的系统版本。

pip --upgrade install

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


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.