2013-06-28 14 views
9

Ich habe ein Paket mit dem folgende Setup zu installieren versuche, konfiguriert:Setuptools nicht in der Lage Link zu verwenden, um von 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', 
    ], 
) 

jedoch das XHTML2PDF Paket von PyPI installiert, statt den angegebenen Link zu verwenden. Nach dem Ausgang (lief ich die Installation pip install -vvv package.tar.gz verwendet wird), könnte es entweder nicht mit der Version aus dem Link analysiert (bei // 1 in Code), oder ich habe nicht die richtigen Projektnamen angegeben (bei // 2 in Code):

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 

Wenn ich beide fügen sie in die Versionsnummer auf der Verpackung (xhtml2pdf-0.0.5) install_requires und dependency_links es die Git-Links findet und beschwert sich nicht über sie, aber installiert noch von PyPI.

Ich habe jetzt eine Zeit lang auf eine Antwort gesucht, aber nicht in der Lage, die Lösung zu finden. Ich brauche die Git-Version, weil sie Korrekturen enthält, die die PyPi-Version noch nicht hat.

+0

möglich duplicate of [Wie kann ich setuptools installieren ein Paket aus einer anderen Quelle, die auch auf Pypi mit der gleichen Versionsnummer verfügbar ist?] (Http://stackoverflow.com/questions/11032125/how-can-i-make -setuptools-install-a-package-from-another-source-thats-auch-avai) –

+0

Ja, es ist ein Duplikat von [Wie kann ich setuptools installieren ein Paket aus einer anderen Quelle, die auch auf Pypi mit der gleichen Version verfügbar ist Nummer?] (http://stackoverflow.com/questions/11032125/how-can-i-make-setuptools-install-a-package-from-another-source-thats-also-avai), die ich bereits angekündigt habe Die Antwort gab ich meiner eigenen Frage. – Heyl1

Antwort

15

Ok, also habe ich meine eigene Frage gelöst (oder gehackt, je nachdem wie man es betrachtet).

gab es zwei Probleme mit dem Code.

Das erste Problem war, dass die Verknüpfung nicht korrekt war. Obwohl ich es wie diese an anderer Stelle formatiert gesehen habe, wäre es nicht für mich arbeiten (ob Setuptools mkvirtualenv mypackage oder verteilen mkvirtualenv --distribute mypackage verwenden). Habe ich es die Zip-Erweiterung am Ende benötigt und fand heraus, auf Github können Sie eine bestimmte herunterladen commit mit dem https://github.com/user/project/archive/commit.zip Format.

Dann hatte ich immer noch das Problem, dass, obwohl es jetzt den Link erkennen würde, es immer noch die PyPi-Version über die Github-Version auswählen würde. Der Grund dafür ist, dass die letzten Commits (nach der Veröffentlichung zu PyPI) auf Github noch die gleiche Versionsnummer wie die neueste Version auf PyPI haben. Es stellt sich heraus, dass diese Frage tatsächlich ein Duplikat von How can I make setuptools install a package from another source that's also available on pypi with the same version number? ist. Um zu versuchen, es zu lösen habe ich versucht, die folgenden Einstellungen in meinem setup.py (einige von ihnen haben in anderen Fragen wie Stackoverflow Arbeit erwähnt):

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

Das hat überhaupt nicht installieren xhtml2pdf.

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

Dies installierte die neueste PyPi-Version (0.0.5).

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

Dies installierte die Version 0.0.5 in PyPi. Es macht eigentlich Sinn, dass setuptools und distribute die PyPi-Version gegenüber der Github-Version wählen, wenn die Versionsnummer gleich ist, weil die PyPi-Version stabiler sein sollte. Diese

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

heruntergeladen das Paket von Github (weil Version 0.0.6 nicht auf PyPI vorhanden ist), kommt jedoch Zeit installiert es darüber beschwert, dass die Versionen nicht übereinstimmen, weil die Version im Paket angegeben ist eigentlich 0.0.5.

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

Dies funktioniert schließlich. Setuptools (und distribute) erkannte, dass die Github-Version neuer sein muss, da es das ist, was ich ihr gesagt habe. Und kommen Sie zur Installationszeit, es hat sich nicht über die Tatsache beschwert, dass die aktuelle Version 0.0 ist.5 weil es immer noch die Anforderungen erfüllt.

Sie können dies ein bisschen wie ein Hack betrachten. Ich bin nicht ganz glücklich mit dieser Lösung. Aber ich habe auch eine Frist und es funktioniert. Ein Wort der Warnung: Ich werde Probleme bekommen, wenn Version 0.0.6 tatsächlich veröffentlicht wird. Ich möchte meine Abhängigkeiten richtig pinnen, damit ich in Zukunft keine Probleme bei der Neuinstallation habe, und das ist kein richtiger Pin. Ich nehme jedoch an, Sie könnten mit der Versionsnummer umgehen, indem Sie diese Dokumentation verwenden: https://pythonhosted.org/setuptools/setuptools.html#specifying-your-project-s-version. Der Schlüssel ist, dass die Version höher als 0.0.5 sein sollte, aber auch eine Zahl (mit optionalen Zeichen), die Sie in Zukunft nicht als Release in PyPi erwarten (und offensichtlich niedriger als was die nächste Versionsnummer wird höchstwahrscheinlich (0,06 in meinem Fall) sein.

Ich hoffe, das war hilfreich für jeden anderen :).

Hinweis: Ich verwende eine requirements.txt Datei, die von der Datei setup.py verarbeitet wird, um die Anforderungen zu extrahieren. Wenn Sie https://github.com/chrisglass/xhtml2pdf/archive/28d12fcaafc4c47b13f1f6f42c2bfb73f90cc947.zip#egg=xhtml2pdf-0.0.6 in Ihrer requirements.txt Datei verwenden, wird es auch weiterhin ordnungsgemäß unter Verwendung von pip install -r requirements.txt installieren.

+0

Das muss aber auch passieren, wenn sich der Upstream ebenfalls zum nächsten Versionsinkrement bewegt? –

+2

Ja, ich erwähnte das im vorletzten Absatz mit einem Wort der Vorsicht: "Ein Wort der Warnung: Ich werde beginnen, Probleme zu haben, wenn Version 0.0.6 tatsächlich veröffentlicht wird. Ich möchte meine Abhängigkeiten richtig pinnen, daher stoße ich in Zukunft nicht auf Probleme, wenn ich neu installiere, und das ist kein richtiger Pin. ... " – Heyl1