4 Stimmen

Was ist ein eleganter Weg, um Versionen von Paketen in einem pypi-Paketindex zu finden?

Derzeit verwende ich einen sehr hässlichen Ansatz, der auf einem Regex basiert, um Links zu finden und sie zu zerlegen.

Ich bin unzufrieden mit dem Code, also bitte ich um schönere Lösungen, vorzugsweise nur mit der stdlib.

bearbeiten

Die zu lösende Aufgabe besteht aus 2 Teilen:

  1. Suche nach allen Verteilungen, die einem bestimmten Kriterium entsprechen (z. B. Präfix des Namens).
  2. Finden Sie alle Versionen, die in jeder gefundenen Distribution verfügbar sind.

Das erwartete Ergebnis ist eine Zuordnung von Verteilung -> Versionen -> Dateien.

1voto

cdleary Punkte 66512

Es gibt eine XML-RPC-Schnittstelle. Siehe die Python.org wiki Seite über 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 y package_releases scheinen genau das zu sein, wonach Sie suchen.

@Ronny's Kommentar

Sie müssen nur etwas Code in Python schreiben, um festzustellen, welche der aufgelisteten Pakete das Kriterium erfüllen; d.h. wenn der Paketname mit foo :

>>> packages = server.list_packages()
>>> match_foo = [package for package in packages if package.startswith('foo')]
>>> print len(match_foo)
2

1voto

merwok Punkte 6577

Wir werden in naher Zukunft distutils2 für PyPI freigeben. Es enthält ein distutils2.pypi Modul, mit dem man PyPI von Python Code aus durchsuchen kann und ein pysetup Programm, das ein Kommandozeilenskript ist, um dasselbe zu tun (neben anderen). Die Dokumentation ist noch in Arbeit, aber es gibt einige Beispiele und eine API-Referenz:

0voto

Es ist bedauerlich, aber aufgrund des Fehlens von xmlrpc auf anderen Indizes muss ich meine Lösung beibehalten

-1voto

Gomez Punkte 1191

In einem Buildout, das auf pypi zugreift, pinne ich Versionen wie diese:

Produkte.PloneFormGen==1.2.5

Hier sucht er nach der Version 1.2.5 und verwendet diese.

Ich weiß nicht, ob es das ist, wonach Sie suchen...

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X