查找哪些软件包支持Python 3.x和2.7.x版本。

12

有没有一些方法可以自动地找出哪些Python版本被支持在PIP包中?

我正在寻找一些能够从PIP索引自动获取下面表格的工具。也可以是来自社区中著名GitHub存储库和贡献者手动维护的表格:

           2.7.x   3.x
foo         ✓       ✗
bar         ✓       ✓
baz         ✗       ✓

有没有人之前编制过像这样的表格?对于如何自动获取这些信息有什么想法吗?


5
https://python3wos.appspot.com/ 是需要翻译的内容。 - Martijn Pieters
感谢@MartijnPieters!这其实非常接近了。尽管我看到了一些相对重要的遗漏(例如像scikit-learnstatsmodels这样的scikits)。 - Josh
1
请注意,在Stack Overflow上询问外部资源非常不适合。 - Martijn Pieters
1
感谢@MartijnPieters - 我知道我走了一条很薄的线。我希望还有一种方法可以让这个问题符合有效的SO问题的标准。 - Josh
1
请注意,Python 3 Wall of Shame / Superpowers 使用软件包的公共元数据;由于软件包太多而无法全部显示,因此只显示了下载量前50名的软件包。它有可用的源代码,并使用开发人员可以添加到其软件包中的“Programming Language :: Python :: 3”标签。 - Martijn Pieters
2个回答

4
只需使用以下链接:https://pypi.python.org/pypi/caniusepython3/ 为了统计数据,这是OpenStack所需的库列表(共161个):https://github.com/openstack/requirements/blob/master/global-requirements.txt 以下是阻碍它们的原因:
  giampaolo@UX32VD:/tmp$ caniusepython3 -r requirements.txt 
  Finding and checking dependencies ...

  You need 67 projects to transition to Python 3.
  Of those 67 projects, 65 have no direct dependencies blocking their transition:

  boto
  cmd2
  coinor.pulp
  croniter
  ddt
  diskimage-builder
  django-bootstrap-form
  django-compressor
  django-openstack-auth
  dnspython
  eventlet
  extras
  gear
  hacking
  thrift (which is blocking happybase)
  jsonrpclib
  mysql-python
  netifaces
  nose-exclude
  nosehtmloutput
  nosexcover
  openstack-doc-tools
  openstack.nose-plugin
  os-apply-config
  os-collect-config
  os-refresh-config
  oslo.config
  oslo.messaging
  oslo.rootwrap
  oslo.sphinx
  oslosphinx
  pam
  ecdsa (which is blocking paramiko)
  paste
  posix-ipc
  proboscis
  pycadf
  pyghmi
  python-ceilometerclient
  python-cinderclient
  python-designateclient
  python-glanceclient
  python-heatclient
  python-ldap
  python-neutronclient
  python-openstackclient
  python-savannaclient
  python-seamicroclient
  python-swiftclient
  python-troveclient
  qpid-python
  rtslib-fb
  sockjs-tornado
  sphinxcontrib-docbookrestapi
  sphinxcontrib-httpdomain
  sphinxcontrib-pecanwsme
  sqlalchemy-migrate
  suds
  swift
  taskflow
  tripleo-image-elements
  warlock
  websockify
  xenapi
  zake

你可以在线测试它,例如,71(233个中的71)OpenStack依赖项阻止Python 3过渡 - jfs

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...

(需要使用 BeautifulSoup4requests

这种方法不会产生误报,但很有可能错过已经升级到py3的软件包。如果你需要可靠性,我建议结合检查 python_version、这种方法和手动覆盖来进行。如果你只是在玩耍,这种方法应该足够好了,因为大多数较大、运行良好的项目似乎都遵守标记指南。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接