un paquet Python peut dépendre d'une révision de contrôle de version spécifique d'un autre package Python?

StackOverflow https://stackoverflow.com/questions/2087492

Question

Certains paquets Python utiles sont brisés sur pypi, et la seule version acceptable est une révision particulière dans un système de contrôle de révision. Cela peut-il être exprimé en setup.py par exemple

requires = 'svn://example.org/useful.package/trunk@1234'?

Était-ce utile?

La solution

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

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

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

dependency_links = ["svn://example.org/useful.package/trunk@1234#egg=useful.package-1.9dev-r1234"]

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

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

(Notez, cependant, que pour que cela vraiment travail, la révision SVN ciblée doit réellement construire un œuf avec ce nom et la version. Dans le cas contraire, votre dépendance échouera à l'exécution! Alors, ce vraiment ne fonctionne que si le paquet vous dépendez utilise des balises de révision SVN dans leurs numéros de version de compilation par défaut.)

Autres conseils

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

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 appelé exigences requires.txt, pip install -r requires.txt installera tous les paquets dans ce fichier (et leurs dépendances).

Voici une partie de mon dossier des exigences. Les lignes commençant par -e vérifier des révisions spécifiques des paquets de contrôle de version (git, svn, ou Mercurial), y compris mon projet, et les installer sous une forme modifiable. listes de pip freeze 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/webob@tip#egg=WebOb
-e svn+http://svn.sqlalchemy.org/sqlalchemy/trunk@6638#egg=SQLAlchemy
-e svn+http://svn.zope.org/repos/main/z3c.saconfig/trunk@106508#egg=z3c.saconfig
## The following requirements were added by pip --freeze:
APScheduler==1.01
simplejson==2.0.9
... (many more)

Vous pouvez libérer les paquets 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.

Cependant, vous pouvez utiliser Buildout et créer un buildout.cfg qui permet de reproduire l'environnement. Il peut vérifier 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

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