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 we currently accept the cost of writing cross-compatible code to allow a smooth transition, but we don’t intend to maintain this compatibility indefinitely. Although the transition has not been as quick as we hoped, we do see it 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 is sufficient to transition off of Python 2, and our projects plan to stop supporting Python 2 when upstream support ends in 2020, if not before. We will then 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.
In addition, significantly before 2020, many of our projects will step down Python 2.7 support to only fixing bugs, and require Python 3 for all new feature releases. Some projects have already made this transition. This too parallels support for the language itself, as Python 2.7 releases only include bugfixes and security improvements.
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 start planning to 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, coinciding with the Python development team’s timeline for dropping support for Python 2.7.
These projects pledge to drop Python 2 support in or before 2020.
- Apache Spark
- Apache MXNet (Incubating)
- Jupyter notebook
- Scikit Image
- Adversarial Robustness Toolbox
- Software Carpentry
- OpenQuake engine
- Cylc Workflow
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 is close to final form, 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.