"Pip多功能构建选项"

2024-03-29 12:15:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我发现pip在编译包时只使用单核。由于一些python包需要一些时间来使用pip构建,所以我希望在机器上使用多核。使用Makefile时,我可以按照以下命令执行:

make -j4

我怎么能为皮普实现同样的目标呢?


Tags: pip命令机器目标make时间makefile单核
2条回答

解决此问题的最终方法

因为所有的c/cpp文件都将使用makecommand编译,并且make有一个选项指定编译源代码时应该使用多少cpu核,所以我们可以在make上做一些技巧。

  1. 备份原始的make命令:

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

  2. 编写一个“fake”make命令,该命令将--jobs=6附加到其参数列表,并将它们传递给原始make命令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 --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/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

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

要在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>时调用的问题的兴趣所在。对于这个文件,特别是

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,没有找到使用多个内核安装的引用。

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

相关问题 更多 >