2010-01-18 2 views

Répondre

12

Vous devez faire deux choses. Tout d'abord, exiger la version exacte que vous souhaitez, par exemple:

install_requires = "useful.package==1.9dev-r1234" 

puis inclure un paramètre dependency_links spécifiant où le trouver:

dependency_links = ["svn://example.org/useful.package/[email protected]#egg=useful.package-1.9dev-r1234"] 

Notez que la version #egg= partie de l'URL dependency_links doit exactement correspond à ce que vous avez spécifié dans install_requires; c'est ce qui lie les deux pièces ensemble.

Qu'est-ce qui se passe est que setuptools voit la balise #egg sur le lien et enregistre l'URL comme URL de téléchargement disponible pour cette version précise du package. Ensuite, lorsqu'il essaie de résoudre cette exigence plus tard, il doit télécharger cette URL SVN précise.

(Notez cependant que pour que cela fonctionne réellement, la révision SVN ciblée doit réellement construire un oeuf avec ce nom et cette version.) Sinon, votre dépendance échouera à l'exécution! le paquet dont vous dépendez utilise les balises de révision SVN dans leurs numéros de version de construction par défaut.)

+1

Oui, ça ne marche pas/vraiment/dans le cas courant ... Je viens d'utiliser pip maintenant. – joeforker

+0

ne devrait pas "find_links" être réellement "dependency_links"? –

+0

Merci, Gabriel. Je l'ai réparé. –

2

Si vous avez vraiment besoin d'une version obscure d'un autre paquet, et qu'il n'y a aucun moyen de faire avec les autres versions, vous pouvez simplement distribuer cette version du paquet avec la vôtre. Si nécessaire, mettez-le dans votre propre espace de noms pour vous assurer que votre version est celle qui est utilisée.

1

Vous pouvez libérer des packages de versions spécifiques, mais vous devez les distribuer ensemble. Il n'y a aucun moyen de les télécharger automatiquement avec Python standard. Toutefois, vous pouvez utiliser Buildout et créer un fichier buildout.cfg qui permet de répliquer l'environnement. Il peut extraire et installer des révisions spécifiques si vous utilisez des extensions comme mr.developer.

http://pypi.python.org/pypi/zc.buildout http://pypi.python.org/pypi/mr.developer

2

Je n'ai pas compris comment référencer ce billet depuis setup.py mais pip peut vérifier des révisions spécifiques de paquets Python avec un simple fichier des exigences. Avec un fichier des exigences appelé requires.txt, pip install -r requires.txt va installer tous les paquets listés dans ce fichier (et leurs dépendances).

Voici une partie de mon fichier des exigences. Les lignes commençant par -e vérifient les révisions spécifiques des paquets du contrôle de version (git, svn, ou mercurial), y compris mon projet, et les installent sous une forme éditable. pip freeze répertorie tous les packages installés dans ce format.

requires.txt:

-e hg+file:///home/me/my-private-project#egg=myproject 
-e hg+http://bitbucket.org/ianb/[email protected]#egg=WebOb 
-e svn+http://svn.sqlalchemy.org/sqlalchemy/[email protected]#egg=SQLAlchemy 
-e svn+http://svn.zope.org/repos/main/z3c.saconfig/[email protected]#egg=z3c.saconfig 
## The following requirements were added by pip --freeze: 
APScheduler==1.01 
simplejson==2.0.9 
... (many more) 
+0

Voulez-vous vraiment avoir une forme éditable de vos dépendances? –

+0

Parfois, je le fais. – joeforker

Questions connexes