Что такое элегантный способ найти версии пакетов по индексу пакетов pypi? - PullRequest
4 голосов
/ 14 марта 2009

В настоящее время я использую очень уродливый подход, основанный на регулярных выражениях, для поиска ссылок и их разборки.

Я недоволен кодом, поэтому я прошу более удачные решения, желательно с использованием только stdlib.

Редактировать

Задание состоит из 2 частей:

  1. Найти все дистрибутивы, которые соответствуют определенным критериям (например, префикс имени).
  2. Найти все версии, доступные в каждом найденном выпуске.

Ожидаемый результат - отображение распределения -> версии -> файлы.

Ответы [ 4 ]

2 голосов
/ 15 марта 2009

Есть интерфейс XML-RPC. См. Вики-страницу Python.org в API Cheese Shop (старое название для PyPi) .

Выдержка из этой вики:

>>> 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 и package_releases, кажется, именно то, что вы ищете.

@ Комментарий Ронни

Вам просто нужно написать некоторый код на Python, чтобы определить, какой из перечисленных пакетов удовлетворяет критерию; т.е. если имя пакета должно начинаться с foo:

>>> packages = server.list_packages()
>>> match_foo = [package for package in packages if package.startswith('foo')]
>>> print len(match_foo)
2
1 голос
/ 10 октября 2011

Мы собираемся выпустить distutils2 для PyPI в ближайшем будущем. Он содержит модуль distutils2.pypi, который позволяет вам искать PyPI из кода Python, и программу pysetup, которая является скриптом командной строки, чтобы делать то же самое (среди прочих). Документ все еще находится в стадии разработки, но есть несколько примеров и справка по API:

0 голосов
/ 07 ноября 2012

это прискорбно, но из-за отсутствия xmlrpc для других индексов мне нужно сохранить свое решение

0 голосов
/ 14 марта 2009

В сборке, которая имеет доступ к версиям pypi i pin, вроде этого:

Products.PloneFormGen == 1.2.5

Здесь он ищет версию 1.2.5 и использует это ..

Не знаю, если это то, что ты ищешь ...

...