Repository navigation
v1.9.2
Immutable
release. Only release title and notes can be modified.
Bug fixes
- Match literal interpreter names against the executable found on
PATH, including symlink names (#220) by @gaborbernat. (#188) - Preserve a virtual environment selected through
try_first_withinstead of returning its base interpreter (#218) by @gaborbernat. (#191) - Skip interpreter candidates that return JSON without usable interpreter metadata and continue searching (#231) by @gaborbernat. (#197)
- Reject format widths in interpreter sysconfig paths before they allocate oversized strings (#229) by @gaborbernat. (#199)
- Check the interpreter's reported implementation when a spec names a known implementation, regardless of its filename on
PATH(#233) by @gaborbernat. (#201) - Write interpreter cache entries as compact JSON to keep their size proportional to the interpreter response (#237) by @gaborbernat. (#204)
- Prevent an earlier virtual-environment lookup from reporting an executable under the wrong Python version (#215) by @gaborbernat.
- Retry interpreter discovery without the cache when cache access fails (#216) by @gaborbernat.
- Exclude prereleases of the final version named by an exclusive upper bound, such as
<3.12.0rejecting3.12.0rc1(#217) by @gaborbernat. - Stop repeated interpreter queries when a virtual environment reports the same base prefix with different path spellings (#219) by @gaborbernat.
- Limit candidate stdout and stderr during interpreter queries so a noisy candidate cannot exhaust the caller's memory (#223) by @gaborbernat.
- Find uv-managed patch releases when a version specifier names only their major and minor version (#227) by @gaborbernat.
- Handle interpreter paths containing non-UTF-8 filesystem bytes when using DiskCache (#230) by @gaborbernat.
- Preserve interpreter-provided values when answer keys match computed properties during cache serialization (#234) by @gaborbernat.
- Return after an interpreter query times out without leaving pipe readers blocked by a child process (#228) by @gaborbernat.
- Use the supplied environment for base-interpreter probes when resolving a virtual environment (#225) by @gaborbernat.
Security
- When an explicit
envmapping omitsHOMEorUSERPROFILE, uv-managed interpreter discovery no longer searches the process home directory (#236) by @gaborbernat. (#200) - Skip relative
PATHentries, including the working-directory entry in the Windows default search path, when discovering interpreters (#235) by @gaborbernat. (#202) - Validate pyenv, mise and asdf version names before using them as directory names. A version file can no longer direct python-discovery's resolver to a binary outside the version manager's installation directory (#205) by @gaborbernat.
- When imported from an archive, python-discovery now extracts its interpreter probe into a private temporary directory. This prevents the probe from importing modules supplied in the shared temp directory (#206) by @gaborbernat.
- Bare interpreter names now search
PATHwithout probing a matching file in the working directory. Use./namewhen the working directory contains the intended interpreter (#207) by @gaborbernat. - Tcl/Tk library detection no longer executes Tk startup profile files from the home or working directory (#208) by @gaborbernat.
- Discovery skips
.python-versionfiles over 4096 characters during shim resolution, limiting memory use and allowing a parent or global version to apply (#209) by @gaborbernat. - Discovery uses the profile default for empty or relative
APPDATAand skips relative profile paths when finding uv-managed Pythons (#210) by @gaborbernat. - Tcl/Tk library detection no longer opens an X display, so an unresponsive display cannot block interpreter discovery. It can also find the Tk library on headless systems (#211) by @gaborbernat.
- Skip PEP 514 registry entries with relative or non-string executable paths and continue interpreter discovery (#212) by @gaborbernat.
- Skip untrusted disk cache directories and entries on POSIX, and replace cache files without following links (#213) by @gaborbernat.
- Place POSIX cache locks in a restricted directory and preserve group sharing under a group-permissive umask (#214) by @gaborbernat.
- Interpreter discovery no longer reuses pyenv shim results across projects. A version choice in one checkout cannot leave an unsupported-version verdict that blocks discovery in another project (#232) by @gaborbernat.