Question

Je travaille avec le tissu (0.9.4) + PIP (0,8.2) et j'ai besoin d'installer des modules Python pour plusieurs serveurs. Tous les serveurs ont une ancienne version de Setuptools (0,6c8) qui doit être mise à niveau pour le module Pymongo. Pymongo nécessite Settuptools> = 0,6c9.

Mon problème est que PIP démarre l'installation avec Pymongo au lieu de Setuptools qui fait que PIP s'arrête. La commande de module de mélange dans le fichier d'exigences ne semble pas aider.

exigences.txt:

setuptools>=0.6c9
pymongo==1.9
simplejson==2.1.3

Existe-t-il un moyen de spécifier l'ordre d'installation pour PIP car il ne semble pas le faire correctement seul?

Cela peut être résolu avec deux fichiers d'exigences distincts, mais ce serait bien si je n'avais pas besoin de maintenir plusieurs fichiers d'exigences maintenant ou à l'avenir.

Le problème persiste avec PIP 0.8.3.

Était-ce utile?

La solution

C'est un hack idiot, mais pourrait bien fonctionner. Écrivez un script bash qui lit à partir de votre fichier d'exigences ligne par ligne et exécute la commande PIP dessus.

#!/bin/bash
for line in $(cat requirements.txt)
do
  pip install $line -E /path/to/virtualenv
done

Autres conseils

Vous pouvez simplement utiliser:

cat requirements.txt | xargs pip install

Pour autoriser tous les types d'entrées (par exemple des packages à partir de référentiels GIT) dans les exigences.txt, vous devez utiliser l'ensemble de commandes suivant

cat requirements.txt | xargs -n 1 -L 1 pip install

-N 1 et -L 1 Des options sont nécessaires pour installer les packages un par un et traiter chaque ligne dans le fichier exigence.txt en tant qu'élément distinct.

Malheureusement, la suggestion de mise à niveau ne fonctionnera pas. Si vous lisez les autres détails dans https://github.com/pypa/pip/issues/24 Vous verrez pourquoi

PIP construira d'abord tous les packages avant d'essayer de les installer. Donc, avec un fichier d'exigences comme celui qui suit

numpy==1.7.1
scipy==0.13.2
statsmodels==0.5.0

La construction de modèles de statistiques échouera avec l'énoncé suivant

ImportError: statsmodels requires numpy

La solution de contournement donnée pour appeler manuellement PIP pour chaque entrée dans le fichier d'exigences (via un script shell) semble être la seule solution actuelle.

Pymongo nécessite des setuptools> = 0,6c9

Comment savez-vous? Nécessite de construire ou d'installer? Vous ne dites pas quelle version de Pymongo vous essayiez d'installer mais en regardant setup.py Fichier pour la version actuelle (3.2.2) Il n'y a aucune spécification de ce que Pymongo n'a besoin d'exécuter setup.py (setup_requires) ni ce qu'il a besoin d'installer (install_requires). Sans de telles informations, Pip ne peut pas garantir une version spécifique de Setuptools. Si Pymongo nécessite une version spécifique de Setuptools pour exécuter son setup.py (par opposition à l'exigence de Sétuptools setup Fonction elle-même) alors l'autre problème est que jusqu'à récemment, il n'y avait aucun moyen de spécifier cela. Maintenant, il y a des spécifications - PEP 518 - Spécification des exigences minimales du système de construction pour les projets Python, qui devrait être mis en œuvre sous peu dans PIP - Implémentation du support PEP 518 # 3691.

Quant à l'ordre d'installation, cela a été fixé dans PIP 6.1.0;

De Installation PIP - Commande d'installation section de la documentation de Pip:

En ce qui concerne V6.1.0, PIP installe les dépendances avant leurs personnes à charge, c'est-à-dire dans "Ordre topologique". Il s'agit du seul engagement que PIP fait actuellement lié à la commande.

Et ensuite:

Avant V6.1.0, PIP n'a pris aucun engagement sur l'installation de la commande.

Cependant, sans spécification appropriée des exigences par Pymongo, cela ne vous aidera pas non plus.

Après la solution de @ Lukasrms - j'ai dû le faire pour amener Pip à installer mes exigences en une seule fois:

cat requirements.txt | xargs -n 1 pip install

Si vous avez des commentaires dans votre fichier d'exigences, vous voudrez utiliser:

grep -v "^#" requirements.txt | xargs pip install

J'ai fini par exécuter PIP à l'intérieur de VirtualEnv au lieu d'utiliser "pip -e" car avec -e pip pouvait toujours voir les packages de sites de serveurs et cela a évidemment gâché certaines des installations.

J'ai également eu des problèmes avec les serveurs sans virtualvs. Même si j'ai installé Settuptools avec une commande PIP séparée, Pymongo refuserait d'être installé.

J'ai résolu ceci en installant SETUTPOTOHS séparément avec Easy_install, car cela semble être un problème entre PIP et SETUTPOTOLOS.

Extraits de Fabfile.py:

env.activate = "source %s/bin/activate" % virtualenv_path

_virtualenv("easy_install -U setuptools")
_virtualenv("pip install -r requirements.txt")

def _virtualenv(command)
    if env.virtualenv:
        sudo(env.activate + "&&" + command)
    else:
        sudo(command)

J'ai eu ces problèmes avec PIP 0,8,3 et 0,8,2.

Désolé, ma première réponse a été fausse, car j'avais des Sétuptools> = 0,6c9.

Il semble que ce ne soit pas possible car Pymongo's setup.py a besoin de setuptools> = 0,6c9, mais PIP n'a téléchargé que setuptools> = 0,6c9, et non encore installé.

Quelqu'un en a discuté dans le numéro que j'ai déjà signalé.

J'ai mon propre problème il y a quelques semaines: Ne cours pas egg_info à chaque package dans la liste des exigences avant d'installer les packages précédents.

Désolé pour les bruyants.


Première réponse:

Mettez à niveau votre PIP à la version 0.8.3, il a un Bugfix à l'ordre d'installation.

Maintenant, si vous améliorez tout fonctionne :-)

Vérifiez les nouvelles ici: http://www.pip-installer.org/en/0.8.3/news.html

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top