2013-06-28 15 views
9

ho cercato di installare un pacchetto con la seguente configurazione configurato:setuptools in grado di utilizzare link dependency_links

setup(
    packages=find_packages(), 
    include_package_data=True, 
    install_requires=[ 
     'Django==1.5.1', 
     'xhtml2pdf', 
    ], 
    dependency_links=[ 
     'https://github.com/chrisglass/xhtml2pdf/zipball/28d12fcaafc4c47b13f1f6f42c2bfb73f90cc947#egg=xhtml2pdf', 
    ], 
) 

Tuttavia installa il pacchetto XHTML2PDF da Cheese Shop, invece di utilizzare il collegamento specificato. Secondo l'uscita (ho eseguito l'installazione utilizzando pip install -vvv package.tar.gz), potrebbe o non analizzare la versione dal link (a // 1 nel codice), o non ho specificato il nome del progetto corretto (a // 2 in codice):

Downloading/unpacking xhtml2pdf (from mypackage==1.3) 
    Getting page https://pypi.python.org/simple/xhtml2pdf/ 
    URLs to search for versions for xhtml2pdf (from mypackage==1.3): 
    * https://pypi.python.org/simple/xhtml2pdf/ 
    * https://github.com/chrisglass/xhtml2pdf/zipball/28d12fcaafc4c47b13f1f6f42c2bfb73f90cc947#egg=xhtml2pdf 
    Getting page https://github.com/chrisglass/xhtml2pdf/zipball/28d12fcaafc4c47b13f1f6f42c2bfb73f90cc947 
    Analyzing links from page https://pypi.python.org/simple/xhtml2pdf/ 
    Found link https://pypi.python.org/packages/source/x/xhtml2pdf/xhtml2pdf-0.0.1.tar.gz#md5=9f83a2bcb67858aca9e058761f3bea7b (from https://pypi.python.org/simple/xhtml2pdf/), version: 0.0.1 
    Found link https://pypi.python.org/packages/source/x/xhtml2pdf/xhtml2pdf-0.0.2.tar.gz#md5=d640ccb9470942fd2e6d3ae740c27dc1 (from https://pypi.python.org/simple/xhtml2pdf/), version: 0.0.2 
    Found link https://pypi.python.org/packages/source/x/xhtml2pdf/xhtml2pdf-0.0.1.zip#md5=4ad41c845735ae14da99085311d84c00 (from https://pypi.python.org/simple/xhtml2pdf/), version: 0.0.1 
    Found link https://pypi.python.org/packages/source/x/xhtml2pdf/xhtml2pdf-0.0.4.zip#md5=5f035cd6532bef99b7d35054caaa6ef7 (from https://pypi.python.org/simple/xhtml2pdf/), version: 0.0.4 
    Found link https://pypi.python.org/packages/source/x/xhtml2pdf/xhtml2pdf-0.0.3.zip#md5=32599c74f26f57ebd002765741ec64f7 (from https://pypi.python.org/simple/xhtml2pdf/), version: 0.0.3 
    Found link https://pypi.python.org/packages/source/x/xhtml2pdf/xhtml2pdf-0.0.2.zip#md5=4047a8234eb6b77591d526dcb1f60161 (from https://pypi.python.org/simple/xhtml2pdf/), version: 0.0.2 
    Found link https://pypi.python.org/packages/source/x/xhtml2pdf/xhtml2pdf-0.0.3.tar.gz#md5=13b0d6059b72c994473fddfa7a528451 (from https://pypi.python.org/simple/xhtml2pdf/), version: 0.0.3 
    Found link https://pypi.python.org/packages/source/x/xhtml2pdf/xhtml2pdf-0.0.5.zip#md5=8db99aae8536436a2b7b0b3987197b99 (from https://pypi.python.org/simple/xhtml2pdf/), version: 0.0.5 
    Found link https://pypi.python.org/packages/source/x/xhtml2pdf/xhtml2pdf-0.0.5.tar.gz#md5=1ef268b40c11bf966f7c6c5504299e3e (from https://pypi.python.org/simple/xhtml2pdf/), version: 0.0.5 
    Found link https://pypi.python.org/packages/source/x/xhtml2pdf/xhtml2pdf-0.0.4.tar.gz#md5=36b015a4e2918460711cbc5eebe026ce (from https://pypi.python.org/simple/xhtml2pdf/), version: 0.0.4 
    Analyzing links from page https://codeload.github.com/chrisglass/xhtml2pdf/legacy.zip/28d12fcaafc4c47b13f1f6f42c2bfb73f90cc947 
    Could not parse version from link: https://github.com/chrisglass/xhtml2pdf/zipball/28d12fcaafc4c47b13f1f6f42c2bfb73f90cc947#egg=xhtml2pdf // 1 
    Skipping link https://github.com/chrisglass/xhtml2pdf/zipball/28d12fcaafc4c47b13f1f6f42c2bfb73f90cc947#egg=xhtml2pdf; wrong project name (not xhtml2pdf) // 2 
    Using version 0.0.5 (newest of versions: 0.0.5, 0.0.5, 0.0.4, 0.0.4, 0.0.3, 0.0.3, 0.0.2, 0.0.2, 0.0.1, 0.0.1) 
    Downloading xhtml2pdf-0.0.5.zip (118kB): 
    Downloading from URL https://pypi.python.org/packages/source/x/xhtml2pdf/xhtml2pdf-0.0.5.zip#md5=8db99aae8536436a2b7b0b3987197b99 (from https://pypi.python.org/simple/xhtml2pdf/) 
...Downloading xhtml2pdf-0.0.5.zip (118kB): 118kB downloaded 

Se aggiungo il numero di versione al pacchetto (xhtml2pdf-0.0.5) in entrambi install_requires e dependency_links trova i collegamenti Git e non li lamenta, ma installa ancora da PyPi.

Ho cercato una risposta per un po 'ora, ma non sono stato in grado di trovare la soluzione. Ho bisogno della versione Git, perché ha correzioni che la versione PyPi non ha ancora.

+0

possibile duplicato di [Come posso installare setuptools per installare un pacchetto da un'altra fonte disponibile anche su pypi con lo stesso numero di versione?] (Http://stackoverflow.com/questions/11032125/how-can-i-make -setuptools-install-a-package-from-another-source-thats-also-avai) –

+0

Sì, è un duplicato di [Come posso fare setuptools installare un pacchetto da un'altra fonte che è anche disponibile su pypi con la stessa versione numero?] (http://stackoverflow.com/questions/11032125/how-can-i-make-setuptools-install-a-package-from-another-source-thats-also-avai), che ho già annunciato in la risposta che ho dato alla mia domanda. – Heyl1

risposta

15

Ok, quindi ho risolto (o violato, a seconda di come lo si guarda) la mia domanda.

Ci sono stati due problemi con il codice.

Il primo problema era che il collegamento non era corretto. Anche se ho visto formattato come questo altrove, che non avrebbe funzionato per me (se l'utilizzo setuptools mkvirtualenv mypackage o distribuire mkvirtualenv --distribute mypackage). Ho pensato che era necessaria l'estensione zip alla fine e ho scoperto su Github che è possibile scaricare uno specifico commit usando il formato https://github.com/user/project/archive/commit.zip.

Quindi ho ancora avuto il problema che, sebbene ora riconoscesse il collegamento, avrebbe comunque scelto la versione PyPi sulla versione Github. Il motivo è che gli ultimi commit (dopo il rilascio a PyPi) su Github hanno ancora lo stesso numero di versione dell'ultima versione su PyPi. Quindi risulta che questa domanda è in realtà un duplicato di How can I make setuptools install a package from another source that's also available on pypi with the same version number?. Per cercare di risolverlo ho provato le seguenti impostazioni nel mio setup.py (alcuni di questi sono stati menzionati in altre domande StackOverflow come lavorare):

install_requires=[], 
dependency_links=['https://github.com/chrisglass/xhtml2pdf/archive/28d12fcaafc4c47b13f1f6f42c2bfb73f90cc947.zip',], 

Questo non è stato installato xhtml2pdf affatto.

install_requires=['xhtml2pdf',], 
dependency_links=['https://github.com/chrisglass/xhtml2pdf/archive/28d12fcaafc4c47b13f1f6f42c2bfb73f90cc947.zip#egg=xhtml2pdf',], 

Questo ha installato l'ultima versione di PyPi (0.0.5).

install_requires=['xhtml2pdf==0.0.5',], 
dependency_links=['https://github.com/chrisglass/xhtml2pdf/archive/28d12fcaafc4c47b13f1f6f42c2bfb73f90cc947.zip#egg=xhtml2pdf-0.0.5',], 

Questo ha installato la versione 0.0.5 in PyPi. In realtà ha senso che setuptools e distribuiscono avrebbe scelto la versione Cheese Shop rispetto alla versione Github, se il numero di versione è la stessa, perché la versione Cheese Shop dovrebbe essere più stabile.

install_requires=['xhtml2pdf==0.0.6',], 
dependency_links=['https://github.com/chrisglass/xhtml2pdf/archive/28d12fcaafc4c47b13f1f6f42c2bfb73f90cc947.zip#egg=xhtml2pdf-0.0.6',], 

Questa scaricato il pacchetto da Github (perché la versione 0.0.6 non esiste su Cheese Shop), tuttavia venire installare volta è lamentato del fatto che le versioni non corrispondono, perché la versione specificata nel pacchetto è in realtà 0.0.5.

install_requires=['xhtml2pdf<=0.0.6',], 
dependency_links=['https://github.com/chrisglass/xhtml2pdf/archive/28d12fcaafc4c47b13f1f6f42c2bfb73f90cc947.zip#egg=xhtml2pdf-0.0.6',], 

Questo ha funzionato alla fine. Setuptools (e distribuito) ha realizzato che la versione di Github deve essere più recente poiché è quello che ho detto. E arrivano i tempi di installazione che non si lamentano del fatto che la versione attuale è 0.0.5 perché soddisfa ancora i requisiti.

Si può considerare questo un po 'un hack. Non sono completamente soddisfatto di questa soluzione. Ma ho anche una scadenza e funziona. Una parola di cautela: inizierò ad avere problemi quando la versione 0.0.6 è effettivamente rilasciata. Voglio appuntare correttamente le mie dipendenze, quindi non mi imbatto in problemi in futuro quando sto reinstallando, e questo non è un pin appropriato. Tuttavia suppongo che tu possa giocherellare con il numero di versione usando questa documentazione: https://pythonhosted.org/setuptools/setuptools.html#specifying-your-project-s-version. La chiave è che la versione dovrebbe (fingere di) essere superiore a 0.0.5, ma anche un numero (con caratteri opzionali) che non ti aspetti di mostrare come rilascio in PyPi in futuro (e ovviamente inferiore a quello molto probabilmente sarà il prossimo numero di rilascio (0.0.6 nel mio caso)).

Spero che questo sia stato utile a chiunque altro :).

Nota: utilizzo un file requirements.txt che viene elaborato dal file setup.py per estrarre i requisiti. Quando si utilizza https://github.com/chrisglass/xhtml2pdf/archive/28d12fcaafc4c47b13f1f6f42c2bfb73f90cc947.zip#egg=xhtml2pdf-0.0.6 nel file requirements.txt, verrà comunque installato correttamente utilizzando pip install -r requirements.txt.

+0

Questo è destinato a interrompersi se quando l'upstream si sposta anche al prossimo incremento di versione? –

+2

Sì, l'ho menzionato nell'ultimo secondo paragrafo con una parola di cautela: "Una parola di cautela: inizierò ad avere problemi quando la versione 0.0.6 è effettivamente rilasciata. Voglio collegare correttamente le mie dipendenze, quindi non mi imbatto in problemi in futuro quando sto reinstallando, e questo non è un pin corretto. ... " – Heyl1

Problemi correlati