Può un package Python dipendere da una revisione specifica di controllo della versione di un altro pacchetto Python?

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

Domanda

Alcuni pacchetti Python utili sono rotti in pypi, e l'unica versione accettabile è una particolare revisione in un sistema di controllo di revisione. che può essere espressa in setup.py per esempio

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

È stato utile?

Soluzione

Hai bisogno di fare due cose. In primo luogo, richiede la versione esatta che si desidera, per esempio:.

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

e quindi includere un ambiente dependency_links specificando dove trovarlo:

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

Si noti che la parte la versione #egg= del URL dependency_links deve esattamente corrispondere a ciò che si è specificato in install_requires; questo è ciò che unisce i due pezzi insieme.

Quello che succede è che setuptools vede il tag #egg sul link e salva l'URL come un URL di download disponibili per quella versione precisa del pacchetto. Poi, quando si cerca di risolvere tale requisito in seguito, si deve scaricare quel preciso URL SVN.

(Si noti, tuttavia, che proprio per questo a davvero il lavoro, la revisione mirata SVN deve costruire in realtà un uovo con lo stesso nome e la versione. In caso contrario, la vostra dipendenza non riuscirà a runtime! Quindi, questo funziona davvero solo se il pacchetto che si sta a seconda utilizza i tag di revisione SVN nei loro numeri di versione di compilazione di default.)

Altri suggerimenti

Se davvero bisogno di una versione oscura di un altro pacchetto, e non c'è modo di fare che fare con le altre versioni, si potrebbe voler distribuire semplicemente che la versione del pacchetto con il vostro. Se necessario metterlo nel proprio spazio dei nomi per assicurarsi che la versione è quella che viene utilizzata.

Non ho capito come fare riferimento a questo da setup.py ma pip può controllare revisioni specifiche di pacchetti Python con un semplice file di requisiti. Con un file chiamato requisiti requires.txt, pip install -r requires.txt installerà tutti i pacchetti elencati nel file (e le loro dipendenze).

Qui è parte del mio file requisiti. Le linee che iniziano con -e controllare revisioni specifiche di pacchetti dal controllo di versione (git, svn, o mercuriale), tra cui il mio progetto, e installarli in una forma modificabile. liste pip freeze tutti i pacchetti installati in questo 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)

È possibile rilasciare i pacchetti di versioni specifiche, ma è necessario distribuire insieme. Non v'è alcun modo per scaricarli automaticamente con Python standard.

Tuttavia, è possibile utilizzare Buildout e creare un buildout.cfg che permette di replicare l'ambiente. E 'possibile controllare e installare revisioni specifiche se si utilizza le estensioni come mr.developer.

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top