NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #162 most downloaded on PyPI
Python interpreter discovery
Last release 17 days ago
18 Sep 2026
Ships on a steady schedule
a new release about every 2 weeks
Nearly every release is documented
notes for 22 of 22 stable releases
Nothing withdrawn
no release was ever pulled
7 months old
22 releases · first in 2026
One column per month.
📄 docs(py_info): cover system_exe in all four dimensions by @gaborbernat in #128
Full Changelog: 1.6.0...1.6.1
Skip empty PATH entries during interpreter discovery - by gaborbernat. (129)
✨ feat(py_info): add system_exe, a narrowed system executable by @gaborbernat in #127
Full Changelog: 1.5.3...1.6.0
~python_discovery.PythonInfo.system_exe returns the executable of the system Python an interpreter is based on, falling back to ~python_discovery.PythonInfo.executable the way ~python_discovery.PythonInfo.resolve_to_system does. ~python_discovery.PythonInfo.system_executable is None until resolution runs, so every consumer had to narrow a value discovery has already settled - by gaborbernat. (127)
📄 docs: publish llms.txt from the docs build by @gaborbernat in #118
Full Changelog: 1.5.2...1.5.3
Restore discovery of Python 3.6 and 3.7 interpreters: the interrogation script had grown 3.8-only syntax and is now kept to Python 3.6. Candidates below 3.6 log one warning naming the version found instead of two debug-level query attempts, and the verdict is cached so they are queried only once; an absolute-path spec for one raises RuntimeError with the same message - by gaborbernat. (116)
Prefer the version-matched system executable when CPython reports an existing generic executable for a copied POSIX virtual environment. (124)
🐛 fix(py_info): discover Python 3.6 and 3.7 interpreters by @gaborbernat in #117
Full Changelog: 1.5.1...1.5.2
🐛 fix(uv): match uv's interpreter store lookup by @gaborbernat in #111
Full Changelog: 1.5.0...1.5.1
<!-- Release notes generated using configuration in .github/release.yaml at 1.5.1 -->
Full Changelog: https://github.com/tox-dev/python-discovery/compare/1.5.0...1.5.1
Locate uv's interpreter store the way uv does, using XDG on macOS (~/.local/share/uv/python) and roaming %APPDATA%\uv\python on Windows, neither of which platformdirs reported. The uv variables now come from the env mapping rather than os.environ - by gaborbernat. (109)
Pick uv-managed interpreters by install directory name instead of globbing the store. A bare 3.8 now means CPython, the way uv resolves it, rather than whichever implementation the filesystem happened to list first, and probing runs newest version first - by gaborbernat. (110)
Replace prettier with mdformat and yamlfmt by @gaborbernat in #101
Full Changelog: 1.4.4...1.5.0
<!-- Release notes generated using configuration in .github/release.yaml at 1.5.0 -->
Full Changelog: https://github.com/tox-dev/python-discovery/compare/1.4.4...1.5.0
Declare support for Python 3.15 and run the test suite against it, currently in beta. (104)
<!-- Release notes generated using configuration in .github/release.yaml at 1.4.4 -->
<!-- Release notes generated using configuration in .github/release.yaml at 1.4.4 -->
Full Changelog: https://github.com/tox-dev/python-discovery/compare/1.4.3...1.4.4
Full Changelog: 1.4.3...1.4.4
Parse the debug build flag in interpreter specs - python3.13d and Debian's python3.13-dbg / python3.13-debug now select a Py_DEBUG interpreter instead of being misread as an ISA named dbg. Resolving a virtualenv to its base interpreter also checks the free-threaded and debug ABI flags, so a debug or free-threaded environment no longer resolves to a release build of the same version - by gaborbernat. (96)
🐛 fix(build): match hatchling floor to python-requires by @gaborbernat in #94
Full Changelog: 1.4.2...1.4.3
<!-- Release notes generated using configuration in .github/release.yaml at 1.4.3 -->
Full Changelog: https://github.com/tox-dev/python-discovery/compare/1.4.2...1.4.3
Constrain the hatchling build requirement per Python version so sdist builds resolve a compatible backend on the declared >=3.8 floor - hatchling>=1.28 dropped Python 3.9, leaving 3.8/3.9 unbuildable from source - by gaborbernat. (92)
🐛 fix: stop symlink resolution at stdlib landmark and framework builds by @gaborbernat in #87
Full Changelog: 1.4.1...1.4.2
<!-- Release notes generated using configuration in .github/release.yaml at 1.4.2 -->
Full Changelog: https://github.com/tox-dev/python-discovery/compare/1.4.1...1.4.2
Stop executable symlink resolution once the stdlib landmark is reachable and keep macOS framework builds untouched, matching getpath - Homebrew interpreters no longer get version-pinned Cellar paths recorded and stable aliases such as Debian's /usr/bin/python3 are preserved - by gaborbernat. (86)
🐛 fix: resolve executable-only symlinks in system_executable by @gaborbernat in #85
Full Changelog: 1.4.0...1.4.1
<!-- Release notes generated using configuration in .github/release.yaml at 1.4.1 -->
Full Changelog: https://github.com/tox-dev/python-discovery/compare/1.4.0...1.4.1
Resolve executable-only symlinks when computing system_executable, mirroring CPython's getpath.realpath (python/cpython#115237): a symlink to the interpreter binary now resolves to the real interpreter, while a fully symlinked interpreter tree is kept as-is - by gaborbernat. (84)
✨ feat(info): expose debug build status by @gaborbernat in #79
Full Changelog: 1.3.2...1.4.0
<!-- Release notes generated using configuration in .github/release.yaml at 1.4.0 -->
Full Changelog: https://github.com/tox-dev/python-discovery/compare/1.3.2...1.4.0
Add debug_build attribute to PythonInfo exposing whether the interpreter is a debug build (Py_DEBUG) - by gaborbernat. (80)
No significant changes.
🐛 fix(spec): allow dots in machine/ISA specifier by @gaborbernat in #78
Full Changelog: 1.3.1...1.3.2
<!-- Release notes generated using configuration in .github/release.yaml at 1.3.2 -->
Full Changelog: https://github.com/tox-dev/python-discovery/compare/1.3.1...1.3.2
<!-- Release notes generated using configuration in .github/release.yaml at 1.3.1 -->
<!-- Release notes generated using configuration in .github/release.yaml at 1.3.1 -->
Full Changelog: https://github.com/tox-dev/python-discovery/compare/1.3.0...1.3.1
export normalize_isa and deprecate KNOWN_ARCHITECTURES - by rahuldevikar. (59)
discover uv-managed Pythons on Windows. Previously the glob assumed Unix layout (<root>/<key>/bin/python) and silently found nothing on Windows, where uv places python.exe directly under the install root - by gaborbernat. (65)
Canonicalize GraalVM to match GraalPy Python interpreter in PythonSpec and PythonInfo. - by timfel. (73)
<!-- Release notes generated using configuration in .github/release.yaml at main -->
<!-- Release notes generated using configuration in .github/release.yaml at main -->
Full Changelog: https://github.com/tox-dev/python-discovery/compare/1.2.2...1.3.0
Add ~python_discovery.iter_interpreters for enumerating every discovered interpreter, with PATH and UV-install support for non-CPython implementations listed in ~python_discovery.KNOWN_IMPLEMENTATIONS (71)
export normalize_isa and deprecate KNOWN_ARCHITECTURES by @rahuldevikar in https://github.com/tox-dev/python-discovery/pull/62
<!-- Release notes generated using configuration in .github/release.yaml at 1.2.2 -->
Full Changelog: https://github.com/tox-dev/python-discovery/compare/1.2.1...1.2.2
Export normalize_isa and deprecate KNOWN_ARCHITECTURES (62)
<!-- Release notes generated using configuration in .github/release.yaml at 1.2.1 -->
<!-- Release notes generated using configuration in .github/release.yaml at 1.2.1 -->
Full Changelog: https://github.com/tox-dev/python-discovery/compare/1.2.0...1.2.1
<!-- Release notes generated using configuration in .github/release.yaml at main -->
<!-- Release notes generated using configuration in .github/release.yaml at main -->
Full Changelog: https://github.com/tox-dev/python-discovery/compare/1.1.3...1.2.0
Increase interpreter query timeout to 15s, with an override (53)
<!-- Release notes generated using configuration in .github/release.yaml at main -->
<!-- Release notes generated using configuration in .github/release.yaml at main -->
Full Changelog: https://github.com/tox-dev/python-discovery/compare/1.1.2...1.1.3
<!-- Release notes generated using configuration in .github/release.yaml at main -->
<!-- Release notes generated using configuration in .github/release.yaml at main -->
Full Changelog: https://github.com/tox-dev/python-discovery/compare/1.1.1...1.1.2
Match prerelease versions against major.minor specs (48)
Drain pipes after killing a timed-out interpreter probe (49)
<!-- Release notes generated using configuration in .github/release.yaml at main -->
<!-- Release notes generated using configuration in .github/release.yaml at main -->
Full Changelog: https://github.com/tox-dev/python-discovery/compare/1.1.0...1.1.1
Add a timeout to interpreter probing (42)
Add i686 to known ISAs (43)
<!-- Release notes generated using configuration in .github/release.yml at main -->
<!-- Release notes generated using configuration in .github/release.yml at main -->
predicate parameter to get_interpreter by @gaborbernat in https://github.com/tox-dev/python-discovery/pull/31Full Changelog: https://github.com/tox-dev/python-discovery/compare/1.0.0...1.1.0
♻️ refactor: rewrite with standalone python_discovery from virtualenv by @gaborbernat in https://github.com/tox-dev/python-discovery/pull/28
Full Changelog: https://github.com/tox-dev/python-discovery/commits/1.0.0
Initial release as a standalone package, extracted from virtualenv (28)
Your coding agent can read these notes before it upgrades. Set up the MCP server →