skip to navigation
skip to content

caniusepython3 6.0.0

Determine what projects are blocking you from porting to Python 3

This script takes in a set of dependencies and then figures out which of them are holding you up from porting to Python 3.

Command-line/Web Usage

You can specify your dependencies in multiple ways:

caniusepython3 -r requirements.txt test-requirement.txt
caniusepython3 -m PKG-INFO
caniusepython3 -p numpy scipy ipython
# If your project's uses setuptools
# (note that setup_requires can't be checked) ...
python caniusepython3

The output of the script will tell you how many (implicit) dependencies you need to transition to Python 3 in order to allow you to make the same transition. It will also list what projects have no dependencies blocking their transition so you can ask them to start a port to Python 3.

If you prefer a web interface you can use by Jannis Leidel.

Integrating With Your Tests

If you want to check for Python 3 availability as part of your tests, you can use caniusepython3.check():

def check(requirements_paths=[], metadata=[], projects=[]):
    """Return True if all of the specified dependencies have been ported to Python 3.

    The requirements_paths argument takes a sequence of file paths to
    requirements files. The 'metadata' argument takes a sequence of strings
    representing metadata. The 'projects' argument takes a sequence of project

    Any project that is not listed on PyPI will be considered ported.

You can then integrate it into your tests like so:

import unittest
import caniusepython3

class DependenciesOnPython3(unittest.TestCase):
  def test_dependencies(self):
    # Will begin to fail when dependencies are no longer blocking you
    # from using Python 3.

For the change log, how to tell if a project has been ported, as well as help on how to port a project, please see the project website.

Extending pylint --py3k

In Pylint 1.4, a --py3k option was added to the linting tool to turn on checks for Python 2/3 incompatibilities (all other checks are turned off). While great, those checks are a little conservative in order to always be accurate. To fill out those checks with stricter – albeit potentially inaccurate – checkers, caniusepython3.pylint_checker exists. On top of everything pylint --py3k already checks for, it adds checks for:

  1. Uses of open() (in Python3, open() is actually
  2. String literals that do not have a b/u prefix or from __future__ import unicode_literals

If you wish to use the checker with Pylint, you can add it to your Pylint configuration file, e.g.:


Secret, bonus feature

If you would like to use a different name for the script and setuptools command then set the environment variable CIU_ALT_NAME to what you would like the alternative name to be. Reddit suggests icanhazpython3.

File Type Py Version Uploaded on Size
caniusepython3-6.0.0-py2.py3-none-any.whl (md5) Python Wheel py2.py3 2017-10-20 25KB
caniusepython3-6.0.0.tar.gz (md5) Source 2017-10-20 20KB