{"id":22669341,"url":"https://github.com/makukha/multipython","last_synced_at":"2025-04-12T11:21:09.403Z","repository":{"id":264711408,"uuid":"893122599","full_name":"makukha/multipython","owner":"makukha","description":"Multi-version Python Docker image for research and testing with tox","archived":false,"fork":false,"pushed_at":"2025-02-13T16:07:39.000Z","size":213,"stargazers_count":4,"open_issues_count":5,"forks_count":2,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-03-26T06:05:31.699Z","etag":null,"topics":["docker","docker-image","free-threading","python"],"latest_commit_sha":null,"homepage":"https://hub.docker.com/r/makukha/multipython","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/makukha.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":".github/CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":".github/SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-11-23T15:40:57.000Z","updated_at":"2025-02-13T16:06:44.000Z","dependencies_parsed_at":"2024-12-19T12:34:21.815Z","dependency_job_id":"305dc387-3085-4ef6-8636-bed722405719","html_url":"https://github.com/makukha/multipython","commit_stats":null,"previous_names":["makukha/multipython"],"tags_count":12,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/makukha%2Fmultipython","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/makukha%2Fmultipython/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/makukha%2Fmultipython/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/makukha%2Fmultipython/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/makukha","download_url":"https://codeload.github.com/makukha/multipython/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248558127,"owners_count":21124223,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["docker","docker-image","free-threading","python"],"created_at":"2024-12-09T15:28:48.313Z","updated_at":"2025-04-12T11:21:09.396Z","avatar_url":"https://github.com/makukha.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# multipython 🐳\u003csup\u003e🐍🐍\u003c/sup\u003e\n\n\u003e Multi-version Python Docker image for research and testing with tox.\n\n[![GitHub Release](https://img.shields.io/github/v/tag/makukha/multipython?label=release)](https://github.com/makukha/multipython)\n[![GitHub Release Date](https://img.shields.io/github/release-date/makukha/multipython?label=release%20date)](https://github.com/makukha/multipython)\n[![Docker Pulls](https://img.shields.io/docker/pulls/makukha/multipython)](https://hub.docker.com/r/makukha/multipython)\n[![uses docsub](https://img.shields.io/badge/using-docsub-royalblue)](https://github.com/makukha/docsub)\n[![OpenSSF Best Practices](https://www.bestpractices.dev/projects/9755/badge)](https://www.bestpractices.dev/projects/9755)\n\n# Features\n\n\u003c!-- docsub: begin --\u003e\n\u003c!-- docsub: include docs/part/features.md --\u003e\n* `makukha/multipython:latest` — prerelease and [supported](https://devguide.python.org/versions) Python distributions\n* `makukha/multipython:cpython` — latest bugfix CPython image\n* `makukha/multipython:supported` — [supported](https://devguide.python.org/versions) versions, not including prerelease\n* `makukha/multipython:unsafe` — all versions, including end-of-life\n* `makukha/multipython:{py314...}` — single version images\n* All images except `base` have system Python in virtual environment\n* All images include [pip](https://pip.pypa.io), [pyenv](https://github.com/pyenv/pyenv), [setuptools](https://setuptools.pypa.io), [tox](https://tox.wiki), [uv](https://docs.astral.sh/uv), [virtualenv](https://virtualenv.pypa.io)\n* Tox and virtualenv understand multipython tag names, even non-standard `py313t`\n* [Build your own environment](https://github.com/makukha/multipython#build-your-own-environment) from single version images\n* Based on `debian:stable-slim`\n* Single platform `linux/amd64`\n\u003c!-- docsub: end --\u003e\n\n\n# Basic usage\n\n\u003c!-- docsub: begin #readme --\u003e\n\u003c!-- docsub: include docs/part/basic-usage.md --\u003e\n\u003c!-- docsub: begin --\u003e\n\u003c!-- docsub: include tests/test_readme_basic/tox.ini --\u003e\n\u003c!-- docsub: lines after 2 upto -1 --\u003e\n```ini\n# tox.ini\n[tox]\nenv_list = py{27,35,36,37,38,39,310,311,312,313,314,313t,314t}\nskip_missing_interpreters = false\n[testenv]\ncommand = {env_python} --version\n```\n\u003c!-- docsub: end --\u003e\n\n```shell\ndocker run --rm -v .:/src -w /src makukha/multipython:unsafe tox run\n```\n\nSingle version images can be used on their own:\n```shell\n$ docker run --rm -v .:/src -w /src makukha/multipython:py310 tox run\n```\n\u003c!-- docsub: end #readme --\u003e\n\n\n## Python versions\n\n\u003c!-- docsub: begin --\u003e\n\u003c!-- docsub: include docs/part/python-versions.md --\u003e\n| Distribution     | Note          | Tag      | Command       | Source |\n|------------------|---------------|----------|---------------|--------|\n| CPython 3.14.0a5 | free threaded | `py314t` | `python3.14t` | pyenv  |\n| CPython 3.13.2   | free threaded | `py313t` | `python3.13t` | pyenv  |\n| CPython 3.14.0a5 |               | `py314`  | `python3.14`  | pyenv  |\n| CPython 3.13.2   | system ⚙️     | `py313`  | `python3.13`  | pyenv  |\n| CPython 3.12.9   |               | `py312`  | `python3.12`  | pyenv  |\n| CPython 3.11.11  |               | `py311`  | `python3.11`  | pyenv  |\n| CPython 3.10.16  |               | `py310`  | `python3.10`  | pyenv  |\n| CPython 3.9.21   |               | `py39`   | `python3.9`   | pyenv  |\n| CPython 3.8.20   | EOL           | `py38`   | `python3.8`   | pyenv  |\n| CPython 3.7.17   | EOL           | `py37`   | `python3.7`   | pyenv  |\n| CPython 3.6.15   | EOL           | `py36`   | `python3.6`   | pyenv  |\n| CPython 3.5.10   | EOL           | `py35`   | `python3.5`   | pyenv  |\n| CPython 2.7.18   | EOL           | `py27`   | `python2.7`   | pyenv  |\n\n* `makukha/multipython` — `py3{9,10,11,12,13,14}`, `py3{13,14}t`\n* `makukha/multipython:cpython` — `py313`\n* `makukha/multipython:supported` — `py3{9,10,11,12,13}`, `py313t`\n* `makukha/multipython:unsafe` — all tags above\n\u003c!-- docsub: end --\u003e\n\n\n## Commands\n\nAll commands are on `PATH` as symlinks to respective distributions. System ⚙️ Python, that is always the latest bugfix version, is available as `python` in virtual environment along with `pip`, `tox`, and `virtualenv`.\n\n## Distribution sources\n\nThe only used source used is [pyenv](https://github.com/pyenv/pyenv). However, it is planned to use [python-build-standalone](https://github.com/astral-sh/python-build-standalone) distributions for supported Python versions to speed up tests and image builds.\n\n## Versions\n\n* Check [Versions](#versions) section for [pyenv](https://github.com/pyenv/pyenv), [tox](https://tox.wiki), [uv](https://docs.astral.sh/uv), [pip](https://pip.pypa.io), [setuptools](https://setuptools.pypa.io) versions.\n\n* See [Status of Python versions](https://devguide.python.org/versions) for the list of end-of-life versions.\n\n## Tox and virtualenv\n\nAll single version tags above, including `py313t` and `py314t`, can be used as tox environment names (see example above) or as virtualenv python requests:\n```shell\n$ virtualenv --python py314t /tmp/venv\n```\n\nThis is possible because two custom plugins are pre-installed in system environment (tox-multipython is installed only for tox 3). When building custom image, they are automatically added by `py install`. Both plugins are part of this project, and use multipython image for self testing.\n* [virtualenv-multipython](https://github.com/makukha/virtualenv-multipython) — discovery plugin for virtualenv and tox 4\n* [tox-multipython](https://github.com/makukha/tox-multipython) — discovery plugin for tox 3\n\n\n# Advanced usage\n\n## Build your own environment\n\nCombine single version images to use a subset of Python distributions.\n\n\u003c!-- docsub: begin --\u003e\n\u003c!-- docsub: include tests/test_readme_advanced/Dockerfile --\u003e\n\u003c!-- docsub: lines after 2 upto -1 --\u003e\n```Dockerfile\n# Dockerfile\nFROM makukha/multipython:base\nCOPY --from=makukha/multipython:py27 /root/.pyenv/versions /root/.pyenv/versions/\nCOPY --from=makukha/multipython:py35 /root/.pyenv/versions /root/.pyenv/versions/\nCOPY --from=makukha/multipython:py312 /root/.pyenv/versions /root/.pyenv/versions/\nCOPY --from=makukha/multipython:py313t /root/.pyenv/versions /root/.pyenv/versions/\nRUN py install\n```\n\u003c!-- docsub: end --\u003e\n\n## CLI helper utility `py`\n\nAll `makukha/multipython` images come with helper utility\n\n```shell\n$ docker run --rm makukha/multipython py --version\nmultipython 252D\n```\n\n\u003ctable\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\n\u003c!-- docsub: begin --\u003e\n\u003c!-- docsub: exec cat tests/share/data/ls.txt | cut -d' ' -f3 --\u003e\n\u003c!-- docsub: lines after 2 upto -1 --\u003e\n```shell\n$ py ls -l\n3.14.0a5t\n3.13.2t\n3.14.0a5\n3.13.2\n3.12.9\n3.11.11\n3.10.16\n3.9.21\n3.8.20\n3.7.17\n3.6.15\n3.5.10\n2.7.18\n```\n\u003c!-- docsub: end --\u003e\n\u003c/td\u003e\n\u003ctd\u003e\n\n\u003c!-- docsub: begin --\u003e\n\u003c!-- docsub: exec cat tests/share/data/ls.txt | cut -d' ' -f2 --\u003e\n\u003c!-- docsub: lines after 2 upto -1 --\u003e\n```shell\n$ py ls -s\n3.14t\n3.13t\n3.14\n3.13\n3.12\n3.11\n3.10\n3.9\n3.8\n3.7\n3.6\n3.5\n2.7\n```\n\u003c!-- docsub: end --\u003e\n\u003c/td\u003e\n\u003ctd\u003e\n\n\u003c!-- docsub: begin --\u003e\n\u003c!-- docsub: exec cat tests/share/data/ls.txt | cut -d' ' -f1 --\u003e\n\u003c!-- docsub: lines after 2 upto -1 --\u003e\n```shell\n$ py ls -t\npy314t\npy313t\npy314\npy313\npy312\npy311\npy310\npy39\npy38\npy37\npy36\npy35\npy27\n```\n\u003c!-- docsub: end --\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/table\u003e\n\n\u003c!-- docsub: begin --\u003e\n\u003c!-- docsub: include tests/share/usage.txt --\u003e\n\u003c!-- docsub: lines after 2 upto -1 --\u003e\n```shell\n$ py --help\nusage: py bin {--cmd|--dir|--path} [TAG]\n       py info [--cached]\n       py install [--sys TAG] [--no-update-info]\n       py ls {--tag|--short|--long|--all}\n       py root\n       py sys\n       py tag \u003cPYTHON\u003e\n       py uninstall [--no-update-info]\n       py --version\n       py --help\n\ncommands:\n  bin        Show Python executable command or path\n  info       Extended details in JSON format\n  install    Install system environment, commands, seed packages\n  ls         List all distributions\n  root       Show multipython root path\n  sys        Show system python tag\n  tag        Determine tag of executable\n  uninstall  Uninstall system environment\n\nbinary info formats:\n  -c --cmd   Command name, expected to be on PATH\n  -d --dir   Path to distribution bin directory\n  -p --path  Path to distribution binary\n\nversion formats:\n  -t --tag    Python tag, e.g. py39, pp19\n  -s --short  Short version without prefix, e.g. 3.9\n  -l --long   Full version without prefix, e.g. 3.9.12\n  -a --all    Lines 'tag short long', e.g. 'py39 3.9 3.9.3'\n\nother options:\n  -c --cached       Show cached results\n  --no-update-info  Don't update local info.json (works faster)\n  --sys             Preferred system executable\n  --version         Show multipython distribution version\n  --help            Show this help and exit\n```\n\u003c!-- docsub: end --\u003e\n\n## JSON metadata\n\nEvery release has versions metadata in JSON format:\n\n* inside release image as file\n* inside custom images built from single versions\n* in GitHub repository\n* image CLI `py info -c`\n\n### Release image\n\nEvery [image](https://hub.docker.com/r/makukha/multipython) has JSON metadata file `/root/.multipython/info.json`\n\n### Custom image\n\nAfter running `py install` in custom image Dockerfile, `/root/.multipython/info.json` is updated automatically.\n\n### GitHub repository\n\n* `base` – [tests/share/info/base.json@v252D](https://raw.githubusercontent.com/makukha/multipython/refs/tags/v252D/tests/share/info/base.json)\n* `cpython` – [tests/share/info/cpython.json@v252D](https://raw.githubusercontent.com/makukha/multipython/refs/tags/v252D/tests/share/info/cpython.json)\n* `latest` – [tests/share/info/latest.json@v252D](https://raw.githubusercontent.com/makukha/multipython/refs/tags/v252D/tests/share/info/latest.json)\n* `supported` – [tests/share/info/supported.json@v252D](https://raw.githubusercontent.com/makukha/multipython/refs/tags/v252D/tests/share/info/supported.json)\n* `unsafe` – [tests/share/info/unsafe.json@v252D](https://raw.githubusercontent.com/makukha/multipython/refs/tags/v252D/tests/share/info/unsafe.json)\n* *(same for single version tags)*\n\n### Image CLI `py info`\n\n```shell\ndocker run --rm makukha/multipython:latest py info -c\n```\n\n\u003c!-- docsub: begin --\u003e\n\u003c!-- docsub: exec cat tests/share/info/latest.json | sed -ne '1,/    },/p' \u0026\u0026 echo '...' --\u003e\n\u003c!-- docsub: lines after 1 upto -1 --\u003e\n```json\n{\n  \"multipython\": {\n    \"version\": \"252D\",\n    \"subset\": \"latest\",\n    \"root\": \"/root/.multipython\"\n  },\n  \"pyenv\": {\n    \"version\": \"2.5.3\",\n    \"root\": \"/root/.pyenv\",\n    \"python_versions\": \"/root/.pyenv/versions\"\n  },\n  \"tox\": {\n    \"version\": \"4.24.1\"\n  },\n  \"uv\": {\n    \"version\": \"0.5.31\",\n    \"python_versions\": \"/root/.local/share/uv/python\"\n  },\n  \"virtualenv\": {\n    \"version\": \"20.29.2\",\n    \"config\": \"/root/.config/virtualenv/virtualenv.ini\"\n  },\n  \"system\": {\n    \"tag\": \"py313\",\n    \"root\": \"/root/.multipython/sys\",\n    \"command\": \"python\",\n    \"bin_dir\": \"/root/.multipython/sys/bin\",\n    \"binary_path\": \"/root/.multipython/sys/bin/python\",\n    \"packages\": {\n      \"cachetools\": \"5.5.1\",\n      \"chardet\": \"5.2.0\",\n      \"colorama\": \"0.4.6\",\n      \"distlib\": \"0.3.9\",\n      \"filelock\": \"3.17.0\",\n      \"packaging\": \"24.2\",\n      \"pip\": \"25.0.1\",\n      \"platformdirs\": \"4.3.6\",\n      \"pluggy\": \"1.5.0\",\n      \"pyproject-api\": \"1.9.0\",\n      \"setuptools\": \"75.8.0\",\n      \"tox\": \"4.24.1\",\n      \"tox-multipython\": \"0.4.0\",\n      \"virtualenv\": \"20.29.2\",\n      \"virtualenv-multipython\": \"0.5.1\",\n      \"wheel\": \"0.45.1\"\n    }\n  },\n  \"base_image\": {\n    \"name\": \"debian\",\n    \"channel\": \"stable-slim\",\n    \"digest\": \"sha256:5724d31208341cef9af6ae2be86be9cda6a87271f362a03481a522c9c19d401b\"\n  },\n  \"python\": [\n    {\n      \"version\": \"3.14.0a5t\",\n      \"source\": \"pyenv\",\n      \"tag\": \"py314t\",\n      \"short\": \"3.14t\",\n      \"command\": \"python3.14t\",\n      \"bin_dir\": \"/root/.pyenv/versions/3.14.0a5t/bin\",\n      \"binary_path\": \"/root/.pyenv/versions/3.14.0a5t/bin/python\",\n      \"is_system\": false,\n      \"packages\": {\n        \"pip\": \"25.0.1\",\n        \"setuptools\": \"75.8.0\",\n        \"wheel\": \"0.45.1\"\n      }\n    },\n...\n```\n\u003c!-- docsub: end --\u003e\n\n\n# Versions\n\nTools available in `base` image have (no surprise) the same versions in all other images. For Python package versions, `system` environment is used.\n\n✨ latest versions will be updated in upcoming releases.\n\n## Base image\n\n\u003c!-- docsub: begin --\u003e\n\u003c!-- docsub: x package-versions base --\u003e\n| Image tag | pyenv | uv |\n|---|---|---|\n| `base` | 2.5.3 ✨ | 0.5.31 ✨ |\n| *other images* | 2.5.3 ✨ | 0.5.31 ✨ |\n\u003c!-- docsub: end --\u003e\n\n## Derived images\n\n\u003c!-- docsub: begin --\u003e\n\u003c!-- docsub: x package-versions derived --\u003e\n| Image tag | pip | setuptools | tox | virtualenv | wheel |\n|---|---|---|---|---|---|\n| `cpython` | 25.0.1 ✨ | 75.8.0 ✨ | 4.24.1 ✨ | 20.29.2 ✨ | 0.45.1 ✨ |\n| `latest` | 25.0.1 ✨ | 75.8.0 ✨ | 4.24.1 ✨ | 20.29.2 ✨ | 0.45.1 ✨ |\n| `supported` | 25.0.1 ✨ | 75.8.0 ✨ | 4.24.1 ✨ | 20.29.2 ✨ | 0.45.1 ✨ |\n| `unsafe` | 25.0.1 ✨ | 75.8.0 ✨ | 4.5.1.1 | 20.21.1 | 0.45.1 ✨ |\n\u003c!-- docsub: end --\u003e\n\n\n## Single version images\n\n\u003c!-- docsub: begin --\u003e\n\u003c!-- docsub: x package-versions single --\u003e\n| Image tag | pip | setuptools | tox | virtualenv | wheel |\n|---|---|---|---|---|---|\n| `py314t` | 25.0.1 ✨ | 75.8.0 ✨ | 4.24.1 ✨ | 20.29.2 ✨ | 0.45.1 ✨ |\n| `py313t` | 25.0.1 ✨ | 75.8.0 ✨ | 4.24.1 ✨ | 20.29.2 ✨ | 0.45.1 ✨ |\n| `py314` | 25.0.1 ✨ | 75.8.0 ✨ | 4.24.1 ✨ | 20.29.2 ✨ | 0.45.1 ✨ |\n| `py313` | 25.0.1 ✨ | 75.8.0 ✨ | 4.24.1 ✨ | 20.29.2 ✨ | 0.45.1 ✨ |\n| `py312` | 25.0.1 ✨ | 75.8.0 ✨ | 4.24.1 ✨ | 20.29.2 ✨ | 0.45.1 ✨ |\n| `py311` | 25.0.1 ✨ | 75.8.0 ✨ | 4.24.1 ✨ | 20.29.2 ✨ | 0.45.1 ✨ |\n| `py310` | 25.0.1 ✨ | 75.8.0 ✨ | 4.24.1 ✨ | 20.29.2 ✨ | 0.45.1 ✨ |\n| `py39` | 25.0.1 ✨ | 75.8.0 ✨ | 4.24.1 ✨ | 20.29.2 ✨ | 0.45.1 ✨ |\n| `py38` | 25.0.1 ✨ | 75.3.0 | 4.24.1 ✨ | 20.29.2 ✨ | 0.45.1 ✨ |\n| `py37` | 24.0 | 68.0.0 | 4.8.0 | 20.26.6 | 0.42.0 |\n| `py36` | 21.3.1 | 59.6.0 | 3.28.0 | 20.17.1 | 0.37.1 |\n| `py35` | 20.3.4 | 50.3.2 | 3.28.0 | 20.15.1 | 0.37.1 |\n| `py27` | 20.3.4 | 44.1.1 | 3.28.0 | 20.15.1 | 0.37.1 |\n\u003c!-- docsub: end --\u003e\n\n## Tox version\n\nThe minimal tox version v4.5.1.1 is dictated by [virtualenv support](https://virtualenv.pypa.io/en/latest/changelog.html) of Python versions. Virtualenv v20.22 dropped support for Python 3.6, v20.27 dropped support of Python 3.7. Depending on minimal Python version used in custom environment, tox version will be automatically selected by `py install`.\n\n| Min Python version | virtualenv | tox     |\n|--------------------|------------|---------|\n| `\u003c3.7`             | `\u003c20.22`   | `\u003c4.6`  |\n| `\u003c3.8`             | `\u003c20.27`   | `\u003e=4.6` |\n| `\u003e=3.8`            | `\u003e=20.27`  | `\u003e=4.6` |\n\n# Project versioning\n\nStarting from Jan 2025, multipython uses [CalVer](https://calver.org) convention with [Date62](http://github.com/date62/date62-python) based dates.\n\nRelease version format is `YYMD[.patch]`\n* `YY` is `25,26,...`\n* `M` is Base16 month (`1` = Jan, `A,B,C` = Oct, Nov, Dec)\n* `D` is Base62 day of month (from `1` to `V` = 31)\n* `.patch` is optional numerical suffix allowing multiple releases per day\n\n# Testing\n\n* All non-single-version targets and `py` helper tool are tested (see `/tests` directory for details).\n* Source files are linted with [Hadolint](https://github.com/hadolint/hadolint) and [ShellCheck](https://www.shellcheck.net).\n\n# Security\n\n1. Check [vulnerability reports](https://hub.docker.com/r/makukha/multipython/tags) provided by Docker Scout\n2. Use specific [image digest](https://hub.docker.com/r/makukha/multipython)\n3. Report security vulnerabilities via [GitHub Security Advisories](https://github.com/makukha/multipython/security/advisories)\n\nSecurity vulnerabilities can come from\n\n* Base [Debian image](https://hub.docker.com/_/debian/tags?name=stable-slim) `debian:stable-slim`\n* Python distributions, especially [reached end-of-life](https://devguide.python.org/versions)\n* multipython itself\n\n## Image digests\n\n```shell\n$ docker run --rm -v .:/src -w /src makukha/multipython@sha256:... tox run\n```\n\n\u003c!-- docsub: begin --\u003e\n\u003c!-- docsub: x image-digests --\u003e\n\u003c!-- docsub: lines after 2 --\u003e\n| Image tag | Image digest |\n|---|---|\n| `base-252D` | `sha256:091de4a2c046d9e17d972c90d709aa0ac9b3531dfc5f66c42293382774a0246f` |\n| `cpython-252D` | `sha256:a67dbfe1fad182a83e0cf91bb882961624929b96f44abf9b7fc8c70c7e0031b1` |\n| `py27-252D` | `sha256:957492d593cafa6d80c4f5b653cf5521cb46d61a989c73ea6e0af8f35614b4d8` |\n| `py310-252D` | `sha256:a578c54fe5135c101f150d398844b76f507286129bf253689c0417a5980befc1` |\n| `py311-252D` | `sha256:250b284d775b9d21d89372e6b045167216843f7a1afb758c5db2949bf3468ab0` |\n| `py312-252D` | `sha256:44d73f34d31d30ec13a01c30e5e0e0f8f2d37322fa26794ca6d65667606afdf3` |\n| `py313-252D` | `sha256:ad9b9759cb9bc36649a77aaa2f64ab9c7b0b8a97b74ae2c2d2735cb74d7c204c` |\n| `py313t-252D` | `sha256:b2f433a85086e60df89630426ba113bcc98d9fac6d90bdd9c29f989d94543fd7` |\n| `py314-252D` | `sha256:81fff7432462e15c9dcd55381fe6a8baa68c02e07aa168ef06fbaac417069f97` |\n| `py314t-252D` | `sha256:c334ae77b51710008e150f043d2c6e8b021e4f1733fcbcaba141523c8487bf22` |\n| `py35-252D` | `sha256:96ab4482164badc273752caae3a402d9663a34639f7d98d14f7ae475181519e2` |\n| `py36-252D` | `sha256:e3bbbfedf59f80f74a2d7ef55f9753e3c65fc0f5cef1deae508ef2cb12569ed7` |\n| `py37-252D` | `sha256:811c5b9e2dc1904334af3e04c0934a61b094cf60210ad91bc7f62d49e4d54ede` |\n| `py38-252D` | `sha256:853aa94521454d6c9cfd2fee22b8dba952cb765772b180fe30527b992509c9d0` |\n| `py39-252D` | `sha256:2bb16898c0c2816fe1787ea06945219069e4279b2c8ff3c5a252ee0e29193024` |\n| `supported-252D` | `sha256:a3a30be836c1c2f74502f6ce1b077a8f393bc3a13994199184c84734f4ea320e` |\n| `unsafe-252D` | `sha256:b5643aaa4abdbbc814a470def110b454b035b119a4f8ccd21ad5f9ae425d1453` |\n\u003c!-- docsub: end --\u003e\n\n\n# Alternatives\n\n* **GitHub Action [setup-python](https://github.com/actions/setup-python)**\n    * Supports all patch versions but [does not support Python 2.7](https://github.com/actions/setup-python/issues/672) and does not support free threaded 3.13 [at the moment](https://github.com/actions/setup-python/issues/771).\n\n* **[divio/multi-python](https://github.com/divio/multi-python)**\n    * Apt CPython 3.7 to 3.12 from deadsnakes PPA.\n\n* **[dhermes/python-multi](https://github.com/dhermes/python-multi)**\n    * pyenv CPython 3.8 to 3.12, PyPy 3.10.\n\n* **[vicamo/pyenv](https://hub.docker.com/r/vicamo/pyenv/tags)**\n    * Lacks recent versions\n\n\n# Feedback and contributing\n\n\u003c!-- docsub: begin --\u003e\n\u003c!-- docsub: include docs/part/feedback.md --\u003e\n* To file bug report or feature request, please [create an issue](https://github.com/makukha/multipython/issues).\n* To report security vulnerability, please use [GitHub Security Advisories](https://github.com/makukha/multipython/security/advisories).\n* Want to contribute? Check [Contribution Guidelines](https://github.com/makukha/multipython/blob/main/.github/CONTRIBUTING.md).\n\u003c!-- docsub: end --\u003e\n\n\n# Changelog\n\nCheck repository [CHANGELOG.md](https://github.com/makukha/multipython/tree/main/CHANGELOG.md)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmakukha%2Fmultipython","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmakukha%2Fmultipython","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmakukha%2Fmultipython/lists"}