Python pip线程安全吗?
我有一个构建脚本(bash),它利用pythonPython pip线程安全吗?,python,multithreading,pip,Python,Multithreading,Pip,我有一个构建脚本(bash),它利用pythonpip从远程获取需求并将其放入虚拟环境。此构建脚本可以由另一个脚本调用,该脚本将使用任意数量的线程和不同的目标调用它。这会导致每次调用都重新运行pip。它将尝试检查相同虚拟环境的相同需求 这是否与pip不兼容?pip每次运行都会浪费带宽和资源。 在virtualenv中,已安装的软件包保持安装状态。因此,您可以在存储标志的目录中设置标志或文件,在检查标志时,您可以执行或不执行pip。这是一个更好的解决方案。根据,pip应该主要是线程安全的,除非存
pip
从远程获取需求并将其放入虚拟环境。此构建脚本可以由另一个脚本调用,该脚本将使用任意数量的线程和不同的目标调用它。这会导致每次调用都重新运行pip。它将尝试检查相同虚拟环境的相同需求
这是否与
pip
不兼容?pip
每次运行都会浪费带宽和资源。
在virtualenv中,已安装的软件包保持安装状态。因此,您可以在存储标志的目录中设置标志或文件,在检查标志时,您可以执行或不执行
pip
。这是一个更好的解决方案。根据,pip应该主要是线程安全的,除非存储库状态在更新时发生变化。因为这是google上的第一次讨论:pip不应该被认为是线程安全的。另外,pip中存在一个bug,如果您没有在导入XT pip包的线程中运行pip.main()
,那么从线程中调用pip时可能会导致异常
运行pip.main()
也是不受支持的API。唯一推荐的方法是从subprocess.Popen()
或类似程序调用pip
详情如下:
轮转
wheel
是否注意到了这一点?我不这么认为,每当我将pip与requirements.txt文件一起使用时,它都会手动检查所有软件包,它会首先重新下载文件,如果已经安装,则会退出。但是下载发生了。顺便说一句,这并不能回答我的问题。我需要了解线程安全。“存储库状态”是什么意思?@BourgondAries说你安装了一个包。对于第一个线程,包的版本是1.0,但随后包被更新,第二个线程看到版本1.1。这是极不可能的,但如果发生这种情况,可能会破坏一切。线程安全是二进制的。“大部分线程安全”意味着不是线程安全的。