Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is there somewhere an index of Py3k-only libraries?

I'm curious if there are important libraries that support only Python 3, since it appears that many libraries that do support it, also happen to support Python 2.

like image 985
tshepang Avatar asked Feb 09 '11 17:02

tshepang


2 Answers

No, there is no such index, but you could create one from the classifier data on PyPI.

You could make a list of all packages that has "Programming Language :: Python :: 3" or Programming Language :: Python :: 3.0" or "Programming Language :: Python 3.1", but none of the Python 2 classifiers.

http://pypi.python.org/pypi?:action=browse&c=214

Possibly the XML interface can be useful:

http://wiki.python.org/moin/PyPiXmlRpc

like image 138
Lennart Regebro Avatar answered Sep 20 '22 23:09

Lennart Regebro


It appears there isn't, so I wrote this (with some help):

#!/usr/bin/env python3

import xmlrpc.client

# PyPI classifiers for all Python 3 versions
PY3 = [
    "Programming Language :: Python :: 3",
    "Programming Language :: Python :: 3.0",
    "Programming Language :: Python :: 3.1",
    "Programming Language :: Python :: 3.2",
    "Programming Language :: Python :: 3.3",
    "Programming Language :: Python :: 3.4",
]

# PyPI classifiers for all Python 2 versions
PY2 = [
    "Programming Language :: Python :: 2",
    "Programming Language :: Python :: 2.7",
    "Programming Language :: Python :: 2.6",
    "Programming Language :: Python :: 2.5",
    "Programming Language :: Python :: 2.4",
    "Programming Language :: Python :: 2.3",
]

def main():
    client = xmlrpc.client.ServerProxy('http://pypi.python.org/pypi')
    # name[0] is package name
    # name[1] is package version
    py3names = [
        name[0] for classifier in PY3 for name in client.browse([classifier])
    ]
    py2names = [
        name[0] for classifier in PY2 for name in client.browse([classifier])
    ]
    py3only = [name for name in py3names if name not in py2names]
    template = "Python3-only packages: {} (of {})"
    print(template.format(len(py3only), len(set(py2names + py3names))))

if __name__ == "__main__":
    main()
like image 34
tshepang Avatar answered Sep 22 '22 23:09

tshepang