PIP build option pour utiliser multicore
j'ai trouvé que pip utilise un noyau unique seulement quand il compile des paquets. Puisque certains paquets python prennent du temps à construire en utilisant pip, j'aimerais utiliser multicore sur la machine. En utilisant Makefile, je peux faire comme la commande suivante:
make -j4
Comment puis-je obtenir la même chose pour pip?
2 réponses
de ce que je peux dire, il ne semble pas que pip ait cette capacité, mais je peux me tromper.
pour faire du multiprocessing en python, vous utilisez le paquet multiprocessing, [voici un guide que j'ai trouvé] ( http://pymotw.com/2/multiprocessing/basics.html ) sur la façon de le faire si vous êtes intéressé et il s'agit d'un lien vers les docs python qui en parlent. J'ai également trouvé cette question utile, Multiprocessing vs Threading Python , pour s'assurer que multiprocessing a fait ce que je pensais qu'il a fait, en profitant de plusieurs CPU.
j'ai parcouru le code source du pip (disponible ici ) à la recherche d'une référence au paquet multiprocessing et je n'ai trouvé aucune utilisation du paquet. Cela signifierait que pip n'utilise pas/ne supporte pas le multiprocessing. De ce que je peux dire, le fichier /pip/commands/install.py
est celui qui intéresse votre question telle qu'elle est. appelé quand vous lancez pip install <package>
. Pour ce fichier spécifiquement les importations sont
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
que vous pouvez voir n'a aucune référence au paquet multiprocessing mais j'ai vérifié tous les autres fichiers juste pour être sûr.
de plus, j'ai vérifié la documentation pip install documentation et n'ai trouvé aucune référence à l'installation en utilisant plusieurs noyaux.
TL; DR: Pip ne fait pas ce que vous demandez. J'ai peut-être faux car je n'ai pas regardé la source aussi longtemps mais je suis presque sûr qu'il ne le soutient pas.
Le Ultime Façon de Résoudre Ce Problème
parce que tous les fichiers c / cpp seraient compilés en utilisant make
commend, et make
a une option qui spécifie combien de cœurs cpu doivent être utilisés pour compiler le code source, nous pourrions faire quelques trucs sur make
.
-
Sauvegarde de l'original de votre "151910920 de la commande":
sudo cp /usr/bin/make /usr/bin/make.bak
-
écrivez une commande "fake"
make
, qui ajoutera--jobs=6
à sa liste de paramètres et les passera à la commande originale makemake.bak
:make.bak --jobs=6 $@
donc après cela, pas même compiler python avec c libs, mais aussi d'autres contiennent c libs serait d'accélérer la compilation de 6 cœurs. En fait, tous les fichiers compilés en utilisant la commande make
accélérer.
et bonne chance.
utilisation: --install-option="--jobs=6 " .
pip3 install --install-option="--jobs=6" PyXXX
j'ai la même demande que d'utiliser pip install pour accélérer la progression de la compilation. Ma cible pkg est PySide. Au début j'utilise pip3 install pyside
, cela me prend près de 30 minutes (AMD 1055T 6-Core, 10G RAM), un seul coeur prend 100% de charge.
il n'y a pas d'indices pip3 --help
, mais j'ai trouvé beaucoup d'options comme pip install -u pyXXX
, mais je ne savais pas ce qu'était '-u' et ce paramètre n'était pas dans pip --help
aussi. J'ai essayé 'pip3 install -- help' Et voici venu la réponse: --install-option .
j'ai lu le code du code de PySide et j'ai trouvé un autre indice: OPTION_JOBS = has_option('jobs')
, j'ai mis ipdb.set_trace () et enfin comprendre comment utiliser multicore pour compiler en utilisant pip install.
il m'a fallu environ 6 minutes.
--------------------------mise à jour------------------------------
comme commentaire ci-dessous, j'ai finalement utilisé des trucs comme ça:
cd /usr/bin
sudo mv make make.bak
touch make
puis modifier make: vim make
ou d'une autre façon que vous aimez et tapez ceci:
make.bak --jobs=6 $*
Je ne connais pas bash, donc je ne suis pas sûr que ce soit le bon code bash. Je suis en train d'écrire ce commentaire dans windows. La clé est de renommer en faire en faire.bak, puis créer une nouvelle marque, utilisez cette nouvelle marque pour appeler la marque.bak avec ajout de param --emplois=6