Skip to content

Latest commit

 

History

History
1209 lines (870 loc) · 76.9 KB

0.5.x.md

File metadata and controls

1209 lines (870 loc) · 76.9 KB

Changelog 0.5.x

0.5.31

Enhancements

  • Add uv sync --script (#11361)
  • Allow PEP 508 requirements in tool requests (#11337)
  • Allow source distributions to produce wheels with +local suffixes (#11429)
  • Bring parity to uvx and uv tool install requests (#11345)
  • Use a stable directory for local, remote, and stdin script virtual environments (#11347, #11364)
  • Detect infinite recursion in uv run (#11386)

Python

The managed Python distributions have been updated, including:

See the python-build-standalone release notes for more details.

Bug fixes

  • Fix cross-drive script installation (#11167)
  • Add indexes in priority order (#11451)
  • Allow --python <dir> requests to match existing environments if sys.executable is the same file (#11290)
  • Avoid comparing to system site packages in --dry-run mode (#11427)
  • Prefer running executables in the environment with <name> over <name>/__main__.py (#11431)
  • Retry local clones without hardlinks if they fail (#11421)

Documentation

  • Update alternative-indexes.md to use UV_INDEX instead of UV_EXTRA_INDEX_URL (#11381)
  • Update scripts guide to include using package indexes (#11443)

0.5.30

Python

The managed PyPy distributions have been updated for PyPy v7.3.18, which includes:

  • PyPy3.10, which updates the standard library from Python 3.10.14 to 3.10.19
  • PyPy3.11, which adds beta support for Python 3.11.11

See the PyPy release for more details.

Enhancements

  • Add uv sync --dry-run (#11299)
  • Ignore #egg fragment in HTML Simple API response (#11340)

Configuration

  • Add NO_BINARY and NO_BINARY_PACKAGE environment variables (#11399)

Performance

  • Avoid re-cloning name when populating ambiguous set (#11401)
  • Optimize flattening in large workspaces (#11313)

Bug fixes

  • Allow dynamic packages to be overloaded (#11400)
  • Fix credential caching for index roots when URL ends in simple/ (#11336)
  • Fix marker merging for requirements.txt for psycopg (#11298)
  • Set 777 permissions on locked files (#11328)
  • Support extras in @ requests for tools (#11335)
  • Upgrade astral-tokio-tar to v0.5.1 (#11359)
  • Avoid missing logging for no-op upgrade events (#11301)
  • Use refined specifiers when logging narrowed Python range (#11334)
  • Don't use popup-generating eprintln in trampoline warnings (#11295)
  • Patch pkg-config files to be relocatable (#11291)
  • Fix a case of duplicate torch packages when using conflicting extras (#11323)

Documentation

  • Add docs for uv tool install --editable (#11280)
  • Fix broken anchors in README and docs index (#11338)

0.5.29

Enhancements

  • Add --bare option to uv init (#11192)
  • Add support for respecting VIRTUAL_ENV in project commands via --active (#11189)
  • Allow the project VIRTUAL_ENV warning to be silenced with --no-active (#11251)

Python

The managed Python distributions have been updated, including:

  • CPython 3.12.9
  • CPython 3.13.2
  • pkg-config files are now relocatable

See the python-build-standalone release notes for more details.

Bug fixes

  • Always use base Python discovery logic for cached environments (#11254)
  • Use a flock to avoid concurrent initialization of project environments (#11259)
  • Fix handling of --all-groups and --no-default-groups flags (#11224)

Documentation

  • Minor touchups to the Docker provenance docs (#11252)
  • Move content from the mkdocs.public.yml into the template (#11246)

0.5.28

Bug fixes

  • Allow discovering virtual environments from the first interpreter found on the PATH (#11218)
  • Clear ephemeral overlays when running tools (#11141)
  • Disable SSL in Git commands for --allow-insecure-host (#11210)
  • Fix hardlinks in tar unpacking (#11221)
  • Set base executable when returning virtual environment (#11209)
  • Use base Python for cached environments (#11208)

Documentation

  • Add documentation on verifying Docker image attestations (#11140)
  • Add last updated to documentation (#11164)

0.5.27

Enhancements

  • Avoid setting permissions during tar extraction (#11191)
  • Remove warnings for missing lower bounds (#11195)
  • Update PubGrub to set-based outdated priority tracking (#11169)
  • Improve error messages for uv pip install with --extra or --all-extras and invalid sources (#11193)
  • Sign Docker images using GitHub attestations (#8685)

Preview features

  • Don't expand self-referential extras in the build backend (#11142)

Performance

  • Filter discovered Python executables by source before querying (#11143)
  • Optimize exclusion computation for markers (#11158)
  • Use Astral-maintained tokio-tar fork (#11174)
  • Remove unneeded .clone() (#11127)

Bug fixes

  • Fix relative paths in bytecode compilation (#11177)
  • Percent-decode URLs in canonical comparisons (#11088)
  • Respect concurrency limits in parallel index fetch (#11182)
  • Use wire JSON schema for conflict items (#11196)
  • Use explicit _GLibCVersion tuple in uv-python crate (#11122)

Documentation

  • Add Git SHA locking behavior to docs (#11125)
  • Add best-practice flags to pip install example in troubleshooting guide (#11194)
  • Set VIRTUAL_ENV in Jupyter kernels (#11155)
  • Add instructions for deactivating an environment (#11200)

0.5.26

Enhancements

  • Add support for uvx python (#11076)
  • Allow --no-dev --invert in uv tree (#11068)
  • Update uv python install --reinstall to reinstall all previous versions (#11072)
  • Consistently write log messages with capitalized first word (#11111)
  • Suggest --build-backend when --backend is passed to uv init (#10958)
  • Improve retry trace message (#11108)

Performance

  • Remove unnecessary UTF-8 conversion in hash parsing (#11110)

Bug fixes

  • Ignore non-hash fragments in HTML API responses (#11107)
  • Avoid resolving symbolic links when querying Python interpreters (#11083)
  • Avoid sharing state between universal and non-universal resolves (#11051)
  • Error when --script is passing a non-PEP 723 script (#11118)
  • Make metadata deserialization failures non-fatal in the cache (#11105)
  • Mark metadata as dynamic when reading from built wheel cache (#11046)
  • Propagate credentials for <index>/simple to <index>/... endpoints (#11074)
  • Fix conflicting extra bug during uv sync (#11075)

Documentation

  • Add PyTorch XPU instructions to the PyTorch guide (#11109)
  • Add docs for signal handling (#11041)
  • Explain build frontend vs. build backend (#11094)
  • Fix formatting of RUST_LOG documentation (#10053)
  • Fix typo in --no-deps description (#11073)
  • Reflow CLI documentation comments (#11040)
  • Shorten "Using existing Python versions" nav item so it fits on one line (#11077)
  • Some minor touch-ups to the Python install guide (#11116)
  • Update Dependabot tracking issue link (#11054)
  • Update documentation for running in a container (#11052)
  • Upgrade PyTorch version in documentation (#11114)
  • Use sys_platform in lieu of platform_system in PyTorch docs (#11113)
  • Use positive (rather than negative) markers in PyTorch examples (#11112)
  • Fix unnecessary backslashes in brackets (#11059)
  • Suggest setting copy link mode in GitLab integration guide (#11067)

0.5.25

Enhancements

  • Allow installation of manylinux wheels on loongarch64 (#10927)
  • Allow optional = for editables in requirements.txt (#10954)
  • Add Windows aarch64 to the release binaries (#10885)

Bug fixes

  • Use spec-compliant (128+n) exit codes for uv run and uv tool run on Unix (#10781)
  • Fix best-interpreter lookups when there is an invalid interpreter in the PATH (#11030)
  • Guard against concurrent cache writes on Windows (#11007)
  • Prioritize package preferences with greater package versions (#10963)
  • Reject --editable flag on non-directory requirements (#10994)
  • Respect --no-sources for uv pip install workspace discovery (#11003)
  • Set JEMALLOC_SYS_WITH_LG_PAGE=16 in ARM Docker builds (#10943)
  • Update riscv64 Python downloads to allow install on riscv64gc (#10937)
  • Fix file persist retries on Windows (#11008)
  • Fix incorrect error message when specifying tool.uv.sources.(package).workspace with other options (#11013)
  • Improve SIGINT handling in uv run (#11009)

Documentation

  • Add SECURITY policy (#11035)
  • Add Requires-Python upper bound behavior to the docs (#10964)
  • Add a troubleshooting section and reproducible example guide (#10947)
  • Add documentation for uv add -r (#10926)
  • Amend requires-python rules in resolver documentation (#10993)
  • Reference workspaces in --no-sources documentation (#10995)
  • Update documentation for activating virtual environments in different shell (#11000)
  • Add Docker SHA pinning tip (#10955)

0.5.24

Enhancements

  • Improve determinism of resolution by always setting package priorities (#10853)
  • Upgrade to cargo-dist 0.28.0; improves several installer behaviors (#10884)

Performance

  • Remove dependencies clone in resolver (#10880)
  • Use Hashbrown's raw entry API to reduce hashes and clone in resolver priority determination (#10881)

Bug fixes

  • Allow fallback to Python download on non-critical discovery errors (#10908)

Preview features

  • Register managed Python version with the Windows Registry (PEP 514) (#10634)

Documentation

  • Improve documentation for some environment variables (#10887)
  • Add git subdirectory example (#10894)

0.5.23

Enhancements

  • Add --refresh to uv venv (#10834)
  • Add --no-default-groups command-line flag (#10618)

Bug fixes

  • Sort extras and groups when comparing lockfile requirements (#10856)
  • Include commit_id and requested_revision in direct_url.json (#10862)
  • Invalidate lockfile when static versions change (#10858)
  • Make GitHub fast path errors non-fatal (#10859)
  • Remove warnings for --frozen and --locked in uv run --script (#10840)
  • Resolve find-links paths relative to the configuration file (#10827)
  • Respect visitation order for proxy packages (#10833)
  • Treat version mismatch errors as non-fatal in fast paths (#10860)
  • Mark --locked and --upgrade are conflicting (#10836)
  • Relax error checking around unconditional enabling of conflicting extras (#10875)

Documentation

  • Reduce ambiguity in conflicting extras example (#10877)
  • Update pre-commit documentation (#10756)

Error messages

  • Error when workspace contains conflicting Python requirements (#10841)
  • Improve uvx error message when uv is missing (#9745)

0.5.22

Enhancements

  • Include version and contact information in GitHub User Agent (#10785)

Performance

  • Add fast-path for recursive extras in dynamic validation (#10823)
  • Fetch pyproject.toml from GitHub API (#10765)
  • Remove allocation in Git SHA truncation (#10801)
  • Skip GitHub fast path when full commit is already known (#10800)

Bug fixes

  • Add fallback to build backend when Requires-Dist mismatches (#10797)
  • Avoid deserialization error for paths above the root (#10789)
  • Avoid respecting preferences from other indexes (#10782)
  • Disable the distutils setuptools shim during interpreter query (#10819)
  • Omit variant when detecting compatible Python installs (#10722)
  • Remove TOCTOU errors in Git clone (#10758)
  • Validate metadata under GitHub fast path (#10796)
  • Include conflict markers in fork markers (#10818)

Error messages

  • Add tag incompatibility hints to sync failures (#10739)
  • Improve log when distutils is missing (#10713)
  • Show non-critical Python discovery errors if no other interpreter is found (#10716)
  • Use colors for lock errors (#10736)

Documentation

  • Add testing instructions to the AWS Lambda guide (#10805)

0.5.21

Enhancements

  • Avoid building dynamic versions when validating lockfile (#10703)

Configuration

  • Add UV_VENV_SEED environment variable (#10715)

Performance

  • Store unsupported tags in wheel filename (#10665)

Bug fixes

  • Avoid attempting to patch macOS dylib for non-macOS installs (#10721)
  • Avoid narrowing requires-python marker with disjunctions (#10704)
  • Respect environment variable credentials for indexes outside root (#10688)
  • Respect preferences for explicit index dependencies from requirements.txt (#10690)
  • Sort preferences by environment, then index (#10700)
  • Ignore permission errors when looking for user-level configuration file (#10697)

Documentation

  • Add SyntaxWarning compatibility note to bytecode compilation docs (#10701)
  • Add MACOSX_DEPLOYMENT_TARGET to the --python-platform documentation (#10698)

0.5.20

Bug fixes

  • Avoid failing when deserializing unknown tags (#10655)

0.5.19

Enhancements

  • Filter wheels from lockfile based on architecture (#10584)
  • Omit dynamic versions from the lockfile (#10622)
  • Add support for pip freeze --path (#10488)
  • Reduce verbosity of inline-metadata message when using uv run <script.py> (#10588)
  • Add opt-in Git LFS support (#10335)
  • Recommend --native-tls on SSL errors (#10605)
  • Show expected and available ABI tags in resolver errors (#10527)
  • Show target Python version in error messages (#10582)
  • Add --output-format=json support to uv python list (#10596)

Python

The managed Python distributions have been updated, including:

  • Python 3.14 support on Windows
  • Python 3.14.0a4 support
  • 64-bit RISC-V Linux support
  • Bundled libedit updated from 20210910-3.1 -> 20240808-3.1
  • Bundled tcl/tk updated from 8.6.12 -> 8.6.14 (for all Python versions on Unix, only for Python 3.14 on Windows)

See the python-build-standalone release notes for more details.

Performance

  • Avoid allocating when stripping source distribution extension (#10625)
  • Reduce WheelFilename to 48 bytes (#10583)
  • Reduce distribution size to 200 bytes (#10601)
  • Remove import re from entrypoint wrapper scripts (#10627)
  • Shrink size of platform tag enum (#10546)
  • Use ArcStr in verbatim URL (#10600)
  • Use memchr for wheel parsing (#10620)

Bug fixes

  • Avoid reading symlinks during uv python install on Windows (#10639)
  • Correct Pyston tag format (#10580)
  • Provide pyproject.toml path for parse errors in uv venv (#10553)
  • Don't treat setuptools and wheel as seed packages in uv sync on Python 3.12 (#10572)
  • Fix git-tag cache-key reader in case of slashes (#10467) (#10500)
  • Include build tag in rendered wheel filenames (#10599)
  • Patch embedded install path for Python dylib on macOS during python install (#10629)
  • Read cached registry distributions when --config-settings are present (#10578)
  • Show resolver hints for packages with markers (#10607)

Documentation

  • Add meta titles to documents in guides, excluding integration documents (#10539)
  • Remove build-system from example workspace rot (#10636)

Preview features

  • Make build backend type annotations more generic (#10549)

0.5.18

Bug fixes

  • Avoid forking for identical markers (#10490)
  • Avoid panic in uv remove when only comments exist (#10484)
  • Revert "improve shell compatibility of venv activate scripts (#10397)" (#10497)

0.5.17

This release includes support for generating lockfiles from scripts based on inline metadata, as defined in PEP 723.

By default, scripts remain unlocked, and must be locked explicitly with uv lock --script /path/to/script.py, which will generate a lockfile adjacent to the script (e.g., script.py.lock). Once generated, the lockfile will be respected (and updated, if necessary) across uv run --script, uv add --script, and uv remove --script invocations.

This release also includes support for uv export --script and uv tree --script. Both commands support PEP 723 scripts with and without accompanying lockfiles.

Enhancements

  • Add support for locking PEP 723 scripts (#10135)
  • Respect PEP 723 script lockfiles in uv run (#10136)
  • Update PEP 723 lockfile in uv add --script (#10145)
  • Update PEP 723 lockfile in uv remove --script (#10162)
  • Add --script support to uv export for PEP 723 scripts (#10160)
  • Add --script support to uv tree for PEP 723 scripts (#10159)
  • Add ls alias to uv {tool, python, pip} list (#10240)
  • Allow reading --with-requirements from stdin in uv add and uv run (#10447)
  • Warn-and-ignore for unsupported requirements.txt options (#10420)

Preview features

  • Add remaining Python type annotations to build backend (#10434)

Performance

  • Avoid allocating for names in the PEP 508 parser (#10476)
  • Fetch concurrently for non-first-match index strategies (#10432)
  • Remove unnecessary .to_string() call (#10419)
  • Respect sentinels in package prioritization (#10443)
  • Use ArcStr for marker values (#10453)
  • Use ArcStr for package, extra, and group names (#10475)
  • Use matches! rather than contains in requirements.txt parsing (#10423)
  • Use faster disjointness check for markers (#10439)
  • Pre-compute PEP 508 markers from universal markers (#10472)

Bug fixes

  • Fix UV_FIND_LINKS delimiter to split on commas (#10477)
  • Improve uv tool list output when tool environment is broken (#10409)
  • Only track markers for compatible versions (#10457)
  • Respect requires-python when installing tools (#10401)
  • Visit proxy packages eagerly (#10441)
  • Improve shell compatibility of venv activate scripts (#10397)
  • Read publish username from URL (#10469)

Documentation

  • Add Lambda layer instructions to AWS Lambda guide (#10411)
  • Add uv lock --script to the docs (#10414)
  • Use Windows-specific instructions in Jupyter guide (#10446)

0.5.16

Enhancements

  • Accept full requirements in uv remove (#10338)

Performance

  • Avoid over-counting versions in batch prefetcher (#10350)
  • Deactivate tracing for version-choosing (#10351)
  • Force a niche into VersionSmall (#10385)
  • Optimize requirements_for_extra (#10348)
  • Re-enable zlib-ng on x86 platforms (#10365)
  • Re-enable zlib-ng on all platforms (except s390x, PowerPC, and FreeBSD) (#10370)
  • Remove [u64; 4] from small version to move Arc to full version (#10345)
  • Shrink Dist from 352 to 288 bytes (#10389)
  • Speed up file pins by removing nested hash map (#10346)
  • Buffer file reads in serde_json::from_reader (#10341)

Bug fixes

  • Avoid enforcing project-level required version for uv self (#10374)
  • Fix Ruff linting warnings from generated template files for extension modules (#10371)

Documentation

  • Add AWS Lambda integration guide (#10278)

0.5.15

Python

The managed Python distributions have been updated, including:

  • Python 3.14.0a3 support on macOS and Linux
  • Performance improvements
  • Fixes to SQLite feature detection

See the python-build-standalone release notes for more details.

Enhancements

  • Respect FORCE_COLOR environment variable (#10315)

Performance

  • Avoid generating unused hashes during uv lock (#10307)
  • Visit source distributions before wheels (#10291)

Bug fixes

  • Avoid downgrading packages when --upgrade is provided (#10097)
  • Extract supported architectures from wheel tags (#10179)
  • Redact new index credentials in uv add (#10329)

Documentation

  • Clarify exclude-newer only allows full timestamps in settings documentation (#9135)
  • Tweak script --no-project comment (#10331)
  • Update copyright year (#10297)
  • Add instructinos for installing with Scoop (#10332)

0.5.14

Enhancements

  • Add --exact flag to uv run (#10198)
  • Add --outdated support to uv pip tree (#10199)
  • Add a required version setting to uv (#10248)
  • Add loongarch64 to supported Python platform tags (#10223)
  • Add manylinux2014 aliases for --python-platform (#10217)
  • Add support for Python interpreters on ARMv5TE platforms (#10234)
  • Add support for optional --description in uv init (#10209)
  • Ignore empty or missing hrefs in Simple HTML (#10276)
  • Patch pkgconfig files after Python install (#10189)

Performance

  • Actually use jemalloc as alternative allocator (#10269)
  • Parse URLs lazily in resolver (#10259)
  • Use BTreeMap::range to avoid iterating over unnecessary versions (#10266)

Bug fixes

  • Accept directories with space names in uv init (#10246)
  • Avoid forking on version in non-universal resolutions (#10274)
  • Avoid stripping query parameters from URLs (#10253)
  • Consider workspace dependencies to be 'direct' (#10197)
  • Detect cyclic dependencies during builds (#10258)
  • Guard against self-deletion in uv venv and uv tool (#10206)
  • Respect static metadata for already-installed distributions (#10242)

0.5.13

Bug fixes

  • Avoid enforcing URL check on initial publish (#10182)
  • Fix incorrect mismatched constraints reference (#10184)
  • Revert "Update reqwest (#10178)" (#10187)

0.5.12

Enhancements

  • Support uv export for non-project workspaces (#10144)
  • Set glibc versions for standalone installers (#10142)
  • Allow environment variables to be included in cache keys (#10170)

Preview features

  • Include extras in uv-build Requires-Dist metadata (#10110)
  • Use shutil.which for the build backend (#10028)

Bug fixes

  • Always write slash paths to RECORD file (#10164)
  • Add support for subdirectories in direct URLs in uv.lock (#10068)
  • Avoid duplicating backslashes in sysconfig parser (#10063)
  • Avoid erroring when subdirectories are provided in uv add (#10095)
  • Backtrack to non-local versions when wheels are missing platform support (#10046)
  • Fix mirror script to handle newer metadata format (#10050)
  • Preserve sort when deciding on requirement placement (#10078)
  • Remove redundant alias in uv init CLI (#10124)
  • Respect sources credentials in non-project workspaces (#10125)
  • Show non-project dependencies in uv tree (#10149)
  • Strip fragment when storing direct URL (#10093)
  • Include hashes for local source archives (#10080)

Documentation

  • Fix invalid syntax in some sources examples (#10127)

0.5.11

Enhancements

Preview features

  • Build backend: Preserve executable bits for scripts in distributions (#10027)
  • Build backend: Handle case where metadata_directory already contains dist-info directory (#10005)

Performance

  • Batch resolver pre-fetches per fork (#10029)

Bug fixes

  • Allow --script to be provided with uv run - (#10035)
  • Allow uv run arguments when reading from stdin (#10034)
  • Prefer higher Python lower-bounds when forking (#10007)
  • Remove references to deprecated first-match (#10036)

Documentation

  • Add uv python install --preview to the documentation (#10010)
  • Fix uv python install --default note about multiple requests (#10011)
  • Fix typo in Caching docs (#10032)
  • Remove remaining references to deprecated first-match (#10038)
  • Supplement missing separators for UV_INSTALL_DIR directions on Windows (#9507)

0.5.10

Enhancements

  • Improve backtracking behavior when packages conflict repeatedly (#9843)
  • Patch Python sysconfig values such as AR at ar install time (#9905)
  • Patch Python sysconfig values such as clang to cc at install time (#9916)
  • Skip --native-tls in pip compile header (#9913)
  • Add resolver error hint for no-binary and no-build failures (#9948)
  • Improve build error messages (#9660)
  • Reduce redundant Python version incompatibilities in resolver error message (#9957)
  • Reduce redundant enumeration of all package versions in some resolver errors (#9885)
  • Improve display of ranges when pre-releases are not allowed (#9944)
  • Improve error messages for uv remove (#9959)
  • Improve phrasing for single term incompatibilities (#9953)
  • Improve styling of uv remove dependency hints (#9960)
  • Omit trailing zeros on Python requirements inferred from versions (#9952)
  • Show a concise error message for missing version field (#9912)
  • Use the build options value to improve hints for no wheel / source distribution errors (#9950)

Bug fixes

  • Allow multiple disjoint URLs in overrides (#9893)
  • Include explicit indexes in publish index choice (#9932)
  • Fix Python interpreter detection for 32-bit operating systems on 64-bit hosts (#9970)

Documentation

  • Fix typo "operation system" (#9971)
  • Clarify uninstallation docs (#9938)
  • Add a note to say that dependencies between workspace members are editable (#9363)
  • Correctly document default value of fork-strategy setting (#9931)
  • Use double quotes for Windows support in examples (#9946)
  • Remove pypy from top-level pin example (#9896)
  • Update references to python-build-standalone to reflect the transferred project (#9977)
  • Use a different Ruff version in documentation (#9943)
  • Change example so it works as-is on powershell and cmd.exe (#9903)
  • Clarify best practice for Python matrix strategy in GitHub Actions (#9454)
  • Add documentation for uv-lock and uv-export pre-commit hooks (#9872)

Preview features

  • Build backend: Fix pre-PEP 639 license files (#9965)

0.5.9

Enhancements

  • Fork version selection based on requires-python requirements (#9827)
  • Patch sysconfig data at install time (#9857)
  • Remove -isysroot when patching sysconfig (#9860)

Configuration

  • Introduce a --fork-strategy preference mode (#9868)
  • Add support for UV_OFFLINE (#9795)

Bug fixes

  • Avoid panic!() when current directory does not exist (#9876)
  • Avoid reusing interpreter metadata when running under Rosetta (#9846)
  • Avoid trailing slash when deserializing from lockfile (#9848)
  • Fix bug in terms when collapsing unavailable versions in resolver errors (#9877)
  • Fix suggestion to use uv help python on invalid install requests (#9820)
  • Skip root when assessing prefix viability (#9823)
  • Avoid spurious 'Upgraded tool environment' in uv tool upgrade (#9870)

Rust API

  • Upgrade minimum Rust version to 1.83 (#9815)

Documentation

  • Document the --fork-strategy setting (#9887)

Preview features

  • Build backend: Allow underscores in entrypoints (#9825)

0.5.8

This release does not include the powerpc64le-unknown-linux-musl target due to a build issue. See #9793 for details. If this change affects you, please file an issue with your use-case.

Enhancements

  • Omit empty resolution markers in lockfile (#9738)
  • Add --install-dir to to uv python install and uninstall commands (#7920)
  • Add --show-urls and --only-downloads to uv python list (#8062)
  • Add uv python list --all-arches (#9782)
  • Add uv run --gui-script flag for running Python scripts with pythonw.exe (#9152)
  • Allow --gui-script on Unix (#9787)
  • Allow download of Python distribution variants optimized for newer x86_64 microarchitectures (#9781)
  • Allow execution of pyw files on Unix (#9759)
  • Allow users to specify URLs in project.dependencies and tool.uv.sources (#9718)
  • Encode mutually-incompatible pairs of markers (#9444)
  • Improve the error message when a Python install request is not valid (#9783)
  • Preserve directory-level standalone build symlinks (#9723)
  • Add support for uv publish --index <name> (#9694)
  • Reframe --locked and --frozen as --check operations for uv lock (#9662)
  • Rename Python install scratch directory from .cache -> .temp (#9756)
  • Enable uv tool uninstall uv on Windows (#8963)
  • Improve self-dependency hint to make shadowing clear (#9716)
  • Refactor unavailable metadata to shrink the resolver (#9769)
  • Show 'depends on itself' for proxy packages (#9717)
  • Show a dedicated error for missing subdirectories (#9761)
  • Show a dedicated hint for missing git+ prefixes (#9789)

Performance

  • Eagerly error when parsing pyproject.toml requirements (#9704)
  • Use copy-on-write when normalizing paths (#9710)

Bug fixes

  • Avoid enforcing non-conflicts in uv export (#9751)
  • Don't drop comments between items in TOML tables (#9784)
  • Don't fail with --no-build when static metadata is available (#9785)
  • Don't filter non-patch registry version (#9736)
  • Don't read metadata from stale .egg-info files (#9760)
  • Enforce correctness of self-dependencies (#9705)
  • Fix projects's typo in resolver error messages (#9708)
  • Ignore . prefixed directories during managed Python installation discovery (#9786)
  • Improve handling of invalid virtual environments during interpreter discovery (#8086)
  • Normalize relative paths when --project is specified (#9709)
  • Respect self-constraints on recursive extras (#9714)
  • Respect user settings for tracing coloring (#9733)
  • Retry on tar extraction errors (#9753)
  • Add conflict markers to the lock file (#9370)
  • De-duplicate resolution markers (#9780)
  • Avoid 403 error hint for PyTorch URLs (#9750)
  • Avoid treating non-existent --find-links as relative URLs (#9720)
  • Omit Windows Store python3.13.exe et al (#9679)
  • Replace executables with broken symlinks during uv python install (#9706)

Documentation

  • Fix build failure links (#9740)

0.5.7

Enhancements

  • Ignore dynamic version in source dist (#9549)
  • Improve build frontend error handling (#9611)
  • Un-hide uv build --no-build-logs option (#9642)
  • Flag version mismatch between sdist and wheel during uv build (#9633)
  • Improve message when updater receipt is for a different uv executable (#9487)
  • Add environment variable to disable writing installer metadata files (#8877)
  • Add managed downloads for the latest CPython releases: 3.9.21, 3.10.16, 3.11.11, 3.12.8, and 3.13.1 (#9696)

Preview features

  • Build backend: Add hint on import with preview disabled (#9691)
  • Build backend: Add direct builds to the resolver and installer (#9621)
  • Build backend: Add integration test for scripts (#9635)
  • Build backend: Add template to uv init (#9661)
  • Build backend: Add --list option (#9610)

Bug fixes

  • Create missing parent directories for output file of uv export / uv pip compile (#9648)
  • Fix missing display of non-freethreaded Python 3.13 in python list (#9669)
  • Implement Ord and PartialOrd without origin for Requirement (#9624)
  • Include more sources to avoid lowest bound warning (#9644)
  • Respect build tag priority in uv.lock (#9677)

Documentation

  • Add build-essentials note to build failures doc (#9641)
  • Add entry-point for distroless image in GitLab documentation (#9093)
  • Add documentation for uv python pin without a REQUEST argument (#9631)
  • Add a link to uv python pin reference docs (#9630)

0.5.6

Enhancements

  • Add --dry-run to uv pip uninstall (#9557)
  • Allow --constraints and --overrides in uv tool install (#9547)
  • Display removed Python executables on uninstall (#9459)
  • Warn when keyring has no password for uv publish (#8827)
  • Add suggested action when .python-version pin is incompatible with the project (#9590)
  • Improve error messages for mismatches in tool.uv.sources (#9482)
  • Use constraints in trace rather than irrelevant requires-python (#9529)

Preview features

  • Add uv python install --default (#8650)
  • Fix Python executable installation when multiple patch versions are requested (#9607)
  • Build backend: Revamp include / exclude (#9525)
  • Build backend: Add fast path (#9556)
  • Build backend: Add functions to collect file list (#9602)
  • Build backend: Default excludes (#9552)
  • Build backend: Refactoring before list (#9558)
  • Build backend: Warn when visiting over 10k files (#9523)

Configuration

  • Make check-url available in configuration files (#9032)

Performance

  • Avoid adding non-extra package with extra dependencies (#9540)
  • Avoid cloning String in marker evaluation (#9598)

Rust API

  • uv-pep508: Add more methods for simplifying extra-related expressions (#9469)

Bug fixes

  • Allow file: URLs to include package names (#9493)
  • Avoid using IDs across PubGrub states (#9538)
  • Consistently enforce requested-vs.-built metadata when retrieving wheels (#9484)
  • Do not show empty version specifier in uv tool list (#9605)
  • Include Git member information when getting metadata from cache (#9388)
  • Include base installation directory in uv run PATH (#9585)
  • Insert backslash when appending to system drive (#9488)
  • Normalize paths when lowering Git dependencies (#9595)
  • Omit origin when comparing requirements (#9570)
  • Override manylinux_compatible with --python-platform (#9526)
  • Pass extra when evaluating lockfile markers (#9539)
  • Propagate markers for recursive extras in resolver (#9509)
  • Respect path dependencies within Git dependencies (#9594)
  • Support recursive extras with marker in pip compile -r pyproject.toml (#9535)
  • Don't emit unpinned warning for proxy packages (#9497)
  • Fix --refresh-package flag mentioned as --refresh-dependency (#9486)
  • Handle Windows AV/EDR file locks during script installations (#9543)
  • Re-enable conflicting extra/group tests and fix regression from #9540 (#9582)

Documentation

  • Add missing word to docs for run.md (#9527)
  • Add policies reference section and license document (#9367)
  • Fix typo in entry point docs (#9491)
  • Fix up version in prior uninstall instructions (#9485)
  • Mention uv pip behavior in build system note (#9586)
  • Update build failures document (#9584)
  • Correct wording for multiple sources section (#9504)

0.5.5

Enhancements

  • Add aliases for build backend requests (#9294)
  • Avoid displaying empty paths (#9312)
  • Allow constraints in uv tool upgrade (#9375)
  • Remove conflict between --no-sync and --frozen in uv run (#9400)
  • Respect dependency sources in overrides and constraints (#9455)
  • Show an interpreter-focused message for --target and --prefix (#9373)
  • Add --no-extra flag and setting (#9387)
  • Add uv export --prune (#9389)
  • Add dedicated error message for musl install attempts (#9430)
  • Add various grammar changes to conflict error messages (#9369)
  • Annotate default groups in conflict error messages (#9368)
  • Report marker diagnostics during parsing, rather than evaluation (#9338)
  • Use consistent formatting for build system errors (#9340)
  • Use rich diagnostics for build failures (#9335)

Preview features

  • Improve build backend excludes (#9281)
  • Include PEP 639 license-files metadata during uv publish (#9442)

Performance

  • Initialize rayon lazily (#9435)
  • Migrate to PubGrub's arena for package names (#9448)

Bug fixes

  • Allow dependency groups to include the containing package (#9385)
  • Allow syncing to empty virtual environment directories (#9427)
  • Allow system Python discovery with --target and --prefix (#9371)
  • Don't warn when --output-file is empty (#9417)
  • Fix Python interpreter discovery on non-glibc hosts (#9005)
  • Fix tool.uv.dependency-metadata.[].version schema (#9468)
  • Only respect preferences across the same indexes (#9302)
  • Re-compile when --compile is passed to an install operation (#9378)
  • Remove --upgrade, --no-upgrade, and --upgrade-package from uv tool upgrade (#9318)
  • Remove dev dependencies in --all-groups --no-dev (#9300)
  • Surface extras and group conflicts in uv export (#9365)
  • Treat deprecated aliases as equivalent in marker algebra (#9342)
  • Treat less compatible tags as lower priority in resolver (#9339)

Documentation

  • Avoid referencing scikit-build (instead of scikit-build-core) (#9320)
  • Expand entry points documentation (#9329)
  • Fix example pyproject.toml in project concept documentation (#9298)
  • Fix header level of "Conflicting dependencies" page (#9330)
  • Touch-up the extension module guide (#9293)
  • Update the dependencies documentation (#9359)
  • Reference --no-progress option in related environment variable (#9357)

0.5.4

Enhancements

  • Accept either singular or plural values for CLI requirements (#9196)
  • Add --all-groups to uv sync, uv run, uv export, and uv tree (#8892)
  • Add a progress bar to uv tree --outdated and uv pip list --outdated (#9284)
  • Add retries for Python downloads (#9274)
  • Use exponential backoff for publish retries (#9276)
  • Add manylinux target triples up to glibc 2.40 (#9234)

Performance

  • Parallelize network requests in uv tree --outdated (#9280)
  • Use zlib-rs on all platforms (#9264)

Bug fixes

  • Avoid validating extra and group sources in build-system.requires (#9273)
  • Catch retries with wrapped reqwest errors (#9253)
  • Sort hashes in uv export output (#9237)
  • Strip --index and --default-index from command header (#9288)

Documentation

  • Add breadcrumbs to the documentation (#9242)
  • Add minimum version to PyTorch guide (#9247)
  • Add support for anchor redirects with client-side js (#9212)
  • Improve content on project configuration (#9235)
  • Improve the project creation documentation (#9236)
  • Move the integration guides into the "Guides" section as a collapsed group (#9245)
  • Reorganize the project concept documentation (#9121)
  • Use the full screen height for the main content to stabilize the nav (#9153)

Error messages

  • Add dedicated warning for empty stdin (#9256)

0.5.3

This release includes support for conflicting optional dependencies and dependency groups in the uv resolver, including the ability to specify dependency sources (like index assignment) on a per-extra or per-group basis.

For example, you can now select CPU-only vs. GPU-enabled PyTorch builds at runtime by defining conflicting extras in a pyproject.toml, and assigning different extras to different PyTorch indexes:

[project]
name = "project"
version = "0.1.0"
requires-python = ">=3.12.0"

[project.optional-dependencies]
# Include `torch` whenever `--extra cpu` or `--extra gpu` is provided.
cpu = ["torch>=2.5.1"]
gpu = ["torch>=2.5.1"]

[tool.uv]
# But allow `cpu` and `gpu` to choose conflicting versions of `torch`.
conflicts = [[{ extra = "cpu" }, { extra = "gpu" }]]

[tool.uv.sources]
torch = [
  # With `--extra cpu`, pull PyTorch from the CPU-only index.
  { index = "pytorch-cpu", extra = "cpu", marker = "platform_system != 'Darwin'" },
  # With `--extra gpu`, pull PyTorch from the GPU-enabled index.
  { index = "pytorch-gpu", extra = "gpu" },
]

[[tool.uv.index]]
name = "pytorch-cpu"
url = "https://download.pytorch.org/whl/cpu"
explicit = true

[[tool.uv.index]]
name = "pytorch-gpu"
url = "https://download.pytorch.org/whl/cu124"
explicit = true

See the PyTorch documentation for more.

Enhancements

  • Allow conflicting extras in explicit index assignments (#9160)
  • Support overrides and constraints in PEP 723 scripts (#9162)
  • Update uv tool install --force to imply --reinstall-package <name> (#9074)
  • Turn --verify-hashes on by default (#9170)

Performance

  • Enable zlib-rs on all platforms (#9202)

Bug fixes

  • Allow apostrophe in virtual environment name (#8984)
  • Automatically retry body errors when processing response (#9213)
  • Detect nested workspace inside the current workspace and members with identical names (#9094)
  • Only install the specified project with --frozen --package in legacy non-[project] workspaces (#9215)
  • Respect [[tool.uv.index]] in PEP 723 scripts (#9208)
  • Show derivation markers for resolutions with project name (#9136)
  • Sort distributions when computing hash (#9185)
  • Include trampolines in source distributions on Windows (#9172)

Documentation

  • Add --index <name>=<url> syntax to index documentation (#9139)
  • Add documentation for using uv with PyTorch (#9210)

Error messages

  • Add a dedicated error for include = "dev" with tool.uv.dev-dependencies (#9173)
  • Avoid showing disjoint marker error with true (#9169)
  • Improve error message when git is not found (#9206)
  • Include extras and dependency groups in derivation chains (#9113)
  • Include version constraints in derivation chains (#9112)

0.5.2

Enhancements

  • Hide --no-system from uv pip tree CLI (#9040)
  • Allow configuration of Python and PyPy install mirrors in uv.toml (#8695)
  • Allow passing Python download mirrors to uv python install (#8695)
  • Add support for specifying conflicting extras and dependency groups (#8976, #9096)
  • Consistent colon usage in build failure errors (#8994)
  • Show full derivation chain when encountering build failures (#9108)
  • Show link we failed on parsing index pages (#9118)
  • Remove duplicate log when searching for interpreters (#9092)
  • Update uv development status classifier to "Stable" on PyPI (#8943)
  • Use rich diagnostic formatting for early build failures (#9041)
  • Use rich diagnostic formatting for install failures (#9043)

Performance

  • Avoid retraversing filesystem when testing exact glob matches (#9022)

Bug fixes

  • Allow --no-build to validate lock (#9024)
  • Allow default indexes to be marked as explicit (#8990)
  • Avoid creating .venv in uv add --frozen and uv add --no-sync (#8980)
  • Avoid duplicating first-entry comments in uv add (#9109)
  • Defer reporting of build failures in resolver (#9098)
  • Fix references to --resolution-strategy in error message output (#8971)
  • Ignore virtual environments in parent directories when choosing Python version for new projects (#9075)
  • Forward SIGTERM to child processes in uv run (#8933)
  • Prefer Python executable names that match the request over default names (#9066)
  • Prefer compatible to incompatible distributions when packages exist on multiple indexes (#8961)
  • Publish: Ignore non-matching files (#8986)
  • Revert uv.lock changes when uv add fails (#9030)
  • Show file extensions on available commands when not .exe (#9099)
  • Sort by name, then specifiers in uv add (#9097)
  • Split after specifiers in --with requirements (#9089)
  • Support multiple extras in universal pip compile output (#8960)

Preview features

  • Build backend: Add tests for source tree -> source dist -> wheel conversions (#9091)
  • Build backend: Switch to custom glob-walkdir implementation (#9013)
  • Build backend: Add minimal wheel settings (#9085)

Documentation

  • Add wget instructions for systems without curl (#8630)
  • Fix .env file example in docs (#9064)
  • Fix reference to --resolution in docs (#8968)
  • Fix typo in GitLab integration docs (#9047)
  • Update format of environment variable reference (#9018)
  • Use Python syntax for value_type consistently (#9017)
  • Use [[index]] API in configuration example (#9065)
  • Mention how to use extras (#8972)
  • Add some words about specifying conflicting extras/groups (#9120)

0.5.1

Enhancements

  • Allow installation of manylinux wheels on riscv64 (#8934)

Bug fixes

  • Build source distributions at top-level of cache (#8905)
  • Allow non-registry dependencies in uv pip list --outdated (#8939)
  • Compute superset of existing and required hashes when healing cache (#8955)
  • Enable uv to replace and delete itself on Windows (#8914)
  • Remove source distribution filename from cache (#8907)
  • Respect --index-url in uv pip list (#8942)
  • Respect comma-separated extras in --with (#8946)

Documentation

  • Add uninstall note for previous versions (#8937)
  • Remove some missed references to ~/.cargo/bin (#8936)
  • Split README's install code block into 3 (#8853)

0.5.0

Since the launch of Python version, project, and tool management capabilities back in August, we've seen extraordinary adoption of uv. We've been iterating rapidly: adding new features, fixing bugs, and improving the user experience. Despite moving quickly, stability and compatibility have been a major focus — we've made thirty releases since our last breaking change. Consequently, we've accumulated various changes that improve correctness and user experience, but could break some workflows. This release contains those changes; many have been marked as breaking out of an abundance of caution. We expect most users to be able to upgrade without making changes.

Breaking

  • Use base executable to set virtualenv Python path (#8481)

    Previously, uv canonicalized the path to the Python executable when setting the Python path in created virtual environments. This behavior had several undesirable effects: it would bypass stabilized version directories (as constructed by Homebrew) and it was not consistent with the Python standard library's behavior. Now, uv uses the sys._base_executable path.

  • Use XDG (i.e. ~/.local/bin) instead of the Cargo home directory in the installer (#8420)

    Previously, uv's installer used $CARGO_HOME or ~/.cargo/bin for its target install directory. It's been a longstanding complaint that uv uses this directory, as there's no relationship to Cargo. Now, uv will be installed into $XDG_BIN_HOME, $XDG_DATA_HOME/../bin, or ~/.local/bin (in that order). Note that $UV_INSTALL_DIR can always be used to override the target directory.

  • Discover and respect .python-version files in parent directories (#6370)

    Previously, uv only read .python-version files from the working directory. Now, uv will check parent directories for .python-version files; however uv will not search for .python-version files beyond project boundaries. The new behavior is better aligned with that of pyenv and Rye.

  • Error when disallowed settings are defined in uv.toml (#8550)

    Some settings can only be defined in the pyproject.toml. Previously, uv would ignore these settings when present in the uv.toml. Now, uv will error to avoid confusion about why the settings are not respected.

  • Implement PEP 440-compliant local version semantics (#8797)

    Previously, uv's implementation of local versions (e.g. 2.0+cpu) was not compliant with the specification due to the technical complexity of implementing the local version semantics in the PubGrub algorithm. Thanks to the work of @ericmarkmartin, uv now has a spec-compliant implementation. Namely, uv will now allow a request for torch==2.1.0 to install torch@2.1.0+cpu regardless of whether torch@2.1.0 (without a local tag) actually exists.

  • Treat the base Conda environment as a system environment (#7691)

    Previously, uv would not distinguish between the base and other Conda environments. Now, uv uses CONDA_DEFAULT_ENV and the names base and default to determine if an environment active via CONDA_PREFIX is the base environment. If the base environment is active, the --system flag must be used to mutate it.

  • Do not allow pre-releases when the != operator is used (#7974)

    Previously, uv would use the presence of a pre-release specifier in a version specifier as an opt-in to allow pre-release versions during resolution. The new behavior does not allow pre-releases when an inequals operator is used, e.g., != 2.0a1.

  • Prefer USERPROFILE over FOLDERID_Profile when selecting a home directory on Windows (#8048)

    This change is a side-effect of switching from the directories crate to etcetera for determining canonical system paths. If USERPROFILE is not set, the behavior will be unchanged.

  • Improve interactions between color environment variables and CLI options (#8215)

    Previously, uv would respect the FORCE_COLOR and NO_COLOR environment variables over the --color flag. Now, when the --color flag is explicitly provided, uv will respect it over the environment variables.

  • Make allow-insecure-host a global option (#8476)

    Previously, this option was only available in some parts of uv. Now, --allow-insecure-host can be provided to any command. For consistency, the allow-insecure-host setting has been removed from the [tool.uv.pip] configuration in favor of [tool.uv].

  • Only write .python-version files during uv init for workspace members if the version differs (#8897)

    Previously, uv would create a .python-version file for workspace members during uv init. Now, uv will only do so if the version differs from the .python-version file in the workspace root since uv will respect .python-version files in parent directories.

Enhancements

  • Add uv tree --outdated (#8893)
  • Add armv8l alias for armv7l to support arm 32-bit compatibility mode (#8881)
  • Add support for pip list --outdated (#8872)
  • Allow semicolons directly after direct URLs (#8836)
  • Enable support for arbitrary git transports (#8769)
  • Improve Python discovery source messages (#8890)
  • Show dedicated error for trailing ; on URL and path requirements (#8835)
  • Add progress bar for uv cache clean (#8857)
  • Warn on failure to query system configuration file (#8829)

Preview features

  • Add support for building basic source distributions with the experimental uv build backend (#8886)

Bug fixes

  • Respect dynamic version updates in uv lock (#8867)
  • Respect fork markers in --resolution-mode=lowest-direct (#8839)

Documentation

  • Add further examples of git+https support (#8841)
  • Add installer variables to environment reference (#8874)
  • Add note on private classifier (#8783)
  • Update pip-and-uv strictness example (#8822)
  • Fix uv python install docs to use an existing PyPy version (#8845)
  • Document how to mimic --verbose with RUST_LOG (#8858)