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?

40
demandé sur Jihun 2014-10-07 07:29:46

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.

3
répondu guribe94 2017-05-23 10:31:06

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 .

  1. Sauvegarde de l'original de votre "151910920 de la commande":

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

  2. écrivez une commande "fake" make , qui ajoutera --jobs=6 à sa liste de paramètres et les passera à la commande originale make make.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

25
répondu Plasmatium 2017-12-05 13:53:15