关于python:使用多核的Pip构建选项

Pip build option to use multicore

我发现PIP在编译包时只使用单核。由于一些python包使用pip进行构建需要一些时间,所以我想在机器上使用多核。当使用makefile时,我可以执行如下命令:

1
make -j4

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


解决这个问题的最终方法

因为所有的C/CPP文件都是使用makecommand编译的,make有一个选项,指定应该使用多少个CPU内核来编译源代码,所以我们可以对make做一些技巧。

  • 备份您原来的make命令:

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

  • 编写一条"假"make命令,将--jobs=6附加到参数列表中,传递给原make命令make.bak

    make.bak --jobs=6 $@

  • 因此,在这之后,甚至不用C-libs编译python,但也有一些包含C-libs的代码会加快6核的编译速度。实际上,使用make命令编译的所有文件都将加速。

    祝你好运。

    使用:--install option="--jobs=6"。

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

    我有相同的需求,使用pip安装来加速编译进度。我的目标是Pyside。起初我用的是pip3 install pyside,我用了将近30分钟(amd 1055t 6核,10g内存),只有一个内核能承受100%的负载。

    pip3 --help中没有任何线索,但我发现了很多选项,比如pip install -u pyXXX,但我不知道什么是"-u",这个参数也不在pip --help中。我尝试了"pip3安装--帮助",然后得到了答案:--安装选项。

    我读了pyside代码的代码,发现了另一条线索:OPTION_JOBS = has_option('jobs'),我把ipdb.set trace()放在那里,最后了解了如何使用多核通过pip安装进行编译。

    我花了大约6分钟。

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

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


    据我所知,皮普似乎没有这种能力,但我可能错了。

    要在python中进行多处理,您可以使用多处理包[这里是我找到的一个指南](http://pymotw.com/2/multiprocessing/basics.html),了解如果您感兴趣如何进行多处理,这是一个指向讨论它的python文档的链接。我还发现这个问题很有用,多处理vs线程python,以确保多处理能像我想象的那样,利用多个CPU。

    我已经浏览了PIP源代码(这里提供),寻找对多处理包的引用,但没有找到该包的任何用途。这意味着PIP不使用/支持多处理。据我所知,/pip/commands/install.py文件是您在运行pip install 时所关心的问题之一。对于这个文件,导入的

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    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安装文档,没有发现使用多个核心进行安装的参考。

    医生:皮普不按你的要求做。我可能是错的,因为我没看那么长时间的来源,但我很确定它不支持它。