绕过pip卸载时的确认提示
绕过pip卸载时的确认提示
我试图在我的超级用户环境中卸载所有django包,以确保所有的webapp依赖项都安装在我的虚拟环境中。
sudo su sudo pip freeze | grep -E '^django-' | xargs pip -q uninstall
但是pip希望确认每个包的卸载,而pip似乎没有-y
选项。有没有更好的方法批量卸载Python模块?rm -rf .../site-packages/
是否是正确的方法?是否有easy_install的替代方法?
另外,是否将pip强制安装所有依赖项到虚拟环境中,而不是依赖于系统Python模块来满足这些依赖关系,例如pip --upgrade install
,但是强制安装甚至是相同的旧版本来覆盖任何系统模块。我尝试激活我的虚拟环境,然后pip install --upgrade -r requirements.txt
,这似乎确实安装了依赖项,即使存在于我的系统路径中,但我不能确定这是因为我的系统模块旧了。而man pip
似乎并不能保证这种行为(即安装已存在于系统site-packages中的相同版本的包)。
问题原因:Pip在1.3.1版本中没有包含--yes选项。
解决方法:通过管道将yes命令传递给Pip。
具体操作如下:
$ sudo ls # 输入密码以免再次提示 $ /usr/bin/yes | sudo pip uninstall pymongo
这个方法非常简单,感谢Unix程序的提醒,yes命令非常有用。
但是,我认为下面的方法可能不起作用(我今天对我的系统不太敢尝试):
yes | sudo pip freeze | grep -E '^django-' | xargs pip -q uninstall
因为yes命令会被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](https://stackoverflow.com/questions/57223133))