查找哪些包支持 Python 3.x 和 2.7.x

Posted

技术标签:

【中文标题】查找哪些包支持 Python 3.x 和 2.7.x【英文标题】:Finding which packages support Python 3.x vs 2.7.x 【发布时间】:2013-12-03 05:50:35 【问题描述】:

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

我正在寻找能够生成如下表的表格,该表格是从 PIP 索引自动获得的。来自知名 GitHub 存储库和社区贡献者的手动维护表也会有所帮助:

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

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

【问题讨论】:

python3wos.appspot.com 也许? 感谢@MartijnPieters!这实际上非常接近。虽然我看到了一些相对重要的遗漏(例如 scikits,如 scikit-learnstatsmodels 请注意,请求外部资源对于 Stack Overflow 来说是非常离题的。 谢谢@MartijnPieters - 我知道我正在走一条细线。我希望仍有办法使这个问题符合有效 SO 问题的标准。 请注意 Python 3 Wall of Shame / Superpowers 使用包的公共元数据;包太多,无法全部显示,因此显示了下载量排名前 50 的包。它有可用的源代码并使用Programming Language :: Python :: 3 标记,开发人员可以添加到他们的包中。 【参考方案1】:

只需使用这个: https://pypi.python.org/pypi/caniusepython3/

为了便于统计,这是 openstack 的 deps 列表(共 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 (out of 233) openstack dependencies block Python 3 transition。【参考方案2】:

不幸的是,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、此方法和手动覆盖。如果您只是在胡闹,这种方法应该足够好,因为大多数大型、运行良好的项目似乎都遵守标记指南。

【讨论】:

以上是关于查找哪些包支持 Python 3.x 和 2.7.x的主要内容,如果未能解决你的问题,请参考以下文章

Python 2.7.x 和 3.x 版本的重要区别小结

翻译: Python 2.7.x和Python 3.x之间的主要区别(包括示例)

win XP的系统应该装哪个python的安装包?

Python 2.7.x 和 3.x 版本区别小结

Python 2.7.x 和 3.x 版本的语法区别

Python3 使用filetype包查找指定目录中所有损坏的文件(图片,视频,音频等文件)