¿Puede un paquete de Python depender de una revisión de control de versión específica de otro paquete de Python?

Algunos paquetes útiles de Python están rotos en pypi, y la única versión aceptable es una revisión particular en un sistema de control de revisiones. Puede ser expresado en setup.py por ejemplo

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

Necesitas hacer dos cosas. Primero, requiera la versión exacta que desea, por ejemplo:

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

y luego incluya una configuración de dependency_links que especifique dónde encontrarla:

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

Tenga en cuenta que la versión #egg= parte de la URL dependency_links debe coincidir exactamente con lo que especificó en install_requires ; esto es lo que une las dos piezas.

Lo que sucede es que setuptools ve la etiqueta #egg en el enlace y guarda la URL como una URL de descarga disponible para esa versión precisa del paquete. Luego, cuando intente resolver ese requisito más adelante, debe descargar esa URL SVN precisa.

(Tenga en cuenta, sin embargo, que para que esto realmente funcione, la revisión SVN dirigida debe construir un huevo con ese nombre y versión. De lo contrario, su dependencia fallará en el tiempo de ejecución. Entonces, esto realmente solo funciona si el paquete está dependiendo. en usa tags de revisión SVN en sus números de versión de comstackción predeterminados.)

Si realmente necesita una versión oscura de otro paquete, y no hay forma de arreglárselas con otras versiones, es posible que desee distribuir esa versión del paquete con la suya. Si es necesario, colóquelo en su propio espacio de nombres para asegurarse de que su versión es la que se utiliza.

No he descubierto cómo hacer referencia a esto desde setup.py pero pip puede revisar revisiones específicas de paquetes de Python con un simple archivo de requisitos. Con un archivo de requisitos llamado requires.txt , pip install -r requires.txt instalará todos los paquetes enumerados en ese archivo (y sus dependencias).

Aquí es parte de mi archivo de requisitos. Las líneas que comienzan con -e verifican revisiones específicas de paquetes desde el control de versiones (git, svn o mercurial), incluido mi proyecto, e instalarlas en una forma editable. pip freeze enumera todos los paquetes instalados en este formato.

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) 

Puede liberar paquetes de versiones específicas, pero debe distribuirlos juntos. No hay forma de descargarlos automáticamente con Python estándar.

Sin embargo, puede usar Buildout y crear un buildout.cfg que permita replicar el entorno. Puede revisar e instalar revisiones específicas si usa extensiones como mr.developer.

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