查找哪些软件包支持Python 3.x vs 2.7.x.

Jos*_*osh 11 python pypi python-2.7 python-3.x

是否有任何方法可以自动查找PIP上的软件包支持哪些Python版本?

我正在寻找能够生成下表的表格,如下所示,从PIP索引中自动获取.来自着名的GitHub存储库和社区贡献者的手动表格也很有用:

           2.7.x   3.x
foo         ?       ?
bar         ?       ?
baz         ?       ?
Run Code Online (Sandbox Code Playgroud)

以前有人编过这样的表吗?有关如何自动获取此信息的任何想法?

vge*_*gel 3

不幸的是 PyPI API 似乎很糟糕。您可以通过 XMLRPC 与它交互,但返回值的记录很少(py_version例如,可以为空白或“源”,无论这意味着什么)。也许最准确的做法是下载每个包并使用启发式方法,但除此之外,标签系统似乎是最好的选择。API 不支持它,但您可以轻松地将其从网页中抓取出来:

def package_supports_py3(pkg):
    b = bs4.BeautifulSoup(requests.get('https://pypi.python.org/pypi/' + pkg).text)
    return 'Programming Language :: Python :: 3' in map(lambda li: li.find('a').text, b.find('strong', text = 'Categories').next_sibling.next_sibling.find_all('li'))

>>> package_supports_py3('virtualenv')
True
>>> package_supports_py3('oh-my-vim')
False # but it doesn't have /any/ python version related tags, so who knows...
Run Code Online (Sandbox Code Playgroud)

(需要BeautifulSoup4requests

此方法不会产生误报,但很可能会丢失实际升级到 py3 的软件包。如果您需要它是可靠的,我建议结合使用检查python_version、此方法和手动覆盖。如果您只是闲逛,这种方法应该足够好,因为大多数较大的、运行良好的项目似乎都遵守标记指南。