Jih*_*hun 44 python install pip
我发现pip在编译包时只使用单核.由于一些python包需要一些时间来构建使用pip,我想在机器上使用多核.使用Makefile时,我可以像下面这样执行命令:
make -j4
Run Code Online (Sandbox Code Playgroud)
我怎么能为pip做同样的事情?
小智 36
测试了这个作品 /sf/answers/3990999491/
单个命令:
MAKEFLAGS="-j$(nproc)" pip install xxx
Run Code Online (Sandbox Code Playgroud)
为脚本中的所有命令启用:
export MAKEFLAGS="-j$(nproc)"
Run Code Online (Sandbox Code Playgroud)
Pla*_*ium 30
解决这个问题的最终方法
因为所有的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 libs编译python,而且其他包含c libs的人将加速编译6个核心.实际上,使用make
命令编译的所有文件都会加速.
还有祝你好运.
使用: - install-option =" - jobs = 6".
pip3 install --install-option="--jobs=6" PyXXX
Run Code Online (Sandbox Code Playgroud)
我有同样的要求,使用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分钟.
--------------------------更新----------------------- -------
如下面的评论,我最终使用了这样的技巧:
cd /usr/bin
sudo mv make make.bak
touch make
然后编辑make:vim make
或者你喜欢的其他方式并输入:
make.bak --jobs=6 $*
我不熟悉bash,所以我不确定这是否是纠正bash代码.我在windows中写这个评论.关键是将make重命名为make.bak,然后创建一个新的make,使用这个新的make来调用make.bak并添加param --jobs = 6
据我所知,pip 似乎没有这种能力,但我可能会误会。
要在 python 中进行多处理,您可以使用多处理包,[这是我找到的指南](http://pymotw.com/2/multiprocessing/basics.html)关于如何做,如果您有兴趣,这是一个链接到谈论它的 python 文档。我还发现这个问题很有用,Multiprocessing vs Threading Python,以确保多处理做了我认为它所做的,利用了多个 CPU。
我已经浏览了 pip 源代码(可在此处获得)以寻找对 multiprocessing 包的引用,但没有找到该包的任何用途。这意味着 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
Run Code Online (Sandbox Code Playgroud)
您可以看到其中没有对多处理包的任何引用,但我确实检查了所有其他文件,只是为了确定。
此外,我检查了pip install 文档,没有发现使用多核安装的参考。
TL;DR:Pip 没有按照你的要求去做。我可能是错的,因为我没有看那么久的来源,但我很确定它只是不支持它。