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.
Projects
Participating Projects
These projects pledge to drop Python 2 support in or before 2020.
TensorFlow
pandas
scikit-learn
Tornado
IPython
mitmproxy
Kivy
Matplotlib
NumPy
SciPy
ccxt
Zulip
SymPy
Jupyter notebook
Spyder
Scikit Image
PyMC3
Tensorpack
pytest
Hypothesis
xonsh
Astropy
geopy
Biopython
Nikola
FontTools
Pythran
xarray
dateutil
CherryPy
Tryton
PyStan
MNE
Software Carpentry
ADB-Enhanced
scikit-bio
fecon235
SunPy
Axelrod
rpy2
FEniCS
RDKit
Toyplot
MetPy
pyLast
Psi4
PySCIPOpt
OpenQuake engine
yt
cmd2
osBrain
PyMeasure
Chaquopy
angr
BioBuilds
freud
timeline
Projects Timeline
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
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
sign
Sign the statement
Do you want to sign the statement for your project? Open an issue with your project information, or directly submit a pull-request.
discuss
Discuss
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.
Practicalities
Practicalities
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.