pip线程安全吗?

Is pip Thread Safe?

我有一个构建脚本 (bash) 利用 python pip 从远程获取需求并将其放入虚拟环境中。这个构建脚本可以被另一个脚本调用,该脚本将使用任意数量的线程和不同的目标调用它。这会导致 pip 每次调用都重新 运行。它将尝试检查相同虚拟环境的相同要求。

这会与 pip 不兼容吗?

pip 每次都是 运行 是对带宽和资源的浪费。
在 virtualenv 中,已安装的软件包保持安装状态。因此,您可以在存储标志的目录中设置标志或文件,在检查标志时,您可以执行 pip 或不执行。这是一个更好的解决方案。

根据 this issue,pip 应该主要是线程安全的,除非存储库状态在更新时发生变化。

由于此讨论是 google 上的第一篇文章:pip 不应被视为线程安全的。另外,如果您不在导入 xthe pip 包的线程中 运行 pip.main(),那么在从线程中调用 pip 时,pip 中有一个错误可能会导致异常。

运行 pip.main() 也不支持 API。唯一推荐的方法是从 subprocess.Popen() 或类似的方法调用 pip。

更多细节在这里: https://github.com/pypa/pip/issues/3889