在pypi包索引上查找包版本的优雅方法是什么?

时间:2009-03-14 19:07:17

标签: python package search pypi

目前,我正在使用基于正则表达式的非常难看的方法来查找链接并将它们分开。

我对代码不满意,所以我要求更好的解决方案,最好只使用stdlib。

修改

手头的任务有两部分:

  1. 查找符合特定条件的所有分发(例如名称前缀)。
  2. 查找每个找到的发行版中可用的所有版本。
  3. 预期结果是分布映射 - >版本 - >文件。

4 个答案:

答案 0 :(得分:2)

有一个XML-RPC接口。请参阅Python.org wiki page on Cheese Shop (old name for PyPi) API

摘自该维基:

>>> 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_packagespackage_releases似乎正是您正在寻找的。

@Ronny的评论

您只需要在Python中编写一些代码来确定列出的哪个包符合标准;即如果包名必须以foo开头:

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

答案 1 :(得分:1)

我们将在短期内向PyPI发布distutils2。它包含一个distutils2.pypi模块,它允许您从Python代码和pysetup程序中搜索PyPI,这是一个命令行脚本来执行相同的操作(以及其他)。该文档仍在进行中,但有一些示例和API参考:

答案 2 :(得分:0)

不幸的是,由于其他索引上缺少xmlrpc,我需要保留我的解决方案

答案 3 :(得分:-1)

在访问pypi i build版本的buildout中:

Products.PloneFormGen == 1.2.5

在这里搜索版本1.2.5并使用此..

不知道这是不是你要找的......