关于python:跳过pip卸载的确认提示

Bypass Confirmation Prompt for pip uninstall

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

1
2
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似乎不能保证这种行为(即,安装系统站点软件包中已经存在的相同版本的软件包)。


从pip版本7.1.2开始,您可以运行pip uninstall -y

1
pip uninstall -y package1 package2 package3

或来自文件

1
pip uninstall -y -r requirements.txt

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

解决方法:可以。

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


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

1
pip uninstall -y -r requirements.txt


Lakshman Prasad是对的,pip --upgrade和/或virtualenv --no-site-packages是可行的方法。卸载系统范围的python模块是不好的。

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

1
pip --upgrade install

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


Alternatively, would it be better to force pip to install all dependencies to the virtualenv rather than relying on the system python modules to meet those dependencies,

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

pip --upgrade install, but forcing even equally old versions to be installed to override any system modules.

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

I tried activating my virtualenv and then pip install --upgrade -r requirements.txt and that does seem to install the dependencies, even those existing in my system path, but I can't be sure if that's because my system modules were old. And man pip doesn't seem to guarantee this behavior (i.e. installing the same version of a package that already exists in the system site-packages).

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


1
pip install -U xxxx

可以绕过确认