2015-03-26 3 views
2

J'essaye de déployer une application Django à Heroku où l'un des paquets requis vit sur https://testpypi.python.org/pypi et bien sûr Django est sur le principal PyPI serveur.Mettre en forme un fichier requirements.txt pour pip où un ou plusieurs paquets ont une URL d'index différente

Le fichier requirements.txt ressemble à ceci:

Django==1.7.7 
-i https://testpypi.python.org/pypi 
foo-bar==0.4 

en cours d'exécution pip install -r requirements.txt échoue avec l'erreur suivante:

Could not find any downloads that satisfy the requirement Django==1.7.7 (from -r requirements.txt (line 1)) 
Cleaning up... 
No distributions at all found for Django==1.7.7 (from -r requirements.txt (line 1)) 

Il semble donc que pip essaie de trouver Django sur testpypi

Alors J'ai essayé ceci:

-i https://pypi.python.org/pypi/ 
Django==1.7.7 
-i https://testpypi.python.org/pypi 
foo-bar==0.4 

Il en résulte la même erreur.

Si je ne place qu'un seul paquet de paquets dans le fichier des exigences pip est capable de trouver le paquet et de l'installer.

Question: Quelle est la syntaxe correcte pour spécifier plusieurs différents index-url arguments dans un seul fichier qui peut être lu par la commande pip install -r file

Je ne pense pas que cela importe, mais python est une version 3.4.0 et pip est la version pip 1.5.2.

J'ai mis à jour pip à la version 6.0.8, l'erreur est désormais rédigé comme:

Could not find any downloads that satisfy the requirement Django==1.7.7 (from -r requirements.txt (line 2)) 
No distributions at all found for Django==1.7.7 (from -r requirements.txt (line 2)) 
+0

Je vote pour fermer cette question car je crois que c'est une question XY et http://stackoverflow.com/questions/29289695/pip-how-to-install-packages-from-multiple-servers-from-a -requirements-file. est une meilleure version de la même question. – robbmj

Répondre

2

Par définition, toute définition d'index privé s'appliquera à chaque paquet

https://devcenter.heroku.com/articles/python-pip#private-indexes

All dependencies specified in that requirements file will resolve against that index.

Pour contourner ce problème, vous pouvez créer plusieurs fichiers de conditions et les mettre en cascade:

https://devcenter.heroku.com/articles/python-pip#cascading-requirements-files

If you would like to utilize multiple requirements files in your codebase, you can include the contents of another requirements file with pip:

-r ./path/to/prod-requirements.txt

Mise à jour: Il se trouve que la bonne méthode de traiter avec des indices privés est d'utiliser --extra-index-url commutateur. De l'documentation of pip:

Note that using --index-url removes the use of PyPI, while using --extra-index-url will add additional indexes.

Donc, mettre la ligne

--extra-index-url https://testpypi.python.org/pypi 

au-dessus de votre requirements.txt devrait être suffisant. Pas besoin de cascade du tout!

+0

Merci pour la réponse Selcuk, je comprends maintenant que la prémisse de ma question était incorrecte. J'ai ouvert une deuxième question qui pose réellement la bonne question: http: // stackoverflow.com/questions/29285108/pip-comment-cascade-requirements-files-and-use-private-indexes. Je vais laisser cette question car je crois que votre réponse a de la valeur. – robbmj