我发现 pip 在编译包时只使用单核。由于使用 pip 构建某些 python 包需要一些时间,因此我想在机器上使用多核。使用 Makefile 时,我可以像下面的命令那样做:
make -j4
我怎样才能为 pip 实现同样的目标?
原文由 Jihun 发布,翻译遵循 CC BY-SA 4.0 许可协议
我发现 pip 在编译包时只使用单核。由于使用 pip 构建某些 python 包需要一些时间,因此我想在机器上使用多核。使用 Makefile 时,我可以像下面的命令那样做:
make -j4
我怎样才能为 pip 实现同样的目标?
原文由 Jihun 发布,翻译遵循 CC BY-SA 4.0 许可协议
解决这个问题的 终极 方法
因为所有的 c/cpp 文件都将使用 make
编译,并且 make
有一个选项指定应该使用多少 cpu 内核来编译源代码,我们可以这样做关于 make
的一些技巧。
make
命令:sudo cp /usr/bin/make /usr/bin/make.bak
make
命令,它将附加 --jobs=6
到它的参数列表并将它们传递给原始的make命令 make.bak
:make.bak --jobs=6 $@
所以在那之后,即使是用 c 库编译 python,但其他包含 c 库的编译器也会加快 6 核的编译速度。实际上所有使用 make
命令编译的文件都会加速。
还有祝你好运。
使用: –install-option=“–jobs=6” ( pip 文档)。
pip3 install --install-option="--jobs=6" PyXXX
我有同样的需求,使用 pip install 来加快编译进度。我的目标 pkg 是 PySide。起初我使用 pip3 install pyside
,花了我将近30分钟(AMD 1055T 6核,10G RAM),只有一个核心100%负载。
pip3 --help
中没有任何线索,但我发现了很多选项,例如 pip install -u pyXXX
,但我不知道什么是“-u”,而且这个参数不在 pip --help
也是。我尝试了“pip3 install –help”,得到了答案:–install -option 。
我读了PySide的代码,发现了另一条线索: OPTION_JOBS = has_option('jobs')
,我把ipdb.set_trace()放在那里,终于明白了如何使用多核通过pip install编译。
我花了大约 6 分钟。
- - - - - - - - - - - - - 更新 - - - - - - - - - - - - ——
as comment below, I finally used tricks like this: cd /usr/bin
sudo mv make make.bak
touch make
then edit make: vim make
or other way you like and type this: make.bak --jobs=6 $*
我不熟悉 bash,所以我不确定这是否是正确的 bash 代码。我正在 Windows 中写这篇评论。关键是将make重命名为make.bak,然后创建一个新的make,使用这个新的make来调用make.bak并添加参数–jobs=6
原文由 Plasmatium 发布,翻译遵循 CC BY-SA 4.0 许可协议
2 回答5.1k 阅读✓ 已解决
2 回答1.1k 阅读✓ 已解决
4 回答1.4k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
3 回答1.2k 阅读✓ 已解决
1 回答1.7k 阅读✓ 已解决
1 回答1.2k 阅读✓ 已解决
据我所知,pip 似乎没有这种能力,但我可能弄错了。
要在 python 中进行多处理,您可以使用 multiprocessing 包,[这是我找到的指南] ( http://pymotw.com/2/multiprocessing/basics.html ) 如果您有兴趣,可以了解如何进行,这是一个 链接 到谈论它的 python 文档。我还发现这个问题很有用, Multiprocessing vs Threading Python ,以确保多处理按照我的想法进行,利用多个 CPU。
我浏览了 pip 源代码(可 在此处 获得)以寻找对多处理包的引用,但没有找到该包的任何用途。这意味着 pip 不使用/不支持多处理。据我所知,
/pip/commands/install.py
文件是您感兴趣的问题之一,因为它在您运行pip install <package>
时被调用。对于这个文件,特别是进口是你可以看到它没有对 multiprocessing 包的任何引用,但我确实检查了所有其他文件以确保。
此外,我检查了 pip install 文档,没有发现使用多核安装的参考。
TL;DR:Pip 没有按照您的要求进行操作。我可能是错的,因为我没有看那么久的来源,但我很确定它只是不支持它。