changelogs/0.2.x.md
Starting with this release, uv will use the minor version tag to indicate breaking changes.
In this release, discovery of Python interpreters has changed. These changes should have a limited effect in most use-cases, however, it has been marked as a breaking change because the interpreter used by uv could change in some edge cases.
When multiple Python interpreters are installed, uv makes an attempt to find the exact version you requested. Previously, uv would stop at the first Python interpreter it discovered — if the interpreter did not satisfy the requested version, uv would fail. Now, uv will query multiple Python interpreters until it finds the requested version, skipping interpreters that are broken or do not satisfy the request.
Additionally, uv now allows requests for interpreter implementations such as pypy and cpython.
For example, the request --python cpython will ignore a python executable that's implemented by
pypy. These requests may also include a version, e.g., --python [email protected]. By default, uv will
accept any interpreter implementation.
In summary, the following Python interpreter requests are now allowed:
3.10./foo/.venv~/bin/pythonpypy or cpythonpypy3.8 or [email protected]PATH), e.g., foopython3Previously, interpreter requests that were not versions or paths were always treated as executable names.
To align the user expectations, uv now respects the interpreter that starts it. For example,
python -m uv ... will now prefer the python interpreter that was used to start uv instead of
searching for a virtual environment.
We now check if discovered interpreters are virtual environments. This means that setting
VIRTUAL_ENV to a Python installation directory that is not a virtual environment will no longer
work. Instead, use --system or --python <path> to request the interpreter.
pypy interpreters by implementation name
(#3706)python -m uv
#3736--constraint files in pip sync (#3741)--config-file to be passed before or after command name
(#3730)--offline a global argument (#3729)false (#3681)DirWithoutEntrypoint error message (#3690)--dry-run (#3740)manylinux wheel in favor of dual-tagged wheel
(#3685)python-patch test feature is no longer on by default and must be manually enabled to test
patch version behavior (#3746)--prefix link to compatibility guide (#3734)--only-binary to compatibility guide (#3735)uv-trampolines
(#3731)uv tool run (#3657)uv tool run and uv run
(#3676)uv run failures (#3691)uv sync (#3692)uv tool run
(#3677)CONDA_PREFIX as system interpreters
(#3771)unsafe-any-match (#3820)aarch64-unknown-linux-gnu from list of expected binaries
(#3761)python3 in unix virtual environments
(#3798)pip compile
(#3804)uv tool run
(#3678)--system and --python to be passed together
(#3830)libc on other platforms (#3825)prepare_metadata_for_build_editable hook
(#3870)"arm" architecture variant
(#3855)uv tool run (#3882)--preview for now
(#3884)i686 alias for x86 (#3899)ppc64le alias for powerpc64le (#3963)--python-version patch behavior
(#3989)OnceMap (#3987)uv run --package (#3864)uv lock (#3956)uv run (#3894)uv lock (#3969)NO_COLOR and FORCE_COLOR environment variables
(#3979)pip sync requirements with markers
(#4051)Requires-Python in universal resolution
(#3998)uv venv handling when VIRTUAL_ENV refers to an non-existent environment
(#4073)Requires-Python is absent
(#4070)Requires-Python when syncing (#4068).egg-link files in site packages
(#4082)Requires-Python (#4086)specifying_dependencies
(#4158)--system flag (#4031)uv toolchain install (#4164)uv toolchain list (#4163)Requires-Python comparisons at the patch version
(#4150)uv run (#4143)specifying_dependencies
(#4158)Toolchain::find_or_fetch and use in uv venv --preview
(#4138)--python or requires-python doesn't match
(#3945)--find-links in lock and sync (#4183)--dev to default for uv run and uv sync
(#4118)Markers via a PubGrub package variant (#4123)requires-python in workspace (#4041)--index-url
(#4226)XDG_CONFIG_HOME=/dev/null (#4200)METADATA file a recoverable error
(#4247)u64 (#4253)aarch64-unknown-linux-gnu binary to release assets
(#4254)uv add and uv remove
(#4193)requires-python specifiers
(#4216)toolchain fetch with toolchain install
(#4228)--only-binary and --no-binary packages to override :all:
(#4067)lib64 symlink (#4268)--no-binary with uv pip compile (#4301)--no-system from the CLI (#4292)--reinstall, --upgrade, and --refresh shared arguments
(#4319)UV_EXCLUDE_NEWER environment variable (#4287)pip-compile defaults to PIP_COMPATIBILITY.md
(#4302)pip-compile default differences (#4306)--force option to uv toolchain install
(#4313)--no-build, --no-build-package, and binary variants
(#4322)EXTERNALLY-MANAGED markers to managed toolchains
(#4312)uv toolchain find (#4206)pip APIs
(#4294)uv toolchain install
(#4334)uv sync by default
(#4366)requires-python in uv lock (#4282)requires-python in interpreter selection
(#4298)uv add (#4326)uv sync --no-clean (#4367)Requires-Python to filter dependencies during universal resolution
(#4273)--workspace option to uv add (#4362)uv toolchain list
(#4382).python-version files and fetch managed toolchains in uv project commands
(#4361).python-version in uv venv --preview
(#4360)toolchain-preference as a CLI and configuration file option
(#4424)uv run and uv tool run
(#4404)tool.uv.sources support for uv add (#4406)--emit-build-options flag to uv pip compile interface
(#4463)pythonw support for gui scripts on Windows
(#4409)uv pip tree (#3859)uv pip compile with --universal
(#4505)--no-strip-markers in uv pip compile output
(#4503)--no-dedupe support to uv pip tree (#4449)--prefix
(#4506)requirements.txt files
(#4525)file:// paths to serve as --index-url values
(#4524).egg-info filename parsing spec compliant
(#4533)pyproject.toml
(#4526)--package argument to uv add and uv remove
(#4556)uv tool install (#4492)uv run (#4549)uv.sources without --preview non-fatal
(#4558)uv add
(#4557)distribution.sdist from lockfile when it is redundant
(#4528)source and version from lock file when unambiguous
(#4513)uv lock to read overrides from tool.uv (#4108)
(#4369)--extra to uv add and enable fine-grained updates
(#4566)--universal and --python-platform mutually exclusive
(#4598)--depth and --prune support to pip tree
(#4440)py not found errors during interpreter discovery
(#4620)--universal
(#4597)pip tree
(#4611)uv venv --seed
(#4588)uv tool list (#4630)uv tool uninstall (#4641)name@version in uv tool run
(#4572)uv add to specify optional dependency groups
(#4607)uv tool install
(#4564)source field in lock file more structured
(#4627)--disable-pip-version-check to compatibility arguments
(#4672)uv pip sync to clear an environment with opt-in
(#4517)--invert to uv pip tree (#4621)(*) in uv pip tree for empty packages
(#4673)--package to uv pip tree (#4655)requires-python requirement in resolver forks
(#4707)uv pip tree
(#4652)uv tool uninstall
(#4740)uv tool install (#4736)uv run (#4656)tool dir and toolchain dir commands (#4695)pythonX.Y segment in stdlib path for managed toolchains on Windows
(#4727)uv toolchain uninstall (#4646)uvx alias for uv tool run (#4632)prefer prefix from toolchain-preference values
(#4602)uv tool install and uv tool run
(#4717)--force (#4697)uv tool install (#4693)uv tool install
(#4716)uvx binary
(#4743)uvx.exe binary on Windows
(#4756)freeze and list help text (#4751)--exclude-newer to installer arguments (#4785)uv help menu
(#4773)UV_OVERRIDE environment variable for --override
(#4836)requires-python
(#4794)--find-links (#4838)uv tool run (#4784)uv.lock (#4799)uv cache prune removes all cached environments
(#4845)uvx (#4770)uv run --isolated
(#4849)uv tool run (#4750)--prefix subdirectories (#4895)requires-python when prefetching (#4900)Requires-Python version narrowing
(#4902)uv python list
(#4884)--with requirements if present in base environment
(#4879)--upgrade-package
(#4952)manylinux_2_31 to supported --python-platform
(#4965)--help is used (#4772)uv help global options during uv help
(#4906)uv help display when available
(#4909)uv crate to be used as a library (#4642)uv python pin (#4950)uv run with unknown Python version
(#4913)--all to uninstall all managed Pythons
(#4932)--all to uninstall all managed tools (#4937)uv tree (#4708)uv python install
(#4940)uv sync by default (#4839)--isolated in uv python install (#4938)uv remove (#4930)uv venv
(#5047)--no-build-isolation torch dependencies
(#5041)wheel error message with --no-build-isolation
(#4964)--no-pager option in help command (#5007)--isolated global argument (#5005)pyproject.toml configuration is detected
(#5025)Content-Length header is absent
(#5000)--upgrade-package from the pip compile header
(#5032)--upgrade-package when option and value are passed as a single argument
(#5033)pyproject.toml path in warnings (#5069)CONTRIBUTING.md instructions to install multiple Python versions
(#5015)--from (#5002)python install --force parameter to --reinstall
(#4999)uv tool install hint the correct when the executable is available
(#5019)uv tool run error messages references uvx when appropriate
(#5014)uvx warns when requested executable is not provided by the package
#5071)uv tool install request is already satisfied
(#4986)uv python list
(#5036)uv tool run suggest valid commands when command is not found
(#4997)uv tool (#5029)--no-progress global option to hide all progress animations
(#5098)requires-python
(#5084)pip compile command checks to handle exact argument first
(#5111)--universal implies --no-strip-markers
(#5121)uv lock --upgrade has updated the lock file
(#5110)pyproject.toml reformatting to respect original indentation
(#5075)--verify-hashes hash-checking mode (#4007)python3.x executables in the PATH
(#5148)--link-mode=symlink (#5208)which-retrieved path directly when spawning pager
(#5198)--frozen to uv add, uv remove, and uv tree
(#5214)--locked and --frozen to uv run CLI (#5196)uv tool dir --bin to show executable directory
(#5160)uv tool list --show-paths to show install paths
(#5164)python pin CLI (#5215).python-version reads
(#5223)--python-preference only-system is specified
(#5219)python pin compatibility with Requires-Python
(#4989)uv run in uv tree CLI (#5216)ResolverMarkers
(#5099)uv init (#4791)uv tool list (#5156)projects.md (#5154)requirements.txt in universal mode
(#5334)--find-links (#5323)pythonw.exe (#5259)Requires-Python consistently in CLI output
(#5304)--show-version-specifiers to tree (#5240)Requires-Python major-minor
(#5289)cache clean
(#5353)are from wheel tag error messages
(#5303)requires-python to uv init (#5322)uv add --no-editable (#5246)uv run
(#4973)uv init (#5321)pyproject.toml prior to workspace discovery
(#5317)uv init . (#5330)uv init creation of a sub-package by path
(#5247)uv tool run suggestion (#5267)tool CLI (#5326)uv init (#5318)--isolated flag is used in uv init
(#5290)uv init (#5292)uv python pin if --isolated is provided
(#5354)uv python list (#5343)uv init
(#5250)uv init (#5293)--ci mode to uv cache prune (#5391)--link-mode=symlink documentation
(#5387)uv init --virtual (#5396)uv init in unmanaged projects (#5372).python-version[s] (#5350)uv lock (#5413)uv run and uv tool run
(#5395)--raw-sources as conflicting with sources-specific arguments
(#5378)uv init
(#5406)uv venv with managed Python
(#5311)uv add with sources
(#5370)uv lock updates
(#5410)requirements.txt files in uv tool install and uv tool run
(#5362)requirements.txt-provided arguments in uv run et al
(#5364)sitecustomize.py to implement environment layering
(#5462)--relocatable flag to uv venv (#5515)xz-compressed packages (#5513).dist-info directories
(#5520)pip list --editable conflict with --exclude-editable
(#5506)--find-links entries (#5544)--no-cache with --link-mode=symlink (#5519)uv pip install for unmanaged projects (#5504)hatchling rather than implicit setuptools default
(#5527)--editable installs for uv tool (#5454)--isolated flag in favor of --no-config
(#5466)requires-python narrowing in forks
(#5583)uv run --directory (#5566)--isolated support to uv run (#5471)--no-workspace and --no-project in lieu of --isolated
(#5465)uv add
(#5502)uv tool run
(#5553)--directory a global argument (#5579)--isolated in tool run (#5470)--isolated usages from the uv python API
(#5468)uv run and uv tool run
(#5580)ksh to relocatable virtual environments
(#5640)--python and --python-version into the "Python options" help
(#5691)--no-pager) in uv help
(#5516)--package to uv sync (#5656)uv add calls that result in resolver errors
(#5664)uv venv
(#5592)uv init (#5669)uv add (#5705)--python-preference installed with managed
(#5637)uv add (#5688)UV_SYSTEM_PYTHON examples (#5659)requires-python
(#5644)uvx warn when no executables are available (#5675)git+ prefix when URLs end in .git (#5868)--python CLI documentation (#5869)--no-binary
(#5707)pyproject.toml in --config-file (#5842)--no-build-isolation to uv lock et al (#5829)--no-sources to avoid reading from tool.uv.sources
(#5801)uv add --no-sync and uv remove --no-sync
(#5881)uv tree
(#5766)--locked with Git dependencies
(#5865)--upgrade or --reinstall
(#5799)uvx --isolated
(#5798)python-to-pythonX.Y symlink exists in downloaded Pythons
(#5849)uv tree (#5870)uv init CLI (#5862)uv help python references in CLI documentation with links
(#5871).python-version in --isolated runs
(#5741).dist-info directories in tool installs
(#5756)--no-project
(#5846)--dev in virtual workspaces (#5821)uv tree (#5761)uv tree to current platform by default
(#5763)uv tree (#5768)--python-platform in uv tree (#5764)--no-sources (#5833)uv run (#5841)uvx in docs serve contributing command (#5795)--system and --no-system in uv venv
(#5925)--upgrade imply --refresh (#5943)--resolution-strategy lowest
(#5953)no-build-isolation-package (#5894)--no-deps mode (#5918)uv venv CLI documentation (#5963)update alias for uv tool upgrade (#5948)uvx (#5971)--upgrade (#5905)tool upgrade command (#5947)python-build-standalone downloads
(#5719)uv add (#5914)uv remove (#5916)uv lock CLI documentation (#5932)uv python CLI documentation (#5961)uv sync CLI documentation (#5930)uv tree CLI documentation (#5917)uv tool upgrade command (#5197)uv add operations simpler (#5922)distribution to packages in lockfile
(#5861)--upgrade-package in tool install (#5941)--upgrade-package when resolving from lockfile
(#5907)uv run and uv tool run
(#5899)--with layers (#5897)uv run commands
(#5977)pyproject.toml fails
(#6009)run and tool run
(#5991)--find-links entries in lockfile
(#6025)uv tool list help (#6003)uv tool commands (#5983)editable: false support (#5987)Option<MarkerTree> in ResolutionGraph
(#6035)tool.uv.sources relative to containing project
(#6045)uv add and uv remove
(#5995)tool.uv in PEP 723 scripts (#5990)--link-mode=copy warning (#6103)python-version-file to GitHub integration documentation
(#6086)--no-project (#6111)--locked to require satisfaction check
(#6102)uv.lock if registry sources are removed
(#6026)pyproject.toml (#6074)uv run CLI (#6110)same-graph merging in resolver (#6077)python_version markers to python_full_version
(#6126)