在非交互模式下递归安装和卸载pip包

22

作为我的Bash脚本的一部分,我想以非交互模式安装和卸载我在文件中拥有名称的pip依赖项。我能够搜索并找到这些命令:

pip3 uninstall --yes -r host-requirements.txt
pip3 install --no-input -r host-requirements.txt

我在pip的帮助文档中找不到--yes--no-input选项,也不确定它们是否得到官方支持。


3
这是正确的。在这里支持 --no-input https://github.com/pypa/pip/blob/master/src/pip/_internal/cli/cmdoptions.py#L219 和 --yes 在这里 https://github.com/pypa/pip/blob/master/src/pip/_internal/commands/uninstall.py#L39。 - pawelbylina
我在想为什么它没有出现在官方文档中。这是否意味着他们可能会在没有通知的情况下停止支持它? - Arian
3个回答

20

1
显然,“是”在某些情况下不起作用,正如您提供链接的帖子评论中所提到的。 - Arian
正确,但是 yes 应该适用于 pip 安装。当你想要确认服务器的真实性时,像示例中那样使用它是行不通的。 - Anurag Saxena
检查服务器的真实性是我们可以控制的吗?简单的 pip install -r 是否可能陷入这种情况? - Arian
除非存在中间人攻击,并且您没有使用https,否则不会出现这种情况,而您正在使用https。当您运行pip install时,pip会自动访问Python软件包索引(pypi.org)并获取软件包,除非您指定了其他索引。在我看来,您很可能没有指定索引。 - Anurag Saxena

2

有更多的互动问题期望得到除了“是”以外的其他答案。例如:

Directory /opt/services/spam/egg already exists, and is not a git clone.
What to do?  (i)gnore, (w)ipe, (b)ackup`

在这种情况下,我发现调用 echo "i" | pip install ... 就足够了。

2
有一个 --exists-action 选项 - sinoroc

1
安装过程中常见的问题是,如果存在需要解决的私有存储库依赖项,则必须先添加远程服务器的密钥。
Obtaining file://...
Collecting your_private_package@ git+ssh://...
  Cloning ssh://****@.../
  Running command git clone -q 'ssh://****@.../
The authenticity of host can't be established.
RSA key fingerprint is ...
Are you sure you want to continue connecting (yes/no)?

为此,ssh StrictHostKeyChecking 将被暂时设置为 no。这可以在主机或用户级别上完成,但会降低安全性风险。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接