使用多核的 pip 构建选项

新手上路,请多包涵

我发现 pip 在编译包时只使用单核。由于使用 pip 构建某些 python 包需要一些时间,因此我想在机器上使用多核。使用 Makefile 时,我可以像下面的命令那样做:

 make -j4

我怎样才能为 pip 实现同样的目标?

原文由 Jihun 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 2.6k
2 个回答

据我所知,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> 时被调用。对于这个文件,特别是进口是

from __future__ import absolute_import

import logging
import os
import tempfile
import shutil
import warnings

from pip.req import InstallRequirement, RequirementSet, parse_requirements
from pip.locations import virtualenv_no_global, distutils_scheme
from pip.basecommand import Command
from pip.index import PackageFinder
from pip.exceptions import (
    InstallationError, CommandError, PreviousBuildDirError,
)
from pip import cmdoptions
from pip.utils.deprecation import RemovedInPip7Warning, RemovedInPip8Warning

你可以看到它没有对 multiprocessing 包的任何引用,但我确实检查了所有其他文件以确保。

此外,我检查了 pip install 文档,没有发现使用多核安装的参考。

TL;DR:Pip 没有按照您的要求进行操作。我可能是错的,因为我没有看那么久的来源,但我很确定它只是不支持它。

原文由 guribe94 发布,翻译遵循 CC BY-SA 3.0 许可协议

解决这个问题的 终极 方法

因为所有的 c/cpp 文件都将使用 make 编译,并且 make 有一个选项指定应该使用多少 cpu 内核来编译源代码,我们可以这样做关于 make 的一些技巧。

  1. 备份你原来的 make 命令:

sudo cp /usr/bin/make /usr/bin/make.bak

  1. 写一个“假” 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 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题