我正在尝试在我的超级用户环境中卸载所有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
似乎不保证这种行为(即安装系统站点包中已存在的包的相同版本)。
答案 0 :(得分:124)
从pip版本7.1.2开始,您可以运行pip uninstall -y <python package>
答案 1 :(得分:59)
Pip不包含--yes选项(从pip版本1.3.1开始)。
替代方法:管道是的!
$ sudo ls # enter pw so not prompted again
$ /usr/bin/yes | sudo pip uninstall pymongo
答案 2 :(得分:2)
如果您要卸载requirements.txt
中的每个软件包,
pip uninstall -y -r requirements.txt
答案 3 :(得分:1)
或者,最好强制pip将所有依赖项安装到virtualenv而不是依赖系统python模块来满足这些依赖项,
是。不要使用内置系统安装的软件包太乱。许多系统软件包,特别是OS X(甚至是debian和衍生品种)都过分依赖它们。
pip --upgrade install,但强制安装甚至同样旧的版本来覆盖任何系统模块。
如果在venv中安装了一些已经存在于系统包中的软件包,那应该不是什么大问题,特别是如果它们的版本不同。这就是virtualenv的重点。
我尝试激活我的virtualenv,然后点击安装--upgrade -r requirements.txt,这似乎安装了依赖项,即使是我系统路径中存在的依赖项,但我不能确定是否因为我的系统模块老了。而man pip似乎并不能保证这种行为(即安装系统站点包中已存在的相同版本的软件包)。
不,除非您使用--no-site-packages
标志创建它,或者所需版本和现有版本不同,否则它不会安装主安装中已有的软件包。
答案 4 :(得分:1)
Lakshman Prasad是对的,pip --upgrade
和/或virtualenv --no-site-packages
是要走的路。卸载系统范围的python模块很糟糕。
pip的--upgrade
选项会在虚拟环境中安装所需的模块,即使它们已经存在于系统环境中,即使所需的版本或最新的可用版本与系统版本相同。
pip --upgrade install
并且,在创建虚拟环境时使用--no-site-packages选项可确保系统路径中缺少模块的存在可能无法掩盖缺少的依赖项。这有助于在将模块从一个包迁移到另一个包期间暴露出问题,例如pinax.apps.groups - &gt; django-groups,特别是当问题出在django中的load templatetags语句时,它会搜索templatetags目录的所有可用模块以及其中的标记定义。
答案 5 :(得分:0)
pip install -U xxxx
可以绕过确认
答案 6 :(得分:0)
在 www.saturncloud.io 上,您可以像这样使用 Jupiter 笔记本:
!yes | pip uninstall tensorflow
!yes | pip uninstall gast
!yes | pip uninstall tensorflow-probability