有没有一些方法可以自动地找出哪些Python版本被支持在PIP包中?
我正在寻找一些能够从PIP索引自动获取下面表格的工具。也可以是来自社区中著名GitHub存储库和贡献者手动维护的表格:
2.7.x 3.x
foo ✓ ✗
bar ✓ ✓
baz ✗ ✓
有没有人之前编制过像这样的表格?对于如何自动获取这些信息有什么想法吗?
有没有一些方法可以自动地找出哪些Python版本被支持在PIP包中?
我正在寻找一些能够从PIP索引自动获取下面表格的工具。也可以是来自社区中著名GitHub存储库和贡献者手动维护的表格:
2.7.x 3.x
foo ✓ ✗
bar ✓ ✓
baz ✗ ✓
有没有人之前编制过像这样的表格?对于如何自动获取这些信息有什么想法吗?
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
很遗憾,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
、这种方法和手动覆盖来进行。如果你只是在玩耍,这种方法应该足够好了,因为大多数较大、运行良好的项目似乎都遵守标记指南。
scikit-learn
或statsmodels
这样的scikits)。 - Josh