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