2019-01-30 19:35:39 +00:00
|
|
|
# Supported Python Versions
|
|
|
|
|
2023-10-13 20:25:39 +00:00
|
|
|
This documents the current supported Python versions, and tries to provide
|
|
|
|
guidance for when we decide to drop support for older versions.
|
2019-01-30 19:35:39 +00:00
|
|
|
|
|
|
|
## Summary
|
|
|
|
|
2023-10-13 20:25:39 +00:00
|
|
|
* Python 3.6 (released Dec 2016) is required starting with repo-2.0.
|
|
|
|
* Older versions of Python (e.g. v2.7) may use old releases via the repo-1.x
|
|
|
|
branch, but no support is provided.
|
2019-01-30 19:35:39 +00:00
|
|
|
|
2023-10-13 20:25:39 +00:00
|
|
|
## repo hooks
|
2019-01-30 19:35:39 +00:00
|
|
|
|
2023-10-13 20:25:39 +00:00
|
|
|
Projects that use [repo hooks] run on independent schedules.
|
|
|
|
Since it's not possible to detect what version of Python the hooks were written
|
|
|
|
or tested against, we always import & exec them with the active Python version.
|
2019-01-30 19:35:39 +00:00
|
|
|
|
2023-10-13 20:25:39 +00:00
|
|
|
If the user's Python is too new for the [repo hooks], then it is up to the hooks
|
|
|
|
maintainer to update.
|
2019-01-30 19:35:39 +00:00
|
|
|
|
2023-10-13 20:25:39 +00:00
|
|
|
## Repo launcher
|
2019-01-30 19:35:39 +00:00
|
|
|
|
2023-10-13 20:25:39 +00:00
|
|
|
The [repo launcher] is an independent script that can support older versions of
|
|
|
|
Python without holding back the rest of the codebase.
|
|
|
|
If it detects the current version of Python is too old, it will try to reexec
|
|
|
|
via a newer version of Python via standard `pythonX.Y` interpreter names.
|
2019-01-30 19:35:39 +00:00
|
|
|
|
2023-10-13 20:25:39 +00:00
|
|
|
However, this is provided as a nicety when it is not onerous, and there is no
|
|
|
|
official support for older versions of Python than the rest of the codebase.
|
2019-01-30 19:35:39 +00:00
|
|
|
|
2023-10-13 20:25:39 +00:00
|
|
|
If your default python interpreters are too old to run the launcher even though
|
|
|
|
you have newer versions installed, your choices are:
|
|
|
|
|
|
|
|
* Modify the [repo launcher]'s shebang to suite your environment.
|
|
|
|
* Download an older version of the [repo launcher] and don't upgrade it.
|
|
|
|
Be aware that there is no guarantee old repo launchers are WILL work with
|
|
|
|
current versions of repo. Bug reports using old launchers will not be
|
|
|
|
accepted.
|
|
|
|
|
|
|
|
## When to drop support
|
|
|
|
|
|
|
|
So far, Python 3.6 has provided most of the interesting features that we want
|
|
|
|
(e.g. typing & f-strings), and there haven't been features in newer versions
|
|
|
|
that are critical to us.
|
|
|
|
|
|
|
|
That said, let's assume we need functionality that only exists in Python 3.7.
|
|
|
|
How do we decide when it's acceptable to drop Python 3.6?
|
|
|
|
|
|
|
|
1. Review the [Project References](./release-process.md#project-references) to
|
|
|
|
see what major distros are using the previous version of Python, and when
|
|
|
|
they go EOL. Generally we care about Ubuntu LTS & current/previous Debian
|
|
|
|
stable versions.
|
|
|
|
* If they're all EOL already, then go for it, drop support.
|
|
|
|
* If they aren't EOL, start a thread on [repo-discuss] to see how the user
|
|
|
|
base feels about the proposal.
|
|
|
|
1. Update the "soft" versions in the codebase. This will start warning users
|
|
|
|
that the older version is deprecated.
|
|
|
|
* Update [repo](/repo) if the launcher needs updating.
|
|
|
|
This only helps with people who download newer launchers.
|
|
|
|
* Update [main.py](/main.py) for the main codebase.
|
|
|
|
This warns for everyone regardless of [repo launcher] version.
|
|
|
|
* Update [requirements.json](/requirements.json).
|
|
|
|
This allows [repo launcher] to display warnings/errors without having
|
|
|
|
to execute the new codebase. This helps in case of syntax or module
|
|
|
|
changes where older versions won't even be able to import the new code.
|
|
|
|
1. After some grace period (ideally at least 2 quarters after the first release
|
|
|
|
with the updated soft requirements), update the "hard" versions, and then
|
|
|
|
start using the new functionality.
|
|
|
|
|
|
|
|
## Python 2.7 & 3.0-3.5
|
|
|
|
|
|
|
|
> **There is no support for these versions.**
|
|
|
|
> **Do not file bugs if you are using old Python versions.**
|
|
|
|
> **Any such reports will be marked invalid and ignored.**
|
|
|
|
> **Upgrade your distro and/or runtime instead.**
|
|
|
|
|
|
|
|
Fetch an old version of the [repo launcher]:
|
|
|
|
|
|
|
|
```sh
|
|
|
|
$ curl https://storage.googleapis.com/git-repo-downloads/repo-2.32 > ~/.bin/repo-2.32
|
|
|
|
$ chmod a+rx ~/.bin/repo-2.32
|
|
|
|
```
|
2019-06-18 21:23:39 +00:00
|
|
|
|
2023-10-13 20:25:39 +00:00
|
|
|
Then initialize an old version of repo:
|
2019-06-18 21:23:39 +00:00
|
|
|
|
2023-10-13 20:25:39 +00:00
|
|
|
```sh
|
|
|
|
$ repo-2.32 init --repo-rev=repo-1 ...
|
|
|
|
```
|
2019-06-18 21:23:39 +00:00
|
|
|
|
|
|
|
|
2023-10-13 20:25:39 +00:00
|
|
|
[repo-discuss]: https://groups.google.com/forum/#!forum/repo-discuss
|
2019-06-18 21:23:39 +00:00
|
|
|
[repo hooks]: ./repo-hooks.md
|
2019-01-30 19:35:39 +00:00
|
|
|
[repo launcher]: ../repo
|