Moving to require Python 3
Almost all major open source Python packages now support both Python 3.x and Python 2.7, and many projects have been supporting these two versions of the language for several years. While we have developed tools and techniques to maintain compatibility efficiently, it is a small but constant friction in the development of a lot of code.
We are keen to use Python 3 to its full potential, and though we accepted the cost of writing cross-compatible code to allow a smooth transition, we did not intend to maintain this compatibility indefinitely. Although the transition was not as quick as we hoped, it is taking place, with more and more people using, teaching and recommending Python 3.
The developers of the Python language extended support of Python 2.7 from 2015 to January 1, 2020, recognising that many people were still using Python 2. We believe that the extra 5 years was sufficient to transition off of Python 2, and now that upstream support has ended, our projects have stopped supporting Python 2 or will do so before the end of 2020. We will thus be able to simplify our code and take advantage of the many new features in the current version of the Python language and standard library.
Third parties may offer paid support for our projects on old Python versions for longer than we support them ourselves. We won’t obstruct this, and it is a core principle of free and open source software that this is possible. However, if you enjoy the free, first party support for many projects including the Scientific Python stack, please move to Python 3.
For all of these reasons, the following projects have pledged to drop support for Python 2.7 no later than 2020, following the end of support for Python 2.7 itself at the start of the year.
These projects pledge to drop Python 2 support in or before 2020.
- Apache Spark
- Apache MXNet (Incubating)
- Jupyter notebook
- Apache Beam
- Scikit Image
- Neural Network Libraries
- Apache Libcloud
- Adversarial Robustness Toolbox
- Software Carpentry
- OpenQuake engine
- Cylc Workflow
- Connectome Mapper 3
- An Introduction to Applied Bioinformatics
In the following chart, you can see many projects that have decided to stop supporting Python 2 before 2020. The chart is a guideline to show what versions of each project support Python 2, or not, their release timelines, and extended support. (Python’s own timeline is available here).
Compatible with Python 2 and Python 3.
Compatible with Python 3 only.
See how to add your project to the list of participating projects and to this timeline
Why switch to Python 3?
Here are some resources on why Python 3 was created, and how and why to update code to use Python 3:
- Why Python 3 exists (Brett Cannon)
- How to add Python 3 support to your code
- Python FAQ: Why should I use Python 3? (lexy munroe)
- Python FAQ: How do I port to Python 3? (lexy munroe)
- Stop supporting Python 2.6 for free (Nick Coghlan)
- Why Python 4.0 won’t be like Python 3.0 (Nick Coghlan)
- Python 3 for scientists
- scikit-bio py3-only RFC
While the above statement has been signed by dozens of developers, it is still open for discussion. Feel free to open an issue on our GitHub repository or browse the open and closed ones.
If you think some information is missing or inaccurate, please let us know as well.
While most of the projects that have signed up above are migrating to Python 3 only code bases, we are gathering information about the difficulties that can be encountered both by developers and users during this process.
We are thus collecting a list of things to be aware of for when transitioning that are less obvious. For example : as a developer, how to make sure that your package manager like pip does not upgrade your libraries to incompatible versions on Python 2. See the Practicality Page for information and check our repository to contribute.