我發現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