| # Supported Python Versions |
| |
| This documents the current supported Python versions, and tries to provide |
| guidance for when we decide to drop support for older versions. |
| |
| ## Summary |
| |
| * 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. |
| |
| ## repo hooks |
| |
| 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. |
| |
| If the user's Python is too new for the [repo hooks], then it is up to the hooks |
| maintainer to update. |
| |
| ## Repo launcher |
| |
| 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. |
| |
| 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. |
| |
| 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 we do not guarantee old repo launchers 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 |
| ``` |
| |
| Then initialize an old version of repo: |
| |
| ```sh |
| $ repo-2.32 init --repo-rev=repo-1 ... |
| ``` |
| |
| |
| [repo-discuss]: https://groups.google.com/forum/#!forum/repo-discuss |
| [repo hooks]: ./repo-hooks.md |
| [repo launcher]: ../repo |