我发现PIP在编译包时只使用单核。由于一些python包使用pip进行构建需要一些时间,所以我想在机器上使用多核。当使用makefile时,我可以执行如下命令:
我怎样才能为PIP实现相同的目标?
- 并行PIP安装的可能副本
- 我不认为这是重复的问题。在"parallel pip install"线程中,如果我理解正确,作者希望运行多个pip安装进程。相反,我要做的是安装一个使用多核的包。
- 据我所知,这还没有实现。必须自定义命令build_ext才能实现这一点。
- 愚蠢的问题;是否有可能在运行用于构建C件的PIP包的PIP之前导出makeflags=-j5,或者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
- 似乎可以工作——当我以这种方式运行它时,处理器负载在我的所有核心上都会增加。
- 我得到了警告。这是有道理的,但是使用多个核心的性能优势是否可能超过不使用轮子的性能冲击?它依赖于什么?
- 对于pip(不是pip3)呢?我明白了:error: option --jobs not recognized。
- 尝试过pip2.7 AM获取相同的错误错误:选项--作业无法识别它是针对特定包的吗?
- 似乎传递给--install-option的参数只是转发给要安装的包的setup.py。因此,--jobs=6特定于Pyside的构建过程。其他包可能有类似(或相同)的构建标志,但它不是通用选项。
- 对不起,很久过去了。我最后使用了如下的技巧: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
- 这个答案似乎只适用于Pyside。它不适用于任何旧的python 2.7包。用于python 2.7的安装工具不使用make。
据我所知,皮普似乎没有这种能力,但我可能错了。
要在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安装文档,没有发现使用多个核心进行安装的参考。
医生:皮普不按你的要求做。我可能是错的,因为我没看那么长时间的来源,但我很确定它不支持它。
- 这是一个似是而非的论点,尽管我对PIP不支持这个特性有点失望…非常感谢您的分析。
- 这个答案过时了。见下面的等离子体层的答案。