Was ist eine elegante Art und Weise Versionen von Paketen auf einem pypi Paketindex zu finden?

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

  •  22-07-2019
  •  | 
  •  

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:

  1. Alle Distributionen, die ein bestimmten Kriterien (wie Präfix des Namen) entsprechen.
  2. Alle Versionen in jeder gefundenen Verteilung.

Das erwartete Ergebnis ist eine Abbildung der Verteilung -> Versionen. -> Dateien

War es hilfreich?

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 ...

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top