Pip build opcja użycia multicore

Odkryłem, że pip używa tylko jednego rdzenia, gdy kompiluje Pakiety. Ponieważ niektóre pakiety Pythona wymagają trochę czasu, aby zbudować je za pomocą pip, chciałbym wykorzystać multicore na maszynie. Podczas korzystania z Makefile, mogę to zrobić jak następujące polecenie:

make -j4

Jak mogę osiągnąć to samo dla pip?

Author: Jihun, 2014-10-07

2 answers

Z tego co wiem, to nie wygląda na to, że pip ma taką zdolność, ale mogę się mylić.

Aby wykonać multiprocessing w Pythonie używasz pakietu multiprocessing, [oto poradnik, który znalazłem] ( http://pymotw.com/2/multiprocessing/basics.html ) o tym, jak to zrobić, jeśli jesteś zainteresowany i jest to link do dokumentów Pythona, które o tym mówią. Okazało się również, że to pytanie jest przydatne, Multiprocessing vs Threading Python , aby upewnić się, że multiprocessing zrobił to, co ja myślałem, że tak, korzystając z wielu procesorów.

Przejrzałem kod źródłowy pip (dostępny tutaj ) szukając odniesienia do pakietu wieloprocesorowego i nie znalazłem żadnego zastosowania pakietu. Oznaczałoby to, że pip nie wykorzystuje / nie wspiera przetwarzania wieloprocesorowego. Z tego, co mogę powiedzieć, plik /pip/commands/install.py jest interesujący dla Twojego pytania, jak to się nazywa, gdy uruchamiasz pip install <package>. Dla tego pliku Import jest

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

Co widać nie mam jakieś odniesienia do pakietu wieloprocesorowego, ale sprawdziłem wszystkie inne pliki, aby się upewnić.

Ponadto sprawdziłem dokumentację instalacji pip i nie znalazłem żadnego odniesienia do instalacji przy użyciu wielu rdzeni.

TL;DR: Pip nie robi tego, o co prosisz. Może się mylę, ponieważ nie patrzyłem na źródło tak długo, ale jestem prawie pewien, że po prostu go nie wspiera.

 3
Author: guribe94,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 10:31:06

Ostateczny sposób rozwiązania tego problemu

Ponieważ wszystkie pliki C / cpp byłyby skompilowane przy użyciu make commend, a make ma opcję określającą ile rdzeni procesora ma być użyte do skompilowania kodu źródłowego, możemy zrobić kilka trików na make.

  1. Kopia zapasowa oryginalnej komendy make:

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

  2. Napisz polecenie "fake" make, które doda --jobs=6 do swojej listy parametrów i przekaże je do oryginalnego make polecenie make.bak:

    make.bak --jobs=6 $@

Więc po tym, nawet nie kompilować Pythona z C libs, ale także inne zawierają C libs przyspieszy kompilację o 6 rdzeni. W rzeczywistości wszystkie pliki skompilowane za pomocą polecenia make przyspieszą.

I powodzenia.

Użyj: --install-option="--jobs=6".

pip3 install --install-option="--jobs=6" PyXXX

Mam to samo zapotrzebowanie, że używam pip install, aby przyspieszyć postęp kompilacji. Moim celem jest PySide. Na początku używam pip3 install pyside, zajmuje mi prawie 30 minut (AMD 1055T 6-rdzeni, 10G RAM), tylko jeden rdzeń pobiera 100% obciążenia.

Nie ma wskazówek w pip3 --help, ale znalazłem wiele opcji typu pip install -u pyXXX, ale nie wiedziałem, co to jest '- u ' i tego parametru też nie było w pip --help. Próbowałem 'pip3 install --help' I pojawiła się odpowiedź: --install-option.

Przeczytałem kod PySide ' a i znalazłem kolejną wskazówkę: OPTION_JOBS = has_option('jobs'), wstawiłem ipdb.set_trace () i wreszcie zrozumieć, jak używać multicore do kompilacji za pomocą pip install.

Zajęło mi to około 6 minut.

--------------------------Aktualizacja------------------------------

Jako komentarz poniżej, w końcu użyłem takich trików: cd /usr/bin sudo mv make make.bak touch make następnie Edytuj make: vim make lub w inny sposób i wpisz to: make.bak --jobs=6 $* Nie znam Basha, więc nie jestem pewien, czy jest to poprawny kod Basha. Piszę ten komentarz w windows. Kluczem jest zmiana nazwy make na make.bak, a następnie utworzyć nową markę, użyj tej nowej marki, aby zadzwonić do make.bak z dodanym param --jobs=6

 25
Author: Plasmatium,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-05 13:53:15