2024-03-29 12:15:53 发布
网友
我发现pip在编译包时只使用单核。由于一些python包需要一些时间来使用pip构建,所以我希望在机器上使用多核。使用Makefile时,我可以按照以下命令执行:
make -j4
我怎么能为皮普实现同样的目标呢?
解决此问题的最终方法
因为所有的c/cpp文件都将使用makecommand编译,并且make有一个选项指定编译源代码时应该使用多少cpu核,所以我们可以在make上做一些技巧。
make
备份原始的make命令:
sudo cp /usr/bin/make /usr/bin/make.bak
编写一个“fake”make命令,该命令将--jobs=6附加到其参数列表,并将它们传递给原始make命令make.bak:
--jobs=6
make.bak
make.bak --jobs=6 $@
因此,在这之后,即使不使用c libs编译python,也可以使用其他包含c libs的程序来加速6核的编译。实际上,使用make命令编译的所有文件都将加快速度。
祝你好运。
使用:--安装选项=“--jobs=6”。
pip3 install --install-option="--jobs=6" PyXXX
我有同样的要求,使用pip安装来加快编译进度。我的目标是PySide。刚开始我使用pip3 install pyside,大约需要30分钟(AMD1055T 6核,10G RAM),只有一个核可以承受100%的负载。
pip3 install pyside
在pip3 --help中没有任何线索,但是我发现了很多选项,比如pip install -u pyXXX,但是我不知道什么是'-u',这个参数也不在pip --help中。我试过“pip3 install--help”,得到的答案是:--install option。
pip3 --help
pip install -u pyXXX
pip --help
我读了PySide的代码,发现了另一条线索:OPTION_JOBS = has_option('jobs'),我把ipdb.set_trace()放在那里,最后理解了如何使用pip install使用多核进行编译。
OPTION_JOBS = has_option('jobs')
我花了大约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并添加param--jobs=6
cd /usr/bin
sudo mv make make.bak
touch make
vim make
make.bak --jobs=6 $*
据我所知,皮普似乎没有这种能力,但我可能错了。
要在python中进行多处理,您可以使用多处理包,[这里是我找到的指南](http://pymotw.com/2/multiprocessing/basics.html),如果您感兴趣,可以使用它,这是讨论它的python文档的link。我还发现这个问题Multiprocessing vs Threading Python很有用,它可以确保多处理可以像我认为的那样,利用多个cpu。
我已经浏览了pip源代码(可用的here),寻找对多处理包的引用,但没有找到对该包的任何使用。这意味着pip不使用/支持多处理。据我所知,这个/pip/commands/install.py文件是您在运行pip install <package>时调用的问题的兴趣所在。对于这个文件,特别是
/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,没有找到使用多个内核安装的引用。
医生:皮普没有按你的要求做。我可能是错的,因为我没有看那么长的来源,但我很确定它只是不支持它。
解决此问题的最终方法
因为所有的c/cpp文件都将使用
make
command编译,并且make
有一个选项指定编译源代码时应该使用多少cpu核,所以我们可以在make
上做一些技巧。备份原始的
make
命令:sudo cp /usr/bin/make /usr/bin/make.bak
编写一个“fake”
make
命令,该命令将--jobs=6
附加到其参数列表,并将它们传递给原始make命令make.bak
:make.bak --jobs=6 $@
因此,在这之后,即使不使用c libs编译python,也可以使用其他包含c libs的程序来加速6核的编译。实际上,使用
make
命令编译的所有文件都将加快速度。祝你好运。
使用:--安装选项=“--jobs=6”。
我有同样的要求,使用pip安装来加快编译进度。我的目标是PySide。刚开始我使用
pip3 install pyside
,大约需要30分钟(AMD1055T 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,所以我不确定这是否是correcct bash代码。我在windows中写这条评论。关键是将make重命名为make.bak,然后创建一个新的make,使用这个新的make调用make.bak并添加param--jobs=6据我所知,皮普似乎没有这种能力,但我可能错了。
要在python中进行多处理,您可以使用多处理包,[这里是我找到的指南](http://pymotw.com/2/multiprocessing/basics.html),如果您感兴趣,可以使用它,这是讨论它的python文档的link。我还发现这个问题Multiprocessing vs Threading Python很有用,它可以确保多处理可以像我认为的那样,利用多个cpu。
我已经浏览了pip源代码(可用的here),寻找对多处理包的引用,但没有找到对该包的任何使用。这意味着pip不使用/支持多处理。据我所知,这个
/pip/commands/install.py
文件是您在运行pip install <package>
时调用的问题的兴趣所在。对于这个文件,特别是您可以看到它没有任何对多处理包的引用,但我确实检查了所有其他文件以确定。
此外,我检查了pip install documentation,没有找到使用多个内核安装的引用。
医生:皮普没有按你的要求做。我可能是错的,因为我没有看那么长的来源,但我很确定它只是不支持它。
相关问题 更多 >
编程相关推荐