¿Puede un paquete de Python dependerá de una revisión de control de versiones específicas de otro paquete de Python?

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

Pregunta

Algunos paquetes de Python útiles se rompen en PyPI, y la única versión aceptable es una revisión en particular de un sistema de control de revisión. Puede que puede expresar en setup.py por ejemplo

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

¿Fue útil?

Solución

Es necesario hacer dos cosas. En primer lugar, requiere la versión exacta que desea, por ejemplo:.

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

y luego incluir un ajuste dependency_links especificar dónde encontrarlo:

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

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

Lo que pasa es que setuptools ve la etiqueta #egg en el enlace y guarda la dirección URL como una URL de descarga disponible para esa versión exacta del paquete. Entonces, cuando se trata de resolver ese requisito más tarde, se debe descargar la URL exacta de subversion.

(Nótese, sin embargo, que para que esto realmente trabajo, la revisión SVN objetivo tiene que construir realmente un huevo con ese nombre y la versión. De lo contrario, su dependencia se producirá un error en tiempo de ejecución! Por lo tanto, este en realidad sólo funciona si el paquete que está en función utiliza etiquetas de revisión de SVN en sus números de versión de compilación por defecto.)

Otros consejos

Si realmente necesita una versión oscura de otro paquete, y no hay manera de hacer ver con otras versiones, es posible que desee simplemente distribuir esa versión del paquete con su propio. Si es necesario ponerlo en su propio espacio de nombres para asegurar que su versión es la que se utiliza.

Yo no he descubierto cómo hacer referencia a esto desde setup.py pero pip puede comprobar a cabo revisiones específicas de paquetes de Python con un archivo de requisitos sencilla. Con un archivo llamado requisitos requires.txt, pip install -r requires.txt instalará todos los paquetes listados en dicho archivo (y sus dependencias).

Aquí es parte de mi archivo de requisitos. Las líneas que comienzan con -e echa un vistazo a las revisiones específicas de paquetes de control de versiones (Git, SVN, o mercurial), incluyendo mi proyecto, e instalarlas en un formato editable. pip freeze listas de 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 hay que distribuirlos juntos. No hay manera de descargar automáticamente con Python estándar.

Sin embargo, puede utilizar Buildout y crear un buildout.cfg que hace posible replicar el medio ambiente. Puede revisar e instalar las revisiones específicas si se utiliza como extensiones mr.developer.

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top