Comment spécifier l'ordre d'installation de python pip?
Je suis en train de travailler avec le tissu(0.9.4)+pip(0.8.2) et j'ai besoin d'installer certains modules python pour plusieurs serveurs. Tous les serveurs ont une ancienne version de setuptools (0.6c8) qui doit être mis à niveau pour pymongo module. Pymongo nécessite setuptools>=0.6c9.
Mon problème est que le pip démarre l'installation avec pymongo au lieu de setuptools qui provoque pip pour l'arrêter. Brassage module de commande dans les exigences de fichier ne semble pas aider.
requirements.txt:
setuptools>=0.6c9
pymongo==1.9
simplejson==2.1.3
Est-il un moyen de spécifier l'ordre d'installation pour le programme pep, comme il ne semble pas qu'il fasse par lui-même?
Cela peut être résolu avec deux exigences distinctes fichiers, mais il serait agréable si je n'avais pas besoin de maintenir des exigences multiples fichiers maintenant ou dans l'avenir.
Problème persiste avec le pip 0.8.3.
- Autant que je sache, il n'y a aucun moyen de définir un ordre dans l'obligation de fichier de pip.
- Si vous regardez dans le code de pip.py il y a un appel de classe
RequirementSet
où il sauver l'exigence, et cette classe utiliser un dictionnaire pour sauver les exigences , je pense que c'est la façon dont vous ne pouvez pas définir un ordre , mais j'aimerai savoir si je me trompe 🙂 - Ceci a été corrigé dans le pip 6.1.0 – voir ma réponse pour plus de détails.
- La réponse (encore) n'est. Et voici pourquoi: github.com/pypa/pip/issues/2362
Vous devez vous connecter pour publier un commentaire.
C'est un drôle de hack, mais possible que ça fonctionne. Écrire un script bash qui lit à partir de vos exigences fichier ligne par ligne et exécute la commande pip sur elle.
for line in open("requirements.txt", "r"): sudo("pip -E %s install %s" % (virtualenv_path, line))
Vous pouvez simplement utiliser:
-L 1
pour s'assurer que seule une ligne est utilisé.xargs -L 1 pip install < requirements.txt
requirements.txt
(lignes commençant par#
sont considérées comme des commentaires parpip
). Dans de tels cas, vous préférerez peut-être utiliser:grep -v '^#' requirements.txt | xargs pip install
Pour permettre à tous les types d'entrées (par exemple les paquets de dépôts git) dans requirements.txt vous devez utiliser les commandes suivantes
-n 1 et -L 1 options sont nécessaires pour installer les paquets un par un et traiter chaque ligne dans le requirements.txt fichier comme un élément distinct.
PIL==1.1.7 --allow-external PIL --allow-unverified PIL
)?Malheureusement, la mise à niveau de la suggestion ne fonctionne pas. Si vous lisez les autres détails dans https://github.com/pypa/pip/issues/24 vous verrez pourquoi
pip va construire tous les paquets d'abord, avant d'essayer de les installer. Donc, avec un fichier comme suit
La construction de statsmodels échouera avec l'instruction suivante
La solution de contournement donnée de la main à l'appel de pip pour chaque entrée dans les exigences de fichier (via un script shell) semble être la seule solution actuelle.
Comment le savez-vous? Nécessite de construire ou d'installer? Vous ne dites pas quelle est la version de Pymongo vous essayez d'installer mais en regardant
setup.py
fichier actuel (3.2.2) version il n'y a pas de spécification de ni ce que Pymongo a besoin pour exécutersetup.py
(setup_requires
), ni de ce qu'elle exige d'installer (install_requires
). Sans ces informations pip ne peut pas garantir la version spécifique de setuptools. Si Pymongo nécessite une version de setuptools pour exécuter sessetup.py
(par opposition à une exigence de setuptools pour exécutersetup
fonction elle-même) ensuite, l'autre problème est que, jusqu'à récemment il n'y avait aucun moyen de le spécifier. Maintenant, il y a de spécification PEP 518 – Spécification Minimale de Construire les Exigences du Système pour Python Projets, qui devrait être prochainement mis en œuvre dans le pep – Mettre en œuvre des PEP 518 soutien #3691.De commande de l'installation, cela a été corrigé dans le pip 6.1.0;
De pip install – Ordre d'Installation section de pip de la documentation:
Et plus tard:
Cependant, sans spécification d'exigences par Pymongo il ne va pas aider non plus.
La suite de @lukasrms est la solution que j'avais à faire pour l'obtenir pip pour installer mes exigences de l'un-à-un-temps:
PIL==1.1.7 --allow-external PIL --allow-unverified PIL
comme une entrée dans requirements.txtSi vous avez des commentaires à vos exigences de fichier que vous souhaitez utiliser:
J'ai terminé la course à pied pip à l'intérieur de virtualenv au lieu d'utiliser "pip -E" car avec -E pip pouvait encore voir les serveurs de site-packages et que visiblement foiré certaines installe.
J'ai aussi eu des problèmes avec les serveurs sans virtualenvs. Même si je l'ai installé setuptools séparé avec pip commande pymongo refusera d'être installé.
J'ai résolu ce problème en installant setuptools séparément avec easy_install que cela semble être un problème entre le pip et setuptools.
des extraits de fabfile.py:
J'ai eu ces problèmes avec le pip 0.8.3 et 0.8.2.
Désolé, ma première réponse a été de mal, parce que j'ai eu setuptools>=0.6c9.
Il semble qu'il n'est pas possible parce que pymongo de l'setup.py besoins setuptools>=0.6c9, mais le programme pep a téléchargés uniquement setuptools>=0.6c9, et pas encore installé.
Quelqu'un a discuté de ce sujet dans la question j'ai fait avant.
J'ai moi-même créé un problème il y a quelques semaines à ce sujet: N'exécutez pas
egg_info
pour chaque paquet dans la liste des exigences avant d'installer les paquets précédents.Désolé pour le bruit.
Première réponse:
De mise à niveau de votre pip à la version 0.8.3, il a un correction de l'ordre d'installation.
Maintenant, si vous mettez à niveau tout fonctionne 🙂
Vérifier les nouvelles ici: http://www.pip-installer.org/en/0.8.3/news.html