Was ist eine elegante Art und Weise Versionen von Paketen auf einem pypi Paketindex zu finden?
Frage
Zur Zeit bin ich mit einem sehr hässlichen Ansatz basierte auf einem regulären Ausdruck für Links zu finden und nimm sie auseinander.
Ich bin mit dem Code unglücklich, so dass ich für schönere Lösungen gefragt, vorzugsweise nur die stdlib verwendet wird.
Bearbeiten
Die Aufgabe in der Hand hat zwei Teile:
- Alle Distributionen, die ein bestimmten Kriterien (wie Präfix des Namen) entsprechen.
- Alle Versionen in jeder gefundenen Verteilung.
Das erwartete Ergebnis ist eine Abbildung der Verteilung -> Versionen. -> Dateien
Lösung 3
seine bedauerlich, aber aufgrund des Fehlens von xmlrpc auf andere Indizes ich brauche meine Lösung zu halten
Andere Tipps
Es gibt eine XML-RPC-Schnittstelle. Sehen Sie sich die Python.org Wiki-Seite auf Cheese Shop (alter Name für PyPI) API .
Auszug aus diesem Wiki:
>>> import xmlrpclib
>>> server = xmlrpclib.Server('http://pypi.python.org/pypi')
>>> server.package_releases('roundup')
['1.1.2']
>>> server.package_urls('roundup', '1.1.2')
[{'has_sig': True, 'comment_text': '', 'python_version': 'source', 'url': 'http://pypi.python.org/packages/source/r/roundup/roundup-1.1.2.tar.gz', 'md5_digest': '7c395da56412e263d7600fa7f0afa2e5', 'downloads': 2989, 'filename': 'roundup-1.1.2.tar.gz', 'packagetype': 'sdist', 'size': 876455}, {'has_sig': True, 'comment_text': '', 'python_version': 'any', 'url': 'http://pypi.python.org/packages/any/r/roundup/roundup-1.1.2.win32.exe', 'md5_digest': '983d565b0b87f83f1b6460e54554a845', 'downloads': 2020, 'filename': 'roundup-1.1.2.win32.exe', 'packagetype': 'bdist_wininst', 'size': 614270}]
list_packages
und package_releases
scheinen genau das zu sein, was Sie suchen.
@ Ronnys Kommentar
Sie haben nur einige Codes in Python zu schreiben, welche der aufgelisteten Pakete zu bestimmen, das Kriterium erfüllen; das heißt, wenn der Paketname mit foo
beginnen muss:
>>> packages = server.list_packages()
>>> match_foo = [package for package in packages if package.startswith('foo')]
>>> print len(match_foo)
2
Wir werden distutils2 zu PyPI in der kurzfristigen Zukunft lösen. Es enthält ein distutils2.pypi-Modul, das Sie PyPI von Python-Code und ein pysetup Programm, das eine Befehlszeilenskript ist suchen können, das Gleiche zu tun (unter anderem). Der Doc ist immer noch ein work in progress, aber es gibt einige Beispiele und eine API-Referenz:
In einem buildout der pypi i-Versionen wie dieser Stift zugreifen:
Products.PloneFormGen == 1.2.5
Hier sucht er nach Version 1.2.5 eine dieser verwendet ..
Sie nicht wissen, ob es das ist, was u suchen ...