我发现pip在编译包时只使用单核。由于一些python包需要一些时间来使用pip来构建,所以我想在机器上使用多核。在使用Makefile时,我可以这样做,就像下面的命令:使用多核的PIP构建选项
make -j4
我该如何为pip实现相同的功能?
我发现pip在编译包时只使用单核。由于一些python包需要一些时间来使用pip来构建,所以我想在机器上使用多核。在使用Makefile时,我可以这样做,就像下面的命令:使用多核的PIP构建选项
make -j4
我该如何为pip实现相同的功能?
从我可以告诉它看起来不像pip有这种能力,但我可能会误解。
要做到在Python中使用多包多,[这里是一个导游,我发现]关于如何做到这一点,如果你有兴趣(http://pymotw.com/2/multiprocessing/basics.html),这是一个link于谈论它的Python文档。我也发现这个问题很有用,Multiprocessing vs Threading Python,以确保多处理做到了我认为的那样,利用了多个CPU。
我已经通过pip源代码(可用here)寻找多处理包的参考,并没有发现任何包的使用。这意味着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 install documentation,发现没有提及使用多核心进行安装。
TL; DR:Pip不会做你在问什么。我可能是错的,因为我没有长时间看源代码,但我确信它不支持它。
这是一个虽然我对pip不支持此功能有点失望,但是非常感谢您的分析。 – Jihun 2014-10-30 02:41:10
此答案已过时。请参阅下面的Plasmatium的答案。 – 2016-08-23 19:51:20
的终极的方式来解决这一问题
因为所有的C/CPP文件将使用make
称道进行编译,并make
具有指定多少CPU内核shoule被用来编译源的选择代码,我们可以在make
上做一些技巧。
备份你原来make
命令:
sudo cp /usr/bin/make /usr/bin/make.bak
写了一个 “假” make
命令,该命令将追加--jobs=6
它的参数列表,并将它们传递给原来的make命令make.bak
:
make.bak --jobs=6 [email protected]
所以之后,甚至没有用c库编译python,而且其他包含c库的编译器也会加速编译6个内核。其实所有使用make
命令编译的文件都会加快速度。
祝你好运。
用途:--install选项= “ - 工作= 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分钟。
-------------------------- update ------------------- -----------
如下面的评论,我终于用招数是这样的: cd /usr/bin
sudo mv make make.bak
touch make
然后编辑制作:vim make
或其他方式,你喜欢和输入: make.bak --jobs=6 $*
我不熟悉bash,所以我不确定这是否是正确的bash代码。我正在用windows写这篇评论。关键是重命名make make.bak,然后创建一个新的make,使用这个新make使用添加的参数调用make.bak --jobs = 6
似乎可行 - 当我以这种方式运行它时,所有内核上的处理器负载都会增加。 – BenB 2016-02-09 20:11:13
我收到警告'UserWarning:由于使用了--build-options/--global-options/--install-options,禁用所有轮子的使用。这很有道理,但使用多核的性能优势可能超过不使用车轮的性能优势吗?它依赖于什么? – max 2016-09-21 22:56:56
pip(不是pip3)怎么样? 我得到:'错误:选项 - 工作不认可' – timotheecour 2016-09-23 20:13:56
[Parallel Pip install](http:// stackoverflow.com/questions/11021130/parallel-pip-install) – 2014-10-07 07:02:28
我不认为这是重复的问题。在“并行点安装”线程中,如果我理解正确,作者想要运行多个点安装过程。相比之下,我想要做的是使用多个核心安装一个软件包。 – Jihun 2014-10-07 07:10:33
据我所知,这是不实施。必须定制命令build_ext来实现此目的。 – marscher 2014-10-23 18:47:26