Pip构建选项以使用多核

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

make -j4

我怎样才能达到同样的东西的点子?


从我可以告诉它看起来不像pip有这种能力,但我可能会误解。

要在python中执行多处理,你可以使用多处理包,[这里是我找到的指南](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

你可以看到它没有任何多处理包的参考,但我确实检查了所有其他文件。

此外,我检查了pip安装文档,发现没有提及使用多核心进行安装。

TL; DR:Pip不会做你在问什么。 我可能是错的,因为我没有长时间看源代码,但我确信它不支持它。


解决这个问题的最终途径

因为所有的c / cpp文件都会使用make commend进行编译, 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”

    pip3 install --install-option="--jobs=6" PyXXX
    

    我有同样的需求,使用pip安装来加快编译进度。 我的目标包是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分钟。

    --------------------------更新----------------------- -------

    作为下面的注释,我最终使用了这样的技巧: cd /usr/bin sudo mv make make.bak touch make然后编辑make: vim make或者其他你喜欢的方式并输入: make.bak --jobs=6 $* I我不熟悉bash,所以我不确定这是否是正确的bash代码。 我正在用windows写这篇评论。 关键是将make重命名为make.bak,然后创建一个新make,使用这个新make使用添加的参数调用make.bak --jobs = 6

    链接地址: http://www.djcxy.com/p/55205.html

    上一篇: Pip build option to use multicore

    下一篇: What are the differences between the threading and multiprocessing modules?