pypi / python-discovery
python-discovery
What changed in python-discovery 1, from its official release notes, upgrade guides and advisories. Sources checked 2026-11-13.
4 breaking11 security17 fixes and other
See which of these apply to your code, ranked, in your agent:
npx @unstale/cli initpython-discovery 132 changes
Breaking changes 4
With no key, iter_interpreters no longer probes PATH directories or subdirectories named like Python executables as interpreters.
Checks version specifiers at the precision they were written with, preventing
3.11from satisfying>=3.13.Searches PATH without probing a matching file in the working directory; use ./name when the working directory contains the intended interpreter.
When an explicit env mapping omits HOME or USERPROFILE, uv-managed interpreter discovery no longer searches the process home directory.
Security 11
Uses the profile default for empty or relative APPDATA and skips relative profile paths when finding uv-managed Pythons.
Skips untrusted disk cache directories and entries on POSIX, and replaces cache files without following links.
When imported from an archive, extracts the probe into a private temporary directory to prevent it from importing modules supplied in the shared temp directory.
Limits candidate stdout and stderr during interpreter queries so a noisy candidate cannot exhaust the caller's memory.
Rejects format widths in interpreter sysconfig paths before they can allocate oversized strings.
Skips relative PATH entries, including the working-directory entry in the Windows default search path, when discovering interpreters.
Skips entries with relative or non-string executable paths and continues interpreter discovery.
Places cache locks in a restricted directory and preserves group sharing under a group-permissive umask.
Validates version names before using them as directory names, preventing version files from directing the resolver to binaries outside a version manager's installation directory.
Skips files over 4096 characters during shim resolution, limiting memory use and allowing a parent or global version to apply.
No longer executes Tk startup profile files from the home or working directory.
Fixes and other changes 17
Skips mismatched releases and interrogates candidates whose prerelease status is unknown.
Uses the supplied environment for base-interpreter probes when resolving a virtual environment.
Preserves interpreter-provided values when answer keys match computed properties during cache serialization.
Handles interpreter paths containing non-UTF-8 filesystem bytes when using DiskCache.
Excludes prereleases of the final version named by an exclusive upper bound, such as rejecting 3.12.0rc1 for <3.12.0.
Writes cache entries as compact JSON so their size stays proportional to the interpreter response.
Skips candidates that return JSON without usable interpreter metadata and continues searching.
Retries interpreter discovery without the cache when cache access fails.
Checks the interpreter's reported implementation when a spec names a known implementation, regardless of its filename on PATH.
Returns after an interpreter query times out without leaving pipe readers blocked by a child process.
Matches literal interpreter names against the executable found on PATH, including symlink names.
No longer reuses results across projects, preventing a version choice in one checkout from blocking discovery in another.
No longer opens an X display, avoiding blocks from unresponsive displays and allowing Tk library detection on headless systems.
Preserves a virtual environment selected through try_first_with instead of returning its base interpreter.
Finds uv-managed patch releases when a version specifier names only their major and minor version.
Stops repeated interpreter queries when a virtual environment reports the same base prefix with different path spellings.
Prevents an earlier virtual-environment lookup from reporting an executable under the wrong Python version.