- Show
--editable
on theuv add
CLI (#6608) - Add
--refresh
totool run
warning for--with
dependencies (#6609)
- Allow per dependency build isolation for
setup.py
-based projects (#6517) - Avoid un-strict syncing by-default for build isolation (#6606)
- Respect
--no-build-isolation-package
inuv sync
(#6605) - Respect extras and markers on virtual dev dependencies (#6620)
- Support PEP 723 scripts in GUI files (#6611)
- Update lockfile after setting minimum bounds in
uv add
(#6618) - Use relative paths for
--find-links
and local registries (#6566) - Use separate types to represent raw vs. resolver markers (#6646)
- Parse wheels
WHEEL
andMETADATA
files as email messages (#6616) - Support unquoted hrefs in
--find-links
and other HTML sources (#6622) - Don't canonicalize paths to user requirements (#6560)
- Add FastAPI guide to overview (#6603)
- Add docs for disabling build isolation with
uv sync
(#6607) - Add example of reading script from stdin using echo (#6567)
- Add tip to use intermediate layers in Docker builds (#6650)
- Clarify need to include
pyproject.toml
with--no-install-project
(#6581) - Move
WORKDIR
directive in Docker examples (#6652) - Remove duplicate
WORKDIR
directive in Docker example (#6651)
- Add
uv sync --no-install-project
to skip installation of the project (#6538) - Add
uv sync --no-install-workspace
to skip installation of all workspace members (#6539) - Add
uv sync --no-install-package
to skip installation of specific packages (#6540) - Show previous version in self update message (#6473)
- Add
--no-project
alias foruv python pin --no-workspace
(#6514) - Ignore
.python-version
files inuv venv
with--no-config
(#6513) - Include virtual environment interpreters in
uv python find
(#6521) - Respect
-
as stdin channel foruv run
(#6481) - Revert changes to pyproject.toml when sync fails duing
uv add
(#6526)
- Add
UV_COMPILE_BYTECODE
environment variable (#6530)
- Set
VIRTUAL_ENV
foruv run
invocations (#6543) - Ignore errors in workspace discovery with
--no-project
(#6554)
- Add documentation for
uv python find
(#6527) - Add uv tool install example in Docker (#6547)
- Document why we do lower bounds (#6516)
- Fix to miss string termination in PowerShell commands for shell autocompletion documentation (#6491)
- Fix incorrect workspace members keyword (#6502)
- Use proper environment variables for Windows (#6433)
- Improve caveat in
uvx
note (#6546)
- Add support for configuring
python-downloads
withUV_PYTHON_DOWNLOADS
(#6436) - Add support for configuring the
python-preference
withUV_PYTHON_PREFERENCE
(#6432) - Deny invalid members in workspace schema (#6450)
- Stop streaming wheels when
METADATA
is discovered (if range requests aren't supported) (#6470)
- Remove URI type from JSON Schema (#6449)
- Fix retrieval of credentials for URLs from cache (#6452)
- Restore
cache
suffix on Windows cache path (#6482) - Treat
.pyw
files as scripts inuv run
on Windows (#6453) - Treat invalid extras as
false
in marker evaluation (#6395) - Avoid overwriting symlinks in
pip compile
output (#6487)
- Add
uv run
hint to theuvx
guide (#6454) - Add a guide for using uv with FastAPI (#6401)
- Add tip for using
managed = false
to disable project management (#6465) - Clarify the
uv tool run
,uvx
, anduv run
relationships (#6455) - Fix references to
--python-downloads
(it is--no-python-downloads
) (#6439) - Further clarifications to the tools documentation (#6474)
- Update docs dockerfile (bullseye -> bookworm) (#6441)
- Update the installation documentation page (#6468)
- Update pip compatibility pages to mention configuration files support (#6410)
- Add
uv run
docs for gui scripts (#6478)
- Add
--with-editable
support touv run
(#6262) - Respect
.python-version
files andpyproject.toml
inuv python find
(#6369) - Allow manylinux compatibility override via
_manylinux
module (#6039)
- Avoid treating
uv add -r
as--raw-sources
(#6287)
- Always invoke found interpreter when
uv run python
is used (#6363) - Avoid adding extra newline for script with non-empty prelude (#6366)
- Fix metadata cache instability for lockfile (#6332)
- Handle Ctrl-C properly in
uvx
invocations (#6346) - Ignore workspace discovery errors with
--no-workspace
(#6328) - Invalidate
uv.lock
when virtualdev-dependencies
change (#6291) - Make cache robust to removed archives (#6284)
- Preserve Git username for SSH dependencies (#6335)
- Respect
--no-build-isolation
inuv add
(#6368) - Respect
.python-version
files inuv run
outside projects (#6361) - Use
sys_executable
foruv run
invocations (#6354) - Use atomic write for
pip compile
output (#6274) - Use consistent logic for deserializing short revisions (#6341)
- Remove the preview default value of
python-preference
(#6301) - Update env vars doc about
XDG_*
variables on macOS (#6337)
This release introduces the uv project, tool, script, and python interfaces. If you've been following uv's development, you've probably seen these new commands behind a preview flag. Now, the interfaces are stable and ready for production-use.
These features are all documented in new, comprehensive documentation.
This release also stabilizes preview functionality in uv venv
:
uv venv --python <version>
will automatically download the Python version if requireduv venv
will read the required Python version from the.python-version
file orpyproject.toml
The uv pip
interface should not be affected by any breaking changes.
Note the following changelog entries does not include all the new features since they were added incrementally as preview features. See the feature page in the documentation for a comprehensive listing, or read the blog post for more context on the new features.
- Migrate to XDG and Linux strategy for macOS directories (#5806)
- Move concurrency settings to top-level (#4257)
- Apply system Python filtering to executable name requests (#4309)
- Remove
--legacy-setup-py
command-line argument (#4255) - Stabilize preview features (#6166)
- Add 32-bit Windows target (#6252)
- Add support for
python_version in ...
markers (#6172) - Allow user to constrain supported lock environments (#6210)
- Lift requirement that .egg-info filenames must include version (#6179)
- Change "any of" to "all of" in error messages (#6222)
- Collapse redundant dependency clauses enumerating available versions (#6160)
- Collapse unavailable packages in resolver errors (#6154)
- Fix messages for unavailable packages when range is plural (#6221)
- Improve resolver error messages when
--offline
is used (#6156) - Avoid overwriting dependencies with different markers in
uv add
(#6010) - Simplify available package version ranges when the name includes markers or extras (#6162)
- Simplify version ranges reported for unavailable packages (#6155)
- Rename
environment-markers
toresolution-markers
(#6240) - Support
uv add -r requirements.txt
(#6005)
- Hide global options in
uv generate-shell-completion
(#6170) - Show generate-shell-completion command in
uv help
(#6180) - Special-case reinstalls in environment update summaries (#6243)
- Add output when
uv add
anduv remove
update scripts (#6231) - Add support for
package@latest
intool run
(#6138) - Show
python find
output with-q
(#6256) - Warn when
--upgrade
is passed totool run
(#6140)
- Allow customizing the tool install directory with
UV_TOOL_BIN_DIR
(#6207)
- Use
FxHash
inuv-auth
(#6149)
- Avoid panicking when the resolver thread encounters a closed channel (#6182)
- Respect release-only semantics of
python_full_version
when constructing markers (#6171) - Tolerate missing
[project]
table inuv venv
(#6178) - Avoid using workspace
lock_path
as relative root (#6157)
- Preview changes are now included in the standard changelog (#6259)
- Document dynamic metadata behavior for cache (#5993)
- Document the effect of ordering on package priority (#6211)
- Make some edits to the workspace concept documentation (#6223)
- Update environment variables doc (#5994)
- Disable collapsible navigation in the documentation (#5674)
- Document
uv add
anduv remove
behavior with markers (#6163) - Document the Python installation directory (#6227)
- Document the
uv.pip
section semantics (#6225) - Document the cache directory (#6229)
- Document the tools directory (#6228)
- Document yanked packages caveat during sync (#6219)
- Link to persistent configuration options in Python versions document (#6226)
- Link to the projects concept from the dependencies concept (#6224)
- Improvements to the Docker installation guide (#6216)
- Increase the size of navigation entries (#6233)
- Install
ca-certificates
in docker and use pipefail (#6208) - Add script support to feature highlights in index (#6251)
- Show
uv generate-shell-completion
in CLI documentation reference (#6146) - Update Docker guide for projects (#6217)
- Use
uv add --script
in guide (#6215) - Show pinned version example on in GitHub Actions integration guide (#6234)
- Avoid cloning requirement for unchanged markers (#6116)
- Fix loading of cached metadata for Git distributions with subdirectories (#6094)
- Add env var to
--link-mode=copy
warning (#6103) - Avoid displaying "failed to download" on build failures for local source distributions (#6075)
- Improve display of available package ranges (#6118)
- Use "your requirements" consistently in resolver error messages (#6113)
- Add
python-version-file
to GitHub integration documentation (#6086) - Always narrow markers by Python version (#6076)
- Avoid warning for redundant
--no-project
(#6111) - Change the definition of
--locked
to require satisfaction check (#6102) - Improve debug log for interpreter requests during project commands (#6120)
- Improve display of resolution errors for workspace member conflicts with optional dependencies (#6123)
- Improve resolver error messages for single-project workspaces (#6095)
- Improve resolver error messages referencing workspace members (#6092)
- Invalidate
uv.lock
if registry sources are removed (#6026) - Propagate fork markers to extras (#6065)
- Redact Git credentials from
pyproject.toml
(#6074) - Redact Git credentials in lockfile (#6070)
- Remove 'tool' reference on
uv run
CLI (#6110) - Remove
same-graph
merging in resolver (#6077) - Strip SHA when constructing package source (#6097)
- Treat Git sources as immutable in lockfile (#6109)
- Use the proper singular form for workspace member dependencies in resolver errors (#6128)
- Use sets rather than vectors for lockfile requirements (#6107)
- Normalize
python_version
markers topython_full_version
(#6126) - Update Pythons to include Python 3.12.5 (#6087)
- Use consistent canonicalization for URLs (#5980)
- Improve warning message when parsing
pyproject.toml
fails (#6009) - Improve handling of overlapping markers in universal resolver (#5887)
- Add resolver error context to
run
andtool run
(#5991) - Avoid replacing executables on no-op upgrades (#5998)
- Colocate Python install cache with destination directory (#6043)
- Filter mixed sources from
--find-links
entries in lockfile (#6025) - Fix some outdated documentation discussing Python environments (#6058)
- Fix projects guide typo (#6033)
- Fix tools guide typo (#6027)
- Hide python options in
uv tool list
help (#6003) - Improve top-level help for
uv tool
commands (#5983) - Move help documentation into dedicated page (#6057)
- Remove
editable: false
support (#5987) - Remove uses of
Option<MarkerTree>
inResolutionGraph
(#6035) - Resolve relative
tool.uv.sources
relative to containing project (#6045) - Support PEP 723 scripts in
uv add
anduv remove
(#5995) - Support
tool.uv
in PEP 723 scripts (#5990) - Treat local indexes as registry sources in lockfile (#6016)
- Use simplified paths in lockfile (#6049)
- Use upgrade-specific output for tool upgrade (#5997)
- Deprecate
--system
and--no-system
inuv venv
(#5925) - Make
--upgrade
imply--refresh
(#5943) - Warn when there are missing bounds on transitive dependencies
with
--resolution-strategy lowest
(#5953)
- Add support for
no-build-isolation-package
(#5894)
- Enable LTO optimizations in release builds to reduce binary size (#5904)
- Prefetch metadata in
--no-deps
mode (#5918)
- Display portable paths in POSIX virtual environment activation commands (#5956)
- Respect subdirectories when locating Git workspaces (#5944)
- Improve the
uv venv
CLI documentation (#5963)
- Add CLI flags to reference documentation (#5926)
- Add
update
alias foruv tool upgrade
(#5948) - Add caveat about pip interface name (#5940)
- Add hint for long help to
uvx
(#5971) - Avoid requires-python warning in virtual-only workspace (#5895)
- Discard forks when using
--upgrade
(#5905) - Document the
tool upgrade
command (#5947) - Document virtual environment discovery (#5965)
- Enable mirror for
python-build-standalone
downloads (#5719) - Fix reuse of Git commits in lockfile (#5908)
- Ignore local configuration in tool commands (#5923)
- Improve the CLI documentation for
uv add
(#5914) - Improve the CLI documentation for
uv remove
(#5916) - Improve the
uv lock
CLI documentation (#5932) - Improve the
uv python
CLI documentation (#5961) - Improve the
uv sync
CLI documentation (#5930) - Improve the
uv tree
CLI documentation (#5917) - Fix link to tools concept page (#5906)
- Add
uv tool upgrade
command (#5197) - Implement marker trees using algebraic decision diagrams (#5898)
- Make repeated
uv add
operations simpler (#5922) - Move some documents to relevant sections (#5968)
- Rename
distribution
topackages
in lockfile (#5861) - Respect
--upgrade-package
in tool install (#5941) - Respect
--upgrade-package
when resolving from lockfile (#5907) - Retain and respect settings in tool upgrades (#5937)
- Search beyond workspace root when discovering configuration (#5931)
- Show build and install summaries in
uv run
anduv tool run
(#5899) - Support relative path wheels (#5969)
- Update the interface for declaring Python download preferences (#5936)
- Use cached environments for
--with
layers (#5897) - Warn when project-specific settings are passed to non-project
uv run
commands (#5977)
- Always strip in release mode (#5745)
- Assume
git+
prefix when URLs end in.git
(#5868) - Support build constraints (#5639)
- Create help sections for build, install, resolve, and index (#5693)
- Improve CLI documentation for global options (#5834)
- Improve
--python
CLI documentation (#5869) - Improve display order of top-level commands (#5830)
- Allow downloading wheels for metadata with
--no-binary
(#5707) - Reject
pyproject.toml
in--config-file
(#5842) - Remove double-proxy nodes in error reporting (#5738)
- Respect pre-release preferences from input files (#5736)
- Support overlapping local and non-local requirements in forks (#5812)
- Add "next steps" to some early documentation pages (#5825)
- Add
--no-build-isolation
to uv lock et al (#5829) - Add
--no-sources
to avoid reading fromtool.uv.sources
(#5801) - Add
uv add --no-sync
anduv remove --no-sync
(#5881) - Add a guide for publishing packages (#5794)
- Address some feedback in the tools documentation (#5827)
- Avoid lingering dev and optional dependencies in
uv tree
(#5766) - Avoid mismatch in
--locked
with Git dependencies (#5865) - Avoid panic when re-locking with precise commit (#5863)
- Avoid using already-installed tools on
--upgrade
or--reinstall
(#5799) - Better workspace documentation (#5728)
- Collapse policies section into reference (#5696)
- Don't show deprecated warning in
uvx --isolated
(#5798) - Ensure
python
-to-pythonX.Y
symlink exists in downloaded Pythons (#5849) - Fix CLI reference URLs to subcommands (#5722)
- Fix some console blocks in the environment doc (#5826)
- Group resolver options in lockfile (#5853)
- Improve CLI documentation for
uv tree
(#5870) - Improve documentation for
uv init
CLI (#5862) - Improvements to the documentation (#5718)
- Link to the GitHub integration guide from the cache concept (#5828)
- Make some minor tweaks to the docs (#5786)
- Omit local segments when adding uv add bounds (#5753)
- Remove top-level bar from Python installs (#5788)
- Replace
uv help python
references in CLI documentation with links (#5871) - Respect
.python-version
in--isolated
runs (#5741) - Respect malformed
.dist-info
directories in tool installs (#5756) - Reuse existing virtualenvs with
--no-project
(#5846) - Rewrite resolver docs (#5723)
- Show default and possible options in CLI reference documentation (#5720)
- Skip files when detecting workspace members (#5735)
- Support empty dependencies in PEP 723 scripts (#5864)
- Support uv add
--dev
in virtual workspaces (#5821) - Update documentation index (#5824)
- Update resolver reference documentation (#5823)
- Update the override section with some content from the README (#5820)
- Update the resolution concept documentation (#5813)
- Use cache for Python install temporary directories (#5787)
- Use lockfile directly in
uv tree
(#5761) - Use uv installer during build (#5854)
- Filter
uv tree
to current platform by default (#5763) - Redact registry credentials in lockfile (#5803)
- Show extras and dev dependencies in
uv tree
(#5768) - Support
--python-platform
inuv tree
(#5764) - Add help heading for
--no-sources
(#5833) - Avoid reusing incompatible distributions across lock and sync (#5845)
- Fix broken anchor links in docs about dependencies (#5769)
- Fix the default value of python-preference in docs/reference/settings.md (#5755)
- Improve CLI documentation for
uv run
(#5841) - Remove some trailing backticks from the docs (#5781)
- Use
uvx
in docs serve contributing command (#5795)
- Add support for
ksh
to relocatable virtual environments (#5640)
- Add help sections for global options (#5665)
- Move
--python
and--python-version
into the "Python options" help (#5691) - Show help specific options (i.e.
--no-pager
) inuv help
(#5516) - Update top-level command descriptions (#5706)
- Remove lingering executables after failed installs (#5666)
- Switch from heuristic freshness lifetime to hard-coded value (#5654)
- Don't use equals signs for CLI options with values (#5704)
- Add
--package
touv sync
(#5656) - Add documentation for caching the uv cache in GHA (#5663)
- Avoid persisting
uv add
calls that result in resolver errors (#5664) - Bold active nav links for accessibility (#5673)
- Check idempotence in packse lock scenarios (#5485)
- Detect python version from python project by default in
uv venv
(#5592) - Drop badges from docs landing (#5617)
- Fix non-registry serialization for receipts (#5668)
- Generate CLI reference for documentation (#5685)
- Improve copy of console command examples (#5397)
- Improve the project guide (#5626)
- Improve the Python version concepts documentation (#5638)
- Improve the dependency concept documentation (#5658)
- Include newly-added optional dependencies in lockfile (#5686)
- Initialize the cache in
uv init
(#5669) - Limit sync after
uv add
(#5705) - Move pip-compatibility doc into pip interface section (#5670)
- Move settings reference to reference section (#5689)
- Omit the nav bar title when it has no use (#5316)
- Omit transitive development dependencies from workspace lockfile (#5646)
- Prioritize forks based on Python narrowing (#5642)
- Prioritize forks based on upper bounds (#5643)
- Prompt an early jump to the feature overview during first steps (#5655)
- Remove breadcrumbs for navigation (#5676)
- Replace
--python-preference installed
withmanaged
(#5637) - Set lower bounds in
uv add
(#5688) - Simplify GHA
UV_SYSTEM_PYTHON
examples (#5659) - Support legacy tool receipts with PEP 508 requirements (#5679)
- Unhide the experimental top-level commands (#5700)
- Use "uv" for title of index instead of "Introduction" (#5677)
- Use fork markers and fork preferences in resolution with lockfile (#5481)
- Use full requirement when serializing receipt (#5494)
- Use intersection rather than union for
requires-python
(#5644) uvx
warn when no executables are available (#5675)
- Deprecate the
--isolated
flag in favor of--no-config
(#5466) - Re-enable
requires-python
narrowing in forks (#5583)
- Skip copying to empty entries in seekable zip (#5571)
- Use a consistent buffer size for downloads (#5569)
- Use a consistent buffer size when writing out zip files (#5570)
- Avoid setting executable permissions on files we might not own (#5582)
- Statically link liblzma (#5577)
- Implement
uv run --directory
(#5566) - Add
--isolated
support touv run
(#5471) - Add
--no-workspace
and--no-project
in lieu of--isolated
(#5465) - Add documentation for cache clearing (#5517)
- Add forks to lockfile, don't read them yet (#5480)
- Add links to documentation footer (#5616)
- Error when multiple git references are provided in
uv add
(#5502) - Improvements to the project concept docs (#5634)
- List installed tools when no command is provided to
uv tool run
(#5553) - Make
--directory
a global argument (#5579) - Reframe use of
--isolated
intool run
(#5470) - Remove
--isolated
usages from theuv python
API (#5468) - Rename more use of "lock file" to "lockfile" (#5629)
- Suppress resolver output by default in
uv run
anduv tool run
(#5580) - Wrap documentation at 100 characters (#5635)
- Add
--relocatable
flag touv venv
(#5515) - Support
xz
-compressed packages (#5513) - Warn, but don't error, when encountering tilde
.dist-info
directories (#5520)
- Make
pip list --editable
conflict with--exclude-editable
(#5506) - Add some missing reinstall-refresh calls (#5497)
- Avoid warning users for missing self-extra lower bounds (#5518)
- Generate hashes for
--find-links
entries (#5544) - Retain editable designation for cached wheel installs (#5545)
- Use 666 rather than 644 for default permissions (#5498)
- Retry on incomplete body (#5555)
- Ban
--no-cache
with--link-mode=symlink
(#5519)
- Allow
uv pip install
for unmanaged projects (#5504) - Compare simplified paths in Windows exclusion tests (#5525)
- Respect reinstalls in cached environments (#5499)
- Use
hatchling
rather than implicitsetuptools
default (#5527) - Use relocatable installs to support concurrency-safe cached environments (#5509)
- Support
--editable
installs foruv tool
(#5454) - Fix basic case of overlapping markers (#5488)
- Avoid canonicalizing executables on Windows (#5446)
- Set standard permissions for temporary files (#5457)
- Allow distributions to be absent in deserialization (#5453)
- Merge identical forks (#5405)
- Minor consistency fixes for code blocks (#5437)
- Prefer "lockfile" to "lock file" (#5427)
- Update documentation sections (#5452)
- Use
sitecustomize.py
to implement environment layering (#5462) - Use stripped variants by default in Python install (#5451)
- Add
--ci
mode touv cache prune
(#5391) - Display Python installation key for discovered interpreters (#5365)
- Allow symlinks to files in scripts directory (#5380)
- Always accept already-installed pre-releases (#5419)
- Validate successful metadata fetch for direct dependencies (#5392)
- Add warning to
--link-mode=symlink
documentation (#5387)
- Add PyPy finder (#5337)
- Add
uv init --virtual
(#5396) - Allow
uv init
in unmanaged projects (#5372) - Allow comments in
.python-version[s]
(#5350) - Always show lock updates in
uv lock
(#5413) - Improvements to the docs content (#5426)
- Fix blurring from nav title box shadow (#5374)
- Ignore Ctrl-C signals in
uv run
anduv tool run
(#5395) - Ignore hidden directories in workspace discovery (#5408)
- Increase padding between each nav section (#5373)
- Mark
--raw-sources
as conflicting with sources-specific arguments (#5378) - Omit empty uv.tool.dev-dependencies on
uv init
(#5406) - Omit interpreter path during
uv venv
with managed Python (#5311) - Omit interpreter path from output when using managed Python (#5313)
- Reject Git CLI arguments with non-Git sources (#5377)
- Retain dependency specifier in
uv add
with sources (#5370) - Show additions and removals in
uv lock
updates (#5410) - Skip 'Nothing to uninstall' message when removing dangling environments (#5382)
- Support
requirements.txt
files inuv tool install
anduv tool run
(#5362) - Use env variables in Github Actions docs (#5411)
- Use logo in documentation (#5421)
- Warn on
requirements.txt
-provided arguments inuv run
et al (#5364)
- Output stable ordering to
requirements.txt
in universal mode (#5334) - Allow symlinks with
--find-links
(#5323) - Add support for variations of
pythonw.exe
(#5259)
- Stylize
Requires-Python
consistently in CLI output (#5304) - Add
--show-version-specifiers
totree
(#5240)
- Avoid always rebuilding dynamic metadata (#5206)
- Avoid URL parsing when deserializing wheels (#5235)
- Avoid cache prune failure due to removed interpreter (#5286)
- Avoid including empty extras in resolution (#5306)
- If multiple indices contain the same version, use the first index (#5288)
- Include URLs on graph edges (#5312)
- Match wheel tags against
Requires-Python
major-minor (#5289) - Remove Simple API cache files for alternative indexes
in
cache clean
(#5353) - Remove extraneous
are
from wheel tag error messages (#5303) - Allow conflicting pre-release strategies when forking (#5150)
- Use tag error rather than requires-python error for ABI filtering (#5296)
- Add
requires-python
touv init
(#5322) - Add
uv add --no-editable
(#5246) - Add constraint dependencies to pyproject.toml (#5248)
- Add support for requirements files in
uv run
(#4973) - Avoid redundant members update in
uv init
(#5321) - Create member
pyproject.toml
prior to workspace discovery (#5317) - Fix
uv init .
(#5330) - Fix
uv init
creation of a sub-package by path (#5247) - Fix colors in
uv tool run
suggestion (#5267) - Improve consistency of
tool
CLI (#5326) - Make tool install robust to malformed receipts (#5305)
- Reduce spacing between nav items (#5310)
- Respect exclusions in
uv init
(#5318) - Store resolution options in lockfile (#5264)
- Use backticks in project init message (#5302)
- Ignores workspace when
--isolated
flag is used inuv init
(#5290) - Normalize directory names in
uv init
(#5292) - Avoid project discovery in
uv python pin
if--isolated
is provided (#5354) - Show symbolic links in
uv python list
(#5343) - Discover workspace from target path in
uv init
(#5250) - Do not create nested workspace in
uv init
(#5293)
- Add GraalPy support (#5141)
- Add a
--verify-hashes
hash-checking mode (#4007) - Discover all
python3.x
executables in thePATH
(#5148) - Support
--link-mode=symlink
(#5208) - Warn about unconstrained direct deps in lowest resolution (#5142)
- Log origin of version selection (#5186)
- Key hash policy on version, rather than package (#5169)
- Make missing project table a tracing warning (#5194)
- Remove trailing period from user-facing messages (#5218)
- Make entrypoint writes atomic to avoid overwriting symlinks (#5165)
- Use
which
-retrieved path directly when spawning pager (#5198) - Don't apply irrelevant constraints when validating site-packages (#5231)
- Respect local versions for all user requirements (#5232)
- Add
--frozen
touv add
,uv remove
, anduv tree
(#5214) - Add
--locked
and--frozen
touv run
CLI (#5196) - Add
uv tool dir --bin
to show executable directory (#5160) - Add
uv tool list --show-paths
to show install paths (#5164) - Add color to
python pin
CLI (#5215) - Added a way to inspect installation scripts on Powershell( Windows) (#5157)
- Avoid TOCTOU errors in
.python-version
reads (#5223) - Only show the Python installed on the system if
--python-preference only-system
is specified (#5219) - Check
python pin
compatibility withRequires-Python
(#4989) - Enforce hashes in lockfile install (#5170)
- Fix reference to
uv run
inuv tree
CLI (#5216) - Handle universal vs. fork markers with
ResolverMarkers
(#5099) - Implement
uv init
(#4791) - Make Python install robust to individual failures (#5199)
- Make registry hashes optional in the lockfile (#5166)
- Merge extras in lockfile (#5181)
- Move integration guide docs and edit Azure integration guide (#5117)
- Process completed Python installs and uninstalls as a stream (#5203)
- Skip invalid tools in
uv tool list
(#5156) - Touch-ups to tools guide (#5202)
- Use +- install output for Python versions (#5201)
- Use display representation for download error (#5173)
- Use specialized error message for invalid Python install / uninstall requests (#5171)
- Use the strongest hash in the lockfile (#5167)
- Write project guide (#5195)
- Write tools concept document (#5207)
- Fix reference to
projects.md
(#5154) - Fixes to the settings documentation (#5177)
- Set exact version specifiers when resolving from lockfile (#5193)
- Add
--no-progress
global option to hide all progress animations (#5098)
- Cache downloaded wheel when range requests aren't supported (#5089)
- Download wheel to disk when streaming unzip failed with HTTP streaming error (#5094)
- Filter out invalid wheels based on
requires-python
(#5084) - Filter out none ABI wheels with mismatched Python versions (#5087)
- Lock Git cache on resolve (#5051)
- Change order of
pip compile
command checks to handle exact argument first (#5111)
- Document that
--universal
implies--no-strip-markers
(#5121)
- Indicate that
uv lock --upgrade
has updated the lock file (#5110) - Sort managed Python installations by version (#5140)
- Support workspace to workspace path dependencies (#4833)
- Allow conflicting locals when forking (#5104)
- Rework
pyproject.toml
reformatting to respect original indentation (#5075)
- Include PyPy-specific executables when creating virtual environments
with
uv venv
(#5047) - Add a custom error message for
--no-build-isolation
torch
dependencies (#5041) - Improve missing
wheel
error message with--no-build-isolation
(#4964)
- Add
--no-pager
option inhelp
command (#5007) - Unhide
--isolated
global argument (#5005) - Warn when unused
pyproject.toml
configuration is detected (#5025)
- Fall back to streaming wheel when
Content-Length
header is absent (#5000) - Fix substring marker expression disjointness checks (#4998)
- Lock directories to synchronize wheel-install copies (#4978)
- Normalize out complementary == or != markers (#5050)
- Retry on permission errors when persisting extracted source distributions to the cache (#5076)
- Set absolute URLs prior to uploading to PyPI (#5038)
- Exclude
--upgrade-package
from thepip compile
header (#5032) - Exclude
--upgrade-package
when option and value are passed as a single argument (#5033) - Add split to cover marker universe when existing splits are incomplete (#5074)
- Use correct
pyproject.toml
path in warnings (#5069)
- Fix
CONTRIBUTING.md
instructions to install multiple Python versions (#5015) - Use versioned badges when uploading to PyPI (#5039)
- Add documentation for running scripts (#4968)
- Add guide for tools (#4982)
- Allow URL dependencies in tool run
--from
(#5002) - Add guide for authenticating to Azure Artifacts (#4857)
- Improve rc file detection based on rustup (#5026)
- Rename
python install --force
parameter to--reinstall
(#4999) - Use lockfile to prefill resolver index (#4495)
uv tool install
hint the correct when the executable is available (#5019)uv tool run
error messages referencesuvx
when appropriate (#5014)uvx
warns when requested executable is not provided by the package #5071)- Exit with zero when
uv tool install
request is already satisfied (#4986) - Respect the libc of the execution environment
with
uv python list
(#5036) - Update standalone Pythons to include 3.12.4 (#5042)
uv tool run
suggest valid commands when command is not found (#4997)- Add Windows path updates for
uv tool
(#5029) - Add a command to append uv's binary directory to PATH (#4975)
- Add support for 'any' Python requests (#4948)
- Allow constraints to be provided in
--upgrade-package
(#4952) - Add
manylinux_2_31
to supported--python-platform
(#4965) - Improve marker simplification (#4639)
- Display short help menu when
--help
is used (#4772) - Allow
uv help
global options duringuv help
(#4906) - Use paging for
uv help
display when available (#4909)
- Switch to single threaded async runtime (#4934)
- Avoid AND-ing multi-term specifiers in marker normalization (#4911)
- Avoid inferring package name for GitHub Archives (#4928)
- Retry on connection reset network errors (#4960)
- Apply extra to overrides and constraints (#4829)
- Allow
uv
crate to be used as a library (#4642)
- Add Python installation guide (#4942)
- Add
uv python pin
(#4950) - Add command-separation for Python discovery display (#4916)
- Avoid debug error for
uv run
with unknown Python version (#4913) - Enable
--all
to uninstall all managed Pythons (#4932) - Enable
--all
to uninstall all managed tools (#4937) - Filter out markers based on Python requirement (#4912)
- Implement
uv tree
(#4708) - Improve 'any' search message during
uv python install
(#4940) - Lock for the duration of tool commands (#4720)
- Perform lock in
uv sync
by default (#4839) - Reinstall and recreate environments when interpreter is removed (#4935)
- Respect
--isolated
inuv python install
(#4938) - Respect resolver settings in
uv remove
(#4930) - Update "Python versions" documentation (#4943)
- Warn if tool binary directory is not on path (#4951)
- Avoid reparsing wheel URLs (#4947)
- Avoid serializing if lockfile does not change (#4945)
- Update Windows trampoline binaries (#4864)
- Show user-facing warning when falling back to copy installs (#4880)
- Initialize all
--prefix
subdirectories (#4895) - Respect
requires-python
when prefetching (#4900) - Partially revert
Requires-Python
version narrowing (#4902)
- Avoid creating cache directories in tool directory (#4868)
- Add progress bar when downloading python (#4840)
- Add some decoration to tool CLI (#4865)
- Add some text decoration to toolchain CLI (#4882)
- Add user-facing output to indicate PEP 723 script (#4881)
- Ensure Pythons are aligned in
uv python list
(#4884) - Fix always-plural message in uv python install (#4866)
- Skip installing
--with
requirements if present in base environment (#4879) - Sort dependencies before wheels and source distributions (#4897)
- Improve logging during resolver forking (#4894)
- Add
--exclude-newer
to installer arguments (#4785) - Bold durations in CLI messages (#4818)
- Drop crate description from the
uv
help menu (#4773) - Update "about" in help menu (#4782)
- Add
UV_OVERRIDE
environment variable for--override
(#4836)
- Always use release-only comparisons for
requires-python
(#4794) - Avoid hangs before exiting CLI (#4793)
- Preserve verbatim URLs for
--find-links
(#4838)
- Always use base interpreter for cached environments (#4805)
- Cache tool environments in
uv tool run
(#4784) - Check hash of downloaded python toolchain (#4806)
- Remove incompatible wheels from
uv.lock
(#4799) uv cache prune
removes all cached environments (#4845)- Add dedicated help menu for
uvx
(#4770) - Change "toolchain" to "python" (#4735)
- Create empty environment for
uv run --isolated
(#4849) - Deduplicate when install or uninstall python (#4841)
- Require at least one target for toolchain uninstalls (#4820)
- Resolve requirements prior to nuking tool environments (#4788)
- Tweak installation language in toolchain install (#4811)
- Use already-installed tools in
uv tool run
(#4750) - Use cached environments in PEP 723 execution (#4789)
- Use optimized versions of managed Python on Linux (#4775)
- Fill Python requests with platform information during automatic fetches (#4810)
- Remove installed python for force installation (#4807)
- Add tool version to list command (#4674)
- Add entrypoints to tool list (#4661)
- Fix issue where standalone installer failed to due missing
uvx.exe
binary on Windows (#4756)
- Differentiate
freeze
andlist
help text (#4751)
- Replace tool environments on updated Python request (#4746)
- Fix issue where the standalone installer failed due to a missing
uvx
binary (#4743)
- Indicate when we retried requests during network errors (#4725)
- Add
--disable-pip-version-check
to compatibility arguments (#4672) - Allow
uv pip sync
to clear an environment with opt-in (#4517) - Add
--invert
touv pip tree
(#4621) - Omit
(*)
inuv pip tree
for empty packages (#4673) - Add
--package
touv pip tree
(#4655)
- Fix bug where git cache did not validate commits correctly (#4698)
- Narrow
requires-python
requirement in resolver forks (#4707) - Fix bug when pruning the last package in
uv pip tree
(#4652)
- Remove dangling environments in
uv tool uninstall
(#4740) - Respect upgrades in
uv tool install
(#4736) - Add PEP 723 support to
uv run
(#4656) - Add
tool dir
andtoolchain dir
commands (#4695) - Omit
pythonX.Y
segment in stdlib path for managed toolchains on Windows (#4727) - Add
uv toolchain uninstall
(#4646) - Add
uvx
alias foruv tool run
(#4632) - Allow configuring the toolchain fetch strategy (#4601)
- Drop
prefer
prefix fromtoolchain-preference
values (#4602) - Enable projects to opt-out of workspace management (#4565)
- Fetch managed toolchains if necessary in
uv tool install
anduv tool run
(#4717) - Fix tool dist-info directory normalization (#4686)
- Lock the toolchains directory during toolchain operations (#4733)
- Log when we start solving a fork (#4684)
- Reinstall entrypoints with
--force
(#4697) - Respect data scripts in
uv tool install
(#4693) - Set fork solution as preference when resolving (#4662)
- Show dedicated message for tools with no entrypoints (#4694)
- Support unnamed requirements in
uv tool install
(#4716)
- Make
--universal
and--python-platform
mutually exclusive (#4598) - Add
--depth
and--prune
support topip tree
(#4440)
- Handle cycles when propagating markers (#4595)
- Ignore
py
not found errors during interpreter discovery (#4620) - Merge markers when applying constraints (#4648)
- Retry on spurious failures when caching built wheels (#4605)
- Sort indexes during graph edge removal (#4649)
- Treat Python version as a lower bound in
--universal
(#4597) - Fix the incorrect handling of markers in
pip tree
(#4611) - Improve toolchain and environment missing error messages (#4596)
- Explicitly mention use of seed packages during
uv venv --seed
(#4588)
- Add
uv tool list
(#4630) - Add
uv tool uninstall
(#4641) - Add support for specifying
name@version
inuv tool run
(#4572) - Allow
uv add
to specify optional dependency groups (#4607) - Allow the package spec to be passed positionally
in
uv tool install
(#4564) - Avoid infinite loop for cyclic installs (#4633)
- Indent wheels like dependencies in the lockfile (#4582)
- Sync all packages in a virtual workspace (#4636)
- Use inline table for dependencies in lockfile (#4581)
- Make
source
field in lock file more structured (#4627)
- Avoid enforcing extra-only constraints (#4570)
- Add
--extra
touv add
and enable fine-grained updates (#4566)
- Add a universal resolution mode to
uv pip compile
with--universal
(#4505) - Add support for
--no-strip-markers
inuv pip compile
output (#4503) - Add
--no-dedupe
support touv pip tree
(#4449)
- Enable more precise environment locking with
--prefix
(#4506) - Allow local index references in
requirements.txt
files (#4525) - Allow non-
file://
paths to serve as--index-url
values (#4524) - Make
.egg-info
filename parsing spec compliant (#4533) - Gracefully handle non-existent packages in local indexes (#4545)
- Read content length from response rather than request (#4488)
- Read persistent configuration from non-workspace
pyproject.toml
(#4526) - Avoid panic for invalid, non-base index URLs (#4527)
- Skip submodule update for fresh clones (#4482)
- Use shared client in Git fetch implementation (#4487)
- Add
--package
argument touv add
anduv remove
(#4556) - Add
uv tool install
(#4492) - Fallback to interpreter discovery in
uv run
(#4549) - Make
uv.sources
without--preview
non-fatal (#4558) - Remove non-existent extras from lockfile (#4479)
- Support conflicting URL in separate forks (#4435)
- Automatically detect workspace packages in
uv add
(#4557) - Omit
distribution.sdist
from lockfile when it is redundant (#4528) - Remove
source
andversion
from lock file when unambiguous (#4513) - Allow
uv lock
to read overrides fromtool.uv
(#4108) (#4369)
- Add
--emit-build-options
flag touv pip compile
interface (#4463) - Add
pythonw
support for gui scripts on Windows (#4409) - Add
uv pip tree
(#3859)
- Fix ordering of prefer-system toolchain preference (#4441)
- Respect index strategy in source distribution builds (#4468)
- Add documentation for using uv in a Docker image (#4433)
- Support toolchain requests with platform-tag style Python implementations and version (#4407)
- Use "Prepared" instead of "Downloaded" in logs (#4394)
- Treat mismatched directory and file urls as unsatisfied requirements (#4393)
- Expose
toolchain-preference
as a CLI and configuration file option (#4424) - Improve handling of command arguments in
uv run
anduv tool run
(#4404) - Add
tool.uv.sources
support foruv add
(#4406) - Use correct lock path for workspace dependencies (#4421)
- Filter out sibling dependencies in resolver forks (#4415)
- Add resolver tracing logs for when we filter requirements (#4381)
- Add
--workspace
option touv add
(#4362) - Ignore query errors during
uv toolchain list
(#4382) - Respect
.python-version
files and fetch manged toolchains in uv project commands (#4361) - Respect
.python-version
inuv venv --preview
(#4360)
- Allow specific
--only-binary
and--no-binary
packages to override:all:
(#4067) - Flatten ORs and ANDs in marker construction (#4260)
- Skip invalid interpreters when searching for requested interpreter executable name (#4308)
- Display keyring stderr during queries (#4343)
- Allow discovery of uv binary relative to package root (#4336)
- Use relative path for
lib64
symlink (#4268)
- Add uv version to debug output (#4259)
- Allow
--no-binary
withuv pip compile
(#4301) - Hide
--no-system
from the CLI (#4292) - Make
--reinstall
,--upgrade
, and--refresh
shared arguments (#4319)
- Add
UV_EXCLUDE_NEWER
environment variable (#4287)
- Allow normalization to completely eliminate markers (#4271)
- Avoid treating direct path archives as always dynamic (#4283)
- De-duplicate markers during normalization (#4263)
- Fix incorrect parsing of requested Python version as empty version specifiers (#4289)
- Suggest correct command to create a virtual environment when encountering externally managed interpreters (#4314)
- Use consistent order for extra groups in lockfile (#4275)
- Add
pip-compile
defaults toPIP_COMPATIBILITY.md
(#4302) - Expand on
pip-compile
default differences (#4306) - Tweak copy on some command-line arguments (#4293)
- Move the preview changelog so the GitHub Release shows stable changes (#4290)
- Add
--force
option touv toolchain install
(#4313) - Add
--no-build
,--no-build-package
, and binary variants (#4322) - Add
EXTERNALLY-MANAGED
markers to managed toolchains (#4312) - Add
uv toolchain find
(#4206) - Add persistent configuration for non-
pip
APIs (#4294) - Add support for adding/removing development dependencies (#4327)
- Add support for listing system toolchains (#4172)
- Add support for toolchain requests by key (#4332)
- Allow multiple toolchains to be requested
in
uv toolchain install
(#4334) - Fix relative and absolute path handling in lockfiles (#4266)
- Load configuration options from workspace root (#4295)
- Omit project name from workspace errors (#4299)
- Read Python version files during toolchain installs (#4335)
- Remove extraneous installations in
uv sync
by default (#4366) - Respect
requires-python
inuv lock
(#4282) - Respect workspace-wide
requires-python
in interpreter selection (#4298) - Support unnamed requirements in
uv add
(#4326) - Use portable slash paths in lockfile (#4324)
- Use registry URL for fetching source distributions from lockfile (#4280)
uv sync --no-clean
(#4367)- Filter dependencies by tracking markers on resolver forks (#4339)
- Use
Requires-Python
to filter dependencies during universal resolution (#4273)
- Add support for local directories with
--index-url
(#4226) - Add mTLS support (#4171)
- Allow version specifiers to be used in Python version requests (#4214)
- Always install as editable when duplicate dependencies are requested (#4208)
- Avoid crash with
XDG_CONFIG_HOME=/dev/null
(#4200) - Improve handling of missing interpreters during discovery (#4218)
- Make missing
METADATA
file a recoverable error (#4247) - Represent build tag as
u64
(#4253)
- Document Windows 10 requirement (#4210)
- Re-add
aarch64-unknown-linux-gnu
binary to release assets (#4254)
- Add changelog for preview changes (#4251)
- Allow direct URLs for dev dependencies (#4233)
- Create temporary environments in dedicated cache bucket (#4223)
- Improve output when an older toolchain version is already installed (#4248)
- Initial implementation of
uv add
anduv remove
(#4193) - Refactor project interpreter request for
requires-python
specifiers (#4216) - Replace
toolchain fetch
withtoolchain install
(#4228) - Support locking relative paths (#4205)
- Warn when 'requires-python' does not include a lower bound (#4234)
- Allow transitive URLs via recursive extras (#4155)
- Avoid pre-fetching for unbounded minimum versions (#4149)
- Avoid showing dev hints for Python requirements (#4111)
- Include non-standard ports in keyring host queries (#4061)
- Omit URL dependencies from pre-release hints (#4140)
- Improve static metadata extraction for Poetry projects (#4182)
- Document bytecode compilation in pip compatibility guide (#4195)
- Fix PEP 508 link in preview doc
specifying_dependencies
(#4158) - Clarify role of
--system
flag (#4031)
- Add
uv toolchain install
(#4164) - Add
uv toolchain list
(#4163) - Add extra and dev dependency validation to lockfile (#4112)
- Add markers to edges rather than distributions (#4166)
- Cap
Requires-Python
comparisons at the patch version (#4150) - Do not create a virtual environment when locking (#4147)
- Don't panic with invalid wheel source (#4191)
- Fetch managed toolchains in
uv run
(#4143) - Fix PEP 508 link in preview doc
specifying_dependencies
(#4158) - Ignore tags in universal resolution (#4174)
- Implement
Toolchain::find_or_fetch
and use inuv venv --preview
(#4138) - Lock all packages in workspace (#4016)
- Recreate project environment if
--python
orrequires-python
doesn't match (#3945) - Respect
--find-links
inlock
andsync
(#4183) - Set
--dev
to default foruv run
anduv sync
(#4118) - Track
Markers
via a PubGrub package variant (#4123) - Use union of
requires-python
in workspace (#4041) - make universal resolver fork only when markers are disjoint (#4135)
- Respect existing
.egg-link
files in site packages (#4082)
- Avoid extra-only filtering for constraints (#4095)
- Add install link for specific version to README (#4105)
- Add support for development dependencies (#4036)
- Avoid enforcing distribution ID uniqueness for extras (#4104)
- Ignore upper-bounds on
Requires-Python
(#4086)
- Fix
uv venv
handling whenVIRTUAL_ENV
refers to an non-existent environment (#4073)
- Default to current Python minor if
Requires-Python
is absent (#4070) - Enforce
Requires-Python
when syncing (#4068) - Track supported Python range in lockfile (#4065)
- Support
NO_COLOR
andFORCE_COLOR
environment variables (#3979)
- Avoid building packages with dynamic versions (#4058)
- Avoid work-stealing in bytecode compilation (#4004)
- Avoid dropping
pip sync
requirements with markers (#4051) - Bias towards local directories for bare editable requirements (#3995)
- Preserve fragments when applying verbatim redirects (#4038)
- Avoid 'are incompatible' for singular bounded versions (#4003)
- Fix a bug where no warning is output when parsing of workspace settings fails. (#4014)
- Normalize extras in lockfile (#3958)
- Respect
Requires-Python
in universal resolution (#3998)
- Support PEP 508 requirements for editables (#3946)
- Discard fragments when parsing unnamed URLs (#3940)
- Port all Git functionality to use Git CLI (#3833)
- Use statically linked C runtime on Windows (#3966)
- Disable concurrent progress bars in Jupyter Notebooks (#3890)
- Initialize multi-progress state before individual bars (#3901)
- Add missing
i686
alias forx86
(#3899) - Add missing
ppc64le
alias forpowerpc64le
(#3963) - Fix reference to
--python-version
patch behavior (#3989) - Avoid race condition in
OnceMap
(#3987)
- Add
uv run --package
(#3864) - Add index URL parameters to Project CLI (#3984)
- Avoid re-adding solutions to forked state (#3967)
- Draft for user docs for workspaces (#3866)
- Include all extras when generating lockfile (#3912)
- Remove unstable uv lock from pip interface (#3970)
- Respect resolved Git SHAs in
uv lock
(#3956) - Use lockfile in
uv run
(#3894) - Use lockfile versions as resolution preferences (#3921)
- Use universal resolution in
uv lock
(#3969)
- Add support for x86 Windows (#3873)
- Add support for
prepare_metadata_for_build_editable
hook (#3870) - Add concurrent progress bars for downloads (#3252)
- Update bundled Python URLs and add
"arm"
architecture variant (#3855)
- Add context to failed
uv tool run
(#3882) - Add persistent storage of installed toolchains (#3797)
- Gate discovery of managed toolchains with preview (#3835)
- Initial workspace support (#3705)
- Move editable discovery behind
--preview
for now (#3884)
- Allow
--system
and--python
to be passed together (#3830)
- Ignore
libc
on other platforms (#3825)
- Incorporate build tag into wheel prioritization (#3781)
- Avoid displaying log for satisfied editables if none are requested (#3795)
- Improve logging during interpreter discovery (#3790)
- Improve logging for environment locking (#3792)
- Improve logging of interpreter implementation (#3791)
- Remove extra details from interpreter query traces (#3803)
- Use colon more consistently in error messages (#3788)
- Add JSON alias for
unsafe-any-match
(#3820)
- Remove redundant dynamically linked Linux binary again (#3762)" (#3778)
- Remove
aarch64-unknown-linux-gnu
from list of expected binaries (#3761)
- Always include package names for Git and HTTPS dependencies (#3821)
- Fix interpreter cache collisions for relative virtualenv paths (#3823)
- Ignore unnamed requirements in preferences (#3826)
- Search for
python3
in unix virtual environments (#3798) - Use a cross-platform representation for relative paths
in
pip compile
(#3804)
- Allow specification of additional requirements in
uv tool run
(#3678)
- Report yanks for cached and resolved packages (#3772)
- Improve error message when default Python is not found (#3770)
- Do not treat interpereters discovered via
CONDA_PREFIX
as system interpreters (#3771)
- Re-added the dynamically-linked Linux binary (#3762)
- Allow users to specify a custom source package to
uv tool run
(#3677)
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:
- A Python version without an implementation name, e.g.,
3.10
- A path to a directory containing a Python installation, e.g.,
./foo/.venv
- A path to a Python executable, e.g.,
~/bin/python
- A Python implementation without a version, e.g.,
pypy
orcpython
- A Python implementation name and version, e.g.,
pypy3.8
or[email protected]
- The name of a Python executable (for lookup in the
PATH
), e.g.,foopython3
Previously, 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.
- Rewrite Python interpreter discovery (#3266)
- Add support for requesting
pypy
interpreters by implementation name (#3706) - Discover and prefer the parent interpreter when invoked
with
python -m uv
#3736 - Add PEP 714 support for HTML API client (#3697)
- Add PEP 714 support for JSON API client (#3698)
- Write relative paths with unnamed requirement syntax (#3682)
- Allow relative Python executable paths in Windows trampoline (#3717)
- Add support for clang and msvc in missing header error (#3753)
- Allow
--constraint
files inpip sync
(#3741) - Allow
--config-file
to be passed before or after command name (#3730) - Make
--offline
a global argument (#3729)
- Improve performance in complex resolutions by reducing cost of PubGrub package clones (#3688)
- Evaluate arbitrary markers to
false
(#3681) - Improve
DirWithoutEntrypoint
error message (#3690) - Improve display of root package in range errors (#3711)
- Propagate URL errors in verbatim parsing (#3720)
- Report yanked packages in
--dry-run
(#3740)
- Drop native
manylinux
wheel in favor of dual-tagged wheel (#3685) - The
python-patch
test feature is no longer on by default and must be manually enabled to test patch version behavior (#3746)
- Add
--prefix
link to compatibility guide (#3734) - Add
--only-binary
to compatibility guide (#3735) - Add instructions for building and updating
uv-trampolines
(#3731) - Add notes for testing on Windows (#3658)
- Add initial implementation of
uv tool run
(#3657) - Add offline support to
uv tool run
anduv run
(#3676) - Better error message for
uv run
failures (#3691) - Discover workspaces without using them in resolution (#3585)
- Support editables in
uv sync
(#3692) - Track editable requirements in lockfile (#3725)
- Parse and store extras on editable requirements (#3629)
- Allow local versions in wheel filenames (#3596)
- Create lib64 symlink for 64-bit, non-macOS, POSIX environments (#3584)
- Add
UV_CONCURRENT_INSTALLS
variable in favor ofRAYON_NUM_THREADS
(#3646) - Add serialization and deserialization for
--find-links
(#3619) - Apply combination logic to merge CLI and persistent configuration (#3618)
- Parallelize resolver (#3627)
- Reduce sensitivity of unknown option error to discard Python 2 interpreters (#3580)
- Respect installed packages in
uv run
(#3603) - Separate cache construction from initialization (#3607)
- Add missing
"directory"
branch in source match (#3608) - Fix source annotation in pip compile
annotation-style=line
output (#3637) - Run cargo update to pull in h2 (#3638)
- URL-decode hashes in HTML fragments (#3655)
- Always print JSON output with
--format
json (#3671)
- Add
UV_CONFIG_FILE
environment variable to documentation (#3653) - Explicitly mention
--user
in compatibility guide (#3666)
- Add direct URL conversion to lockfile (#3633)
- Add hashes and versions to all distributions (#3589)
- Add local path conversions from lockfile (#3609)
- Add missing
"directory"
branch in source match (#3608) - Add registry file size to lockfile (#3652)
- Add registry source distribution support to lockfile (#3649)
- Refactor editables for supporting them in bluejay commands (#3639)
- Rename
sourcedist
tosdist
in lockfile (#3590) - Respect installed packages in
uv run
(#3603) - Support lossless serialization for Git dependencies in lockfile (#3630)
Reverts "Use manylinux: auto to enable musllinux_1_2
aarch64
builds (#3444)"
The manylinux change appeared to introduce SSL errors when building aarch64 Docker images, e.g.,
invalid peer certificate: BadSignature
The v0.1.42 behavior for aarch64 manylinux builds is restored in this release.
See #3576
- Annotate sources of requirements in
pip compile
output (#3269) - Track origin for
setup.py
files and friends (#3481)
- Consolidate concurrency limits and expose as environment variables (#3493)
- Use manylinux: auto to enable
musllinux_1_2
aarch64 builds (#3444) - Enable musllinux_1_1 wheels (#3523)
- Avoid keyword arguments for PEP 517 build hooks (#3517)
- Apply advisory locks when building source distributions (#3525)
- Avoid attempting to build editables when fetching metadata (#3563)
- Clone individual files on windows ReFS (#3551)
- Filter irrelevant requirements from source annotations (#3479)
- Make cache clearing robust to directories without read permissions (#3524)
- Respect constraints on editable dependencies (#3554)
- Skip Python 2 versions when locating Python (#3476)
- Make
--isolated
a global argument (#3558) - Allow unknown
pyproject.toml
fields (#3511) - Change error value detection for glibc (#3487)
- Create virtualenv if it doesn't exist in project API (#3499)
- Discover
uv run
projects hierarchically (#3494) - Read and write
uv.lock
based on project root (#3497) - Read package name from
pyproject.toml
inuv run
(#3496) - Rebrand workspace API as project API (#3489)
This release includes stabilized support for persistent configuration in uv.
uv will now read project configuration from a pyproject.toml
or uv.toml
file in the current
directory or any parent directory, along with user configuration at ~/.config/uv/uv.toml
(or $XDG_CONFIG_HOME/uv/uv.toml
) on macOS and Linux, and %APPDATA%\uv\uv.toml
on Windows.
See: Persistent Configuration for more.
- Respect
MACOSX_DEPLOYMENT_TARGET
in--python-platform
(#3470)
- Add documentation for persistent configuration (#3467)
- Add JSON Schema export to SchemaStore (#3461)
- Merge user and workspace settings (#3462)
- Use Metadata10 to parse PKG-INFO of legacy editable (#3450)
- Apply normcase to line from easy-install.pth (#3451)
- Upgrade
async_http_range_reader
to v0.8.0 to respect redirects in range requests (#3460) - Use last non-EOL version for
--python-platform
macOS (#3469)
- Use environment layering for
uv run --with
(#3447) - Warn when missing minimal bounds when using
tool.uv.sources
(#3452)
- Remove unconstrained version error from requirements (#3443)
- Add
--allow-existing
to overwrite existing virtualenv (#2548) - Respect and enable uninstalls of legacy editables (
.egg-link
) (#3415) - Respect and enable uninstalls of existing
.egg-info
packages (#3380)
- Accept
--no-upgrade
,--no-refresh
, etc. on the CLI (#3328)
- Expose
UV_NO_BUILD_ISOLATION
as environment variable (#3318) - Expose
UV_PYTHON
as an environment variable (#3284) - Expose
UV_LINK_MODE
as environment variable (#3315) - Add
UV_CUSTOM_COMPILE_COMMAND
to environment variable docs (#3382)
- Ignore 401 HTTP responses with multiple indexes (#3292)
- Avoid panic for file URLs (#3306)
- Quote version parse errors consistently (#3325)
- Detect current environment when
uv
is invoked from within a virtualenv (#3379) - Unset target when creating virtual environments (#3362)
- Update activation scripts from virtualenv (#3376)
- Use canonical URLs in satisfaction check (#3373)
- Add basic
tool.uv.sources
support (#3263) - Improve non-git error message (#3403)
- Preserve given for
tool.uv.sources
paths (#3412) - Restore verbatim in error message (#3402)
- Use preview mode for tool.uv.sources (#3277)
- Use top-level
--isolated
foruv run
(#3431) - add basic "install from lock file" operation (#3340)
- uv-resolver: add initial version of universal lock file format (#3314)
- Add
--target
support tosync
andinstall
(#3257) - Implement
--index-strategy unsafe-best-match
(#3138)
- Fix
platform_machine
tag for--python-platform
on macOS ARM (#3267)
- Add alternate manylinux targets to
--python-platform
(#3229) - An enum and backticks for lookahead error (#3216)
- Upgrade macOS target to
12.0
(#3228) - Add keyring logs for URL and host fetches (#3212)
- Combine unresolvable error dependency clauses with the same root (#3225)
- Gave a better name to the
--color
placeholder (#3226) - Warn when an unsupported Python version is encountered (#3250)
- Use directory instead of file when searching for
uv.toml
file (#3203)
- Only perform fetches of credentials for a realm and username combination once (#3237)
- Unroll self-dependencies via extras (#3230)
- Use read-write locks instead of mutexes in authentication handling (#3210)
- Avoid removing quites from requirements markers (#3214)
- Avoid adding extras when expanding constraints (#3232)
- Reinstall package when editable label is removed (#3219)
- Add
RAYON_NUM_THREADS
to environment variable docs (#3223) - Document support for HTTP proxy variables (#3247)
- Fix documentation for
--python-platfor
m (#3220)
- Change default HTTP read timeout to 30s (#3182)
- Add
--python-platform
tosync
andinstall
commands (#3154) - Add ticks around error messages more consistently (#3004)
- Fix Docker publish permissions in release pipeline (#3195)
- Improve tracing for keyring provider (#3207)
- Update keyring provider to be async (#3089)
- Fix fetch of credentials when cache is seeded with username (#3206)
- Improve
--python-platform
documentation (#3202)
- Add support for embedded Python on Windows (#3161)
- Add Docker image publishing to release pipeline (#3155)
- Add
UV_CONSTRAINT
environment variable to provide value for--constraint
(#3162)
- Avoid waiting for metadata for
--no-deps
editables (#3188) - Fix
venvlauncher.exe
reference in venv creation (#3160) - Fix authentication for URLs with a shared realm (#3130)
- Restrict observed requirements to direct when
--no-deps
is specified (#3191)
- Add a versioning policy to the README (#3151)
- Add a
--python-platform
argument to enable resolving against a target platform (#3111) - Enforce HTTP timeouts on a per-read (rather than per-request) basis (#3144)
- Avoid preferring constrained over unconstrained packages (#3148)
- Allow
UV_SYSTEM_PYTHON=1
in addition toUV_SYSTEM_PYTHON=true
(#3136)
- Allow
--python
and--system
onpip compile
(#3115) - Remove
Option<bool>
for--no-cache
(#3129) - Rename
--compile
to--compile-bytecode
(#3102) - Accept
0
,1
, and similar values for Boolean environment variables (#3113)
- Avoid fetching unnecessary extra versions during resolution (#3100)
- Avoid deprioritizing recursive editables (#3133)
- Avoid treating localhost URLs as local file paths (#3132)
- Hide password in the index printed via
--emit-index-annotation
(#3112) - Restore seeding of authentication cache from index URLs (#3124)
Using the keyring requires a username to be provided on index URLs now. Previously, the username oauth2accesstoken
was assumed. This will affect Google Artifact Registry users using --keyring-provider subprocess
and an index URL
without a username. The suggested fix is to add the required username to index URLs,
e.g., https://oauth2accesstoken@<url>
.
See #2976 for details.
- Allow passing a virtual environment path to
uv pip --python
(#3064) - Add compatibility argument for
pip list --outdated
(#3055)
- Incorporate heuristics to improve package prioritization (#3087)
- Fix HTTP authentication when the password includes percent encoded characters (e.g. with Google Artifact Registry) (#2822)
- Use usernames from URLs when looking for credentials in netrc files and the keyring #2563)
- Skip
HEAD
requests for indexes that return 403 (e.g. PyPICloud) (#3070) - Use kebab-case consistently (#3080)
- Show package name in no version for direct dependency error (#3056)
- Avoid erroring when encountering
.tar.bz2
source distributions (#3069)
- Add a
--require-hashes
command-line setting (#2824) - Add hash-checking support to
install
andsync
(#2945) - Add support for URL requirements in
--generate-hashes
(#2952) - Allow unnamed requirements for overrides (#2999)
- Enforce and backtrack on invalid versions in source metadata (#2954)
- Fall back to distributions without hashes in resolver (#2949)
- Implement
--emit-index-annotation
to annotate source index for each package (#2926) - Log hard-link failures (#3015)
- Support free-threaded Python (#2805)
- Support unnamed requirements in
--require-hashes
(#2993) - Respect link mode for builds, in
uv pip compile
and foruv venv
seed packages (#3016) - Force color for build error messages (#3032)
- Surface invalid metadata as hints in error reports (#2850)
- Add
UV_BREAK_SYSTEM_PACKAGES
environment variable (#2995)
- Remove some restrictions in argument groups (#3001)
- Add
--find-links
source distributions to the registry cache (#2986) - Allow comments after all
requirements.txt
entries (#3018) - Avoid cache invalidation on credentials renewal (#3010)
- Avoid calling
normalize_path
with relative paths that extend beyond the current directory (#3013) - Deduplicate symbolic links between
purelib
andplatlib
(#3002) - Remove unused
--output-file
frompip install
(#2975) - Strip query string when parsing filename from HTML index (#2961)
- Update hashes without
--upgrade
if not present (#2966)
- Ignore direct URL distributions in prefetcher (#2943)
- Show resolution diagnostics after
pip install
(#2829)
- Speed up cold-cache
urllib3
-boto3
-botocore
performance with batched prefetching (#2452)
- Backtrack on distributions with invalid metadata (#2834)
- Include LICENSE files in source distribution (#2855)
- Respect
--no-build
and--no-binary
in--find-links
(#2826) - Respect cached local
--find-links
in install plan (#2907) - Avoid panic with multiple confirmation handlers (#2903)
- Use scheme parsing to determine absolute vs. relative URLs (#2904)
- Remove additional 'because' in resolution failure messages (#2849)
- Use
miette
when printingpip sync
resolution failures (#2848)
- Allow conflicting Git URLs that refer to the same commit SHA (#2769)
- Allow package lookups across multiple indexes via explicit
opt-in (
--index-strategy unsafe-any-match
) (#2815) - Allow no-op
--no-compile
flag on CLI (#2816) - Upgrade
rs-async-zip
to support data descriptors (#2809)
- Avoid unused extras check in
pip install
for source trees (#2811) - Deduplicate editables during install commands (#2820)
- Fix windows lock race: lock exclusive after all try lock errors (#2800)
- Preserve
.git
suffixes and casing in Git dependencies (#2789) - Respect Git tags and branches that look like short commits (#2795)
- Enable virtualenv creation on Windows with cpython-x86 (#2707)
- Document that uv is safe to run concurrently (#2818)
- Recursively resolve direct URL references upfront (#2684)
- Populate the in-memory index when resolving lookahead URLs (#2761)
- Detect Fish via
FISH_VERSION
(#2781) - Exclude installed distributions with multiple versions from consideration in the resolver (#2779)
- Resolve non-determistic behavior in preferences due to site-packages ordering (#2780)
- Use canonical URL to key redirect map (#2764)
- Use distribution database and index for all pre-resolution phases (#2766)
- Fix
uv self update
on Linux (#2783)
- Add
--exclude-editable
support topip-freeze
(#2740) - Add
pyproject.toml
et al to list of prompted packages (#2746) - Consider installed packages during resolution (#2596)
- Recursively allow URL requirements for local dependencies (#2702)
- Add
UV_RESOLUTION
environment variable for--resolution
(#2720)
- Respect overrides in all direct-dependency iterators (#2742)
- Respect subdirectories when reading static metadata (#2728)
- Bump simple cache version (#2712)
- Limit overrides and constraints to
requirements.txt
format (#2632)
- Accept
setup.py
andsetup.cfg
files in compile (#2634) - Add
--no-binary
and--only-binary
support torequirements.txt
(#2680) - Allow pre-releases, locals, and URLs in non-editable path requirements (#2671)
- Use PEP 517 to extract dynamic
pyproject.toml
metadata (#2633) - Add
Editable project location
andRequired-by
topip show
(#2589) - Avoid
prepare_metadata_for_build_wheel
calls for Hatch packages with dynamic dependencies (#2645) - Fall back to PEP 517 hooks for non-compliant PEP 621 metadata (#2662)
- Support
file://localhost/
schemes (#2657) - Use normal resolver in
pip sync
(#2696)
- Disallow
pyproject.toml
frompip uninstall -r
(#2663) - Unhide
--emit-index-url
and--emit-find-links
(#2691) - Use dense formatting for requirement version specifiers in diagnostics (#2601)
- Add an in-memory cache for Git references (#2682)
- Do not force-recompile
.pyc
files (#2642) - Read package metadata from
pyproject.toml
when it is statically defined (#2676)
- Don't error on multiple matching index URLs (#2627)
- Extract local versions from direct URL requirements (#2624)
- Respect
--no-index
with--find-links
inpip sync
(#2692) - Use
Scripts
folder for virtualenv activation prompt (#2690)
uv pip uninstall
no longer supports specifying targets with the-e
/--editable
flag (#2577)
- Add a garbage collection mechanism to the CLI (#1217)
- Add progress reporting for named requirement resolution (#2605)
- Add support for parsing unnamed URL requirements (#2567)
- Add support for unnamed local directory requirements (#2571)
- Enable PEP 517 builds for unnamed requirements (#2600)
- Enable install audits without resolving named requirements (#2575)
- Enable unnamed requirements for direct URLs (#2569)
- Respect HTTP client options when reading remote requirements files (#2434)
- Use PEP 517 build hooks to resolve unnamed requirements (#2604)
- Use c-string literals and update trampolines (#2590)
- Support unnamed requirements directly in
uv pip uninstall
(#2577) - Add support for unnamed Git and HTTP requirements (#2578)
- Make self-update an opt-in Cargo feature (#2606)
- Update minimum rust version (cargo) to 1.76 (#2618)
- Fix self-updates on Windows (#2598)
- Fix authentication with usernames that contain
@
characters (#2592) - Do not error when there are warnings on Python interpreter stderr (#2599)
- Prevent discovery of cache gitignore when building distributions (#2615)
- Fix badge to current CI status (#2612)
- Implement
--no-strip-extras
to preserve extras in compilation (#2555) - Preserve hashes for pinned packages when compiling
without
--upgrade
(#2532) - Add a
uv self update
command (#2228) - Use relative paths for user-facing messages (#2559)
- Add
CUSTOM_COMPILE_COMMAND
support touv pip compile
(#2554) - Add SHA384 and SHA512 hash algorithms (#2534)
- Treat uninstallable packages as warnings, rather than errors (#2557)
- Allow
VIRTUAL_ENV
to take precedence overCONDA_PREFIX
(#2574) - Ensure mtime of site packages is updated during wheel installation (#2545)
- Re-test validity after every lenient parsing change (#2550)
- Run interpreter discovery under
-I
mode (#2552) - Search in both
purelib
andplatlib
for site-packages population (#2537) - Fix wheel builds and uploads for musl ARM (#2518)
- Add
--link-mode
defaults to CLI (#2549) - Add an example workflow for compiling the current environment's packages (#1968)
- Add
uv pip check diagnostics
toPIP_COMPATIBILITY.md
(#2544)
- Add support for PyTorch-style local version semantics (#2430)
- Add support for Hatch's
{root:uri}
paths in editable installs (#2492) - Implement
uv pip check
(#2397) - Add pip-like linehaul information to user agent (#2493)
- Add additional ARM targets to release (#2417)
- Allow direct file path requirements to include fragments (#2502)
- Avoid panicking on cannot-be-a-base URLs (#2461)
- Drop
macosx_10_0
from compatible wheel tags onaarch64
(#2496) - Fix operating system detection on *BSD (#2505)
- Fix priority of ABI tags (#2489)
- Fix priority of platform tags for manylinux (#2483)
- Make > operator exclude post and local releases (#2471)
- Re-add support for pyenv shims (#2503)
- Validate required package names against wheel package names (#2516)
- Loosen
.dist-info
validation to accept arbitrary versions (#2441)
- Fix macOS architecture detection on i386 machines (#2454)
- Add in-URL credentials to store prior to creating requests (#2446)
- Error when direct URL requirements don't match
Requires-Python
(#2196)
- Add
UV_NATIVE_TLS
environment variable (#2412) - Allow
SSL_CERT_FILE
without requiring--native-tls
(#2401) - Add support for retrieving credentials from
keyring
(#2254)
- Add backoff for transient Windows failures (#2419)
- Move architecture and operating system probing to Python (#2381)
- Respect
--native-tls
invenv
(#2433) - Treat non-existent site-packages as empty (#2413)
- Document HTTP authentication (#2425)
- Improve performance of version range operations (#2421)
Users that rely on native root certificates (or the SSL_CERT_FILE
) environment variable must now
pass the --native-tls
command-line flag to enable this behavior.
- Enable TLS native root toggling at runtime (#2362)
- Add
--dry-run
flag touv pip install
(#1436) - Implement "Requires" field in
pip show
(#2347) - Remove
wheel
from default PEP 517 backend (#2341) - Add
UV_SYSTEM_PYTHON
environment variable as alias to--system
(#2354) - Add a
-vv
log level and make-v
more readable (#2301)
- Expand environment variables prior to detecting scheme (#2394)
- Fix bug where
--no-binary :all:
prevented build of editable packages (#2393) - Ignore inverse dependencies when building graph (#2360)
- Skip prefetching when
--no-deps
is specified (#2373) - Trim injected
python_version
marker to (major, minor) (#2395) - Wait for request stream to flush before returning resolution (#2374)
- Write relative paths for scripts in data directory (#2348)
- Add dedicated error message for direct filesystem paths in requirements (#2369)
- Allow more-precise Git URLs to override less-precise Git URLs (#2285)
- Add support for Metadata 2.2 (#2293)
- Added ability to select bytecode invalidation mode of generated
.pyc
files (#2297) - Add
Seek
fallback for zip files with data descriptors (#2320)
- Support reading UTF-16 requirements files (#2283)
- Trim rows in
pip list
(#2298) - Avoid using setuptools shim of distutils (#2305)
- Communicate PEP 517 hook results via files (#2314)
- Increase default buffer size for wheel and source downloads (#2319)
- Add
Accept-Encoding: identity
to remaining stream paths (#2321) - Avoid duplicating authorization header with netrc (#2325)
- Remove duplicate
INSTALLER
inRECORD
(#2336)
- Add a custom suggestion to install wheel into the build environment (#2307)
- Document the environment variables that uv respects (#2318)
- Add support for
--no-build-isolation
(#2258) - Add support for
--break-system-packages
(#2249) - Add support for
.netrc
authentication (#2241) - Add support for
--format=freeze
and--format=json
inuv pip list
(#1998) - Add support for remote
https://
requirements files (#1332) (#2081) - Implement
uv pip show
(#2115) - Allow
UV_PRERELEASE
to be set via environment variable (#2240) - Include exit code for build failures (#2108)
- Query interpreter to determine correct
virtualenv
paths, enablinguv venv
with PyPy and others (#2188) - Respect non-
sysconfig
-based system Pythons, enabling--system
installs on Debian and others (#2193)
- Fallback to fresh request on non-validating 304 (#2218)
- Add
.stdout()
and.stderr()
outputs toPrinter
(#2227) - Close
RECORD
after reading entries during uninstall (#2259) - Fix Conda Python detection on Windows (#2279)
- Fix parsing requirement where a variable follows an operator without a space (#2273)
- Prefer more recent minor versions in wheel tags (#2263)
- Retry on Python interpreter launch failures during
--compile
(#2278) - Show appropriate activation command based on shell detection (#2221)
- Escape Windows paths with spaces in
venv
activation command (#2223) - Add specialized activation message for
cmd.exe
(#2226) - Cache wheel metadata in no-PEP 658 fallback (#2255)
- Use reparse points to detect Windows installer shims (#2284)
- Add
PIP_COMPATIBILITY.md
to document known deviations frompip
(#2244)
- Add a
--compile
option toinstall
to enable bytecode compilation (#2086) - Expose the
--exclude-newer
flag to limit candidate packages based on date (#2166) - Add
uv
version to user agent (#2136)
- Set
.metadata
suffix on URL path (#2123) - Fallback to non-range requests when HEAD returns 404 (#2186)
- Allow direct URLs in optional dependencies in editables (#2206)
- Allow empty values in WHEEL files (#2170)
- Avoid Windows Store shims in
--python python3
-like invocations (#2212) - Expand Windows shim detection to include
python3.12.exe
(#2209) - HTML-decode URLs in HTML indexes (#2215)
- Make direct dependency detection respect markers (#2207)
- Respect
py --list-paths
fallback in--python python3
invocations on Windows (#2214) - Respect local freshness when auditing installed environment (#2169)
- Respect markers on URL dependencies in editables (#2176)
- Respect nested editable requirements in parser (#2204)
- Run Windows against Python 3.13 (#2171)
- Error when editables don't match
Requires-Python
(#2194)
- Add support for
--system-site-packages
inuv venv
(#2101) - Add support for Python installed from Windows Store (#2122)
- Expand environment variables in
-r
and-c
subfile paths (#2143) - Treat empty index URL strings as null instead of erroring (#2137)
- Use space as delimiter for
UV_EXTRA_INDEX_URL
(#2140) - Report line and column numbers in
requirements.txt
parser errors (#2100) - Improve error messages when
uv
is offline (#2110)
- Future-proof the
pip
entrypoints special-case (#1982) - Allow empty extras in
pep508-rs
and add more corner case to tests (#2128) - Adjust base Python lookup logic for Windows to respect Windows Store (#2121)
- Consider editable dependencies to be 'direct' for
--resolution
(#2114) - Preserve environment variables in resolved Git dependencies (#2125)
- Use
prefix
instead ofbase_prefix
for environment root (#2117) - Wrap unsafe script shebangs in
/bin/sh
(#2097) - Make WHEEL parsing error line numbers one indexed (#2151)
- Determine
site-packages
path based on implementation name (#2094)
- Add caveats on
--system
support to the README (#2131) - Add instructions for
SSL_CERT_FILE
env var (#2124)
- Prioritize
PATH
overpy --list-paths
in Windows selection (#2057). This fixes an issue in which the--system
flag would not work correctly on Windows in GitHub Actions. - Avoid canonicalizing user-provided interpreters (#2072). This fixes an
issue in which the
--python
flag would not work correctly with pyenv and other interpreters. - Allow pre-releases for requirements in constraints files (#2069)
- Avoid truncating EXTERNALLY-MANAGED error message (#2073)
- Extend activation highlighting to entire
venv
command (#2070) - Reverse the order of
--index-url
and--extra-index-url
priority (#2083) - Avoid assuming
RECORD
file is inplatlib
(#2091)
- Add a
--python
flag to allow installation into arbitrary Python interpreters (#2000) - Add a
--system
flag for opt-in non-virtualenv installs (#2046)
- Add a
--pre
alias for--prerelease=allow
(#2049) - Enable
freeze
andlist
to introspect non-virtualenv Pythons (#2033) - Support environment variables in index URLs in requirements files (#2036)
- Add
--exclude-editable
and--exclude
args touv pip list
(#1985) - Always remove color codes from output file (#2018)
- Support recursive extras in direct
pyproject.toml
files (#1990) - Un-cache editable requirements with dynamic metadata (#2029)
- Use a non-local lockfile for locking system interpreters (#2045)
- Surface the
EXTERNALLY-MANAGED
message to users (#2032)
- Add support for pip-compile's
--unsafe-package
flag (#1889) - Improve interpreter discovery logging (#1909)
- Implement
uv pip list
(#1662) - Allow round-trip via
freeze
command (#1936) - Don't write pip compile output to stdout with
-q
(#1962) - Add long-form version output (#1930)
- Accept single string for
backend-path
(#1969) - Add compatibility for deprecated
python_implementation
marker (#1933) - Generate versioned
pip
launchers (#1918)
- Avoid erroring for source distributions with symlinks in archive (#1944)
- Expand scope of archive timestamping (#1960)
- Gracefully handle virtual environments with conflicting packages (#1893)
- Invalidate dependencies when editables are updated (#1955)
- Make < exclusive for non-pre-release markers (#1878)
- Properly apply constraints in venv audit (#1956)
- Re-sync editables on-change (#1959)
- Remove current directory from PATH in PEP 517 hooks (#1975)
- Remove
--upgrade
and--quiet
flags from generated output files (#1873) - Use full python version in
pyvenv.cfg
(#1979)
- fix
uv pip install
handling of gzip'd response and PEP 691 (#1978) - Remove
spawn_blocking
from version map (#1966)
- Clarify
lowest
vs.lowest-direct
resolution strategies (#1954) - Improve error message for network timeouts (#1961)
- Omit
--find-links
from annotation header unless requested (#1898) - Write to stdout when
--output-file
is present (#1892)
- Retain authentication when making range requests (#1902)
- Fix uv-created venv detection (#1908)
- Fix Windows
py
failure from spurious stderr (#1885) - Ignore Python 2 installations when querying for interpreters (#1905)
- Add support for
config_settings
in PEP 517 hooks (#1833) - feat: allow passing extra config k,v pairs for pyvenv.cfg when creating a venv (#1852)
- Ensure authentication is passed from the index url to distribution files (#1886)
- Use
rustls-tls-native-roots
inuv
crate (#1888) - pep440: fix version ordering (#1883)
- Hide index URLs from header if not emitted (#1835)
- Add changelog (#1881)
- Allow duplicate URLs that resolve to the same canonical URL (#1877)
- Retain authentication attached to URLs when making requests to the same host (#1874)
- Win Trampoline: Use Python executable path encoded in binary (#1803)
- Expose types to implement custom
ResolverProvider
(#1862) - Search
PATH
whenpython
can't be found withpy
(#1711) - Avoid displaying "root" package when formatting terms (#1871)
- Use more universal windows install instructions (#1811)
- Expose types to implement custom ResolverProvider (#1862)
- Stream zip archive when fetching non-range-request metadata (#1792)
- Support setting request timeout with
UV_HTTP_TIMEOUT
andHTTP_TIMEOUT
(#1780) - Improve error message when git ref cannot be fetched (#1826)
- Implement
--annotation-style
parameter foruv pip compile
(#1679)
- Add fixup for
prefect<1.0.0
(#1825) - Add support for
>dev
specifier (#1776) - Avoid enforcing URL correctness for installed distributions (#1793)
- Don't expect pinned packages for editables with non-existent extras (#1847)
- Linker copies files as a fallback when ref-linking fails (#1773)
- Move conflicting dependencies into PubGrub (#1796)
- Normalize
VIRTUAL_ENV
path in activation scripts (#1817) - Preserve executable bit when untarring archives (#1790)
- Retain passwords in Git URLs (#1717)
- Sort output when installing seed packages (#1822)
- Treat ARM wheels as higher-priority than universal (#1843)
- Use
git
command to fetch repositories instead oflibgit2
for robust SSH support (#1781) - Use redirected URL as base for relative paths (#1816)
- Use the right marker for the
implementation
field ofpyvenv.cfg
(#1785) - Wait for distribution metadata with
--no-deps
(#1812) - platform-host: check /bin/sh, then /bin/dash and then /bin/ls (#1818)
- Ensure that builds within the cache aren't considered Git repositories (#1782)
- Strip trailing
+
from version number of local Python builds (#1771)
- Add docs for git authentication (#1844)
- Update venv activation for windows (#1836)
- Update README.md to include extras example (#1806)
- Expose find_uv_bin and declare typing support (#1728)
- Implement
uv cache dir
(#1734) - Support
venv --prompt
(#1570) - Print activation instructions for a venv after one has been created (#1580)
- Add shell completions generation (#1675)
- Move
uv clean
touv cache clean
(#1733) - Allow
-f
alias for--find-links
(#1735)
- Control pip timeout duration via environment variable (#1694)
- Add support for absolute paths on Windows (#1725)
- Don't preserve timestamp in streaming unzip (#1749)
- Ensure extras trigger an install (#1727)
- Only preserve the executable bit (#1743)
- Preserve trailing slash for
--find-links
URLs (#1720) - Respect
--index-url
provided via requirements.txt (#1719) - Set index URLs for seeding venv (#1755)
- Support dotted function paths for script entrypoints (#1622)
- Support recursive extras for URL dependencies (#1729)
- Better error message for missing space before semicolon in requirements (#1746)
- Add warning when dependencies are empty with Poetry metadata (#1650)
- Ignore invalid extras from PyPI (#1731)
- Improve Poetry warning (#1730)
- Remove uv version from uv pip compile header (#1716)
- Fix handling of range requests on servers that return "Method not allowed" (#1713)
- re-introduce cache healing when we see an invalid cache entry (#1707)
- Clarify Windows install command in README.md (#1751)
- Add instructions for installing on Arch Linux (#1765)
- Allow passing in a custom reqwest Client (#1745)
- Add
CACHEDIR.TAG
to uv-created virtualenvs (#1653)
- Build source distributions in the cache directory instead of the global temporary directory (#1628)
- Do not remove uv itself on pip sync (#1649)
- Ensure we retain existing environment variables
during
python -m uv
(#1667) - Add yank warnings at end of messages (#1669)
- Add brew to readme (#1629)
- Document RUST_LOG=trace for additional logging verbosity (#1670)
- Document local testing instructions (#1672)
- Minimal markdown nits (#1664)
- Use
--override
rather than-o
to specify overrides in README.md (#1668) - Remove setuptools & wheel from seed packages on Python 3.12+ ( #1602) (#1613)
- Add graceful fallback for Artifactory indexes (#1574)
- Allow URL requirements in editable installs (#1614)
- Allow repeated dependencies when installing (#1558)
- Always run
get_requires_for_build_wheel
(#1590) - Avoid propagating top-level options to sub-resolutions (#1607)
- Consistent use of
BIN_NAME
in activation scripts (#1577) - Enforce URL constraints for non-URL dependencies (#1565)
- Allow non-nested archives for
hexdump
and others (#1564) - Avoid using
white
coloring in terminal output (#1576) - Bump simple metadata cache version (#1617)
- Better error messages on expect failures in resolver (#1583)
- Add license to activator scripts (#1610)
- Add support for
UV_EXTRA_INDEX_URL
(#1515) - Use the system trust store for HTTPS requests (#1512)
- Automatically detect virtual environments when used
via
python -m uv
(#1504) - Add warning for empty requirements files (#1519)
- Support MD5 hashes (#1556)
- Add support for extras in editable requirements (#1531)
- Apply percent-decoding to file-based URLs (#1541)
- Apply percent-decoding to filepaths in HTML find-links (#1544)
- Avoid attempting rename in copy fallback path (#1546)
- Fix list rendering in
venv --help
output (#1459) - Fix trailing commas on
Requires-Python
in HTML indexes (#1507) - Read from
/bin/sh
if/bin/ls
cannot be found when determining libc path (#1433) - Remove URL encoding when determining file name (#1555)
- Support recursive extras (#1435)
- Use comparable representation for
PackageId
(#1543) - fix OS detection for Alpine Linux (#1545)
- only parse /bin/sh (not /bin/ls) (#1493)
- pypi-types: fix lenient requirement parsing (#1529)
- Loosen package script regexp to match spec (#1482)
- Use string display instead of debug for url parse trace (#1498)
- Provide example of file based package install. (#1424)
- Adjust link (#1434)
- Add troubleshooting section to benchmarks guide (#1485)
- infra: source github templates (#1425)
- Add
--upgrade
support topip install
(#1379) - Add
-U
/-P
short flags for--upgrade
/--upgrade-package
(#1394) - Add
UV_NO_CACHE
environment variable (#1383) - uv-cache: Add hidden alias for --no-cache-dir (#1380)
- Add fix-up for invalid star comparison with major-only version (#1410)
- Add fix-up for trailing comma with trailing space (#1409)
- Allow empty fragments in HTML parser (#1443)
- Fix search for
python.exe
on Windows (#1381) - Ignore invalid extra named
.none
(#1428) - Parse
-r
and-c
entries as relative to containing file (#1421) - Avoid import contextlib in
_virtualenv
(#1406) - Decode HTML escapes when extracting SHA (#1440)
- Fix broken URLs parsed from relative paths in registries (#1413)
- Improve error message for invalid sdist archives (#1389)
- Re-add license badge to the README (#1333)
- Replace "novel" in README (#1365)
- Tweak some grammar in the README (#1387)
- Update README.md to include venv activate (#1411)
- Update wording and add
alt
tag (#1423)
- Fix bug where
python3
is not found in the global path (#1351)