目前我正在使用一种基于正则表达式的非常丑陋的方法来查找链接并将它们分开。
我对代码不满意,所以我要求更好的解决方案,最好只使用stdlib。
编辑
手头的任务有两个部分:
- 查找符合特定条件(如名称前缀)的所有分布。
- 查找每个找到的发行版中可用的所有版本。
预期的结果是分布 -> 版本 -> 文件的映射。
有一个 XML-RPC 接口。请参阅Cheese Shop(PyPi 的旧名称)API 上的 Python.org 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
并且package_releases
似乎正是您正在寻找的。
您只需要在 Python 中编写一些代码来确定列出的哪些包满足标准;即如果包名必须以foo
:
>>> packages = server.list_packages()
>>> match_foo = [package for package in packages if package.startswith('foo')]
>>> print len(match_foo)
2
我们将在短期内将 distutils2 发布到 PyPI。它包含一个 distutils2.pypi 模块,它可以让你从 Python 代码中搜索 PyPI 和一个 pysetup 程序,它是一个命令行脚本来做同样的事情(等等)。该文档仍在进行中,但有一些示例和 API 参考:
很不幸,但由于其他索引上缺少 xmlrpc,我需要保留我的解决方案
在访问 pypi 的构建中,我将版本固定如下:
Products.PloneFormGen==1.2.5
在这里它搜索版本 1.2.5 并使用 this..
不知道这是不是你要找的...