查找哪些包支持 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-learn
或 statsmodels
)
请注意,请求外部资源对于 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...
(需要BeautifulSoup4
和requests
)
这种方法不会产生误报,但它很有可能会丢失实际升级到 py3 的软件包。如果您需要它可靠,我建议结合检查python_version
、此方法和手动覆盖。如果您只是在胡闹,这种方法应该足够好,因为大多数大型、运行良好的项目似乎都遵守标记指南。
【讨论】:
以上是关于查找哪些包支持 Python 3.x 和 2.7.x的主要内容,如果未能解决你的问题,请参考以下文章