Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: astral-sh/uv
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: 0.6.9
Choose a base ref
...
head repository: astral-sh/uv
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: 0.6.10
Choose a head ref
Loading
Showing with 2,816 additions and 937 deletions.
  1. +34 −23 .github/workflows/build-binaries.yml
  2. +29 −29 .github/workflows/ci.yml
  3. +1 −1 .github/workflows/publish-docs.yml
  4. +2 −2 .github/workflows/publish-pypi.yml
  5. +1 −1 .github/workflows/sync-python-releases.yml
  6. +29 −0 CHANGELOG.md
  7. +67 −58 Cargo.lock
  8. +1 −2 crates/uv-auth/src/middleware.rs
  9. +22 −1 crates/uv-auth/src/policy.rs
  10. +2 −2 crates/uv-bench/benches/uv.rs
  11. +24 −3 crates/uv-build-backend/src/lib.rs
  12. +47 −10 crates/uv-build-backend/src/wheel.rs
  13. +2 −2 crates/uv-build-frontend/src/lib.rs
  14. +1 −1 crates/uv-build/Cargo.toml
  15. +1 −1 crates/uv-build/pyproject.toml
  16. +1 −1 crates/uv-cache/src/lib.rs
  17. +36 −1 crates/uv-cli/src/lib.rs
  18. +31 −22 crates/uv-client/src/flat_index.rs
  19. +33 −33 crates/uv-client/src/html.rs
  20. +37 −20 crates/uv-client/src/registry_client.rs
  21. +1 −1 crates/uv-configuration/Cargo.toml
  22. +2 −2 crates/uv-configuration/src/constraints.rs
  23. +4 −1 crates/uv-configuration/src/dry_run.rs
  24. +1 −1 crates/uv-configuration/src/overrides.rs
  25. +8 −7 crates/uv-configuration/src/package_options.rs
  26. +2 −2 crates/uv-dispatch/src/lib.rs
  27. +5 −0 crates/uv-distribution-types/Cargo.toml
  28. +4 −4 crates/uv-distribution-types/src/cached.rs
  29. +87 −1 crates/uv-distribution-types/src/index.rs
  30. +12 −9 crates/uv-distribution-types/src/index_name.rs
  31. +18 −18 crates/uv-distribution-types/src/installed.rs
  32. +25 −14 crates/uv-distribution-types/src/lib.rs
  33. +1 −1 crates/uv-distribution-types/src/origin.rs
  34. +50 −14 crates/uv-distribution-types/src/prioritized_distribution.rs
  35. +42 −35 crates/{uv-pypi-types → uv-distribution-types}/src/requirement.rs
  36. +6 −4 crates/uv-distribution-types/src/resolution.rs
  37. +4 −4 crates/uv-distribution-types/src/specified_requirement.rs
  38. +37 −9 crates/uv-distribution/src/distribution_database.rs
  39. +5 −5 crates/uv-distribution/src/download.rs
  40. +5 −5 crates/uv-distribution/src/index/cached_wheel.rs
  41. +5 −11 crates/uv-distribution/src/metadata/build_requires.rs
  42. +32 −28 crates/uv-distribution/src/metadata/lowering.rs
  43. +4 −4 crates/uv-distribution/src/metadata/mod.rs
  44. +17 −27 crates/uv-distribution/src/metadata/requires_dist.rs
  45. +5 −5 crates/uv-distribution/src/source/built_wheel_metadata.rs
  46. +8 −8 crates/uv-distribution/src/source/mod.rs
  47. +14 −8 crates/uv-fs/src/path.rs
  48. +2 −2 crates/uv-git/src/git.rs
  49. +4 −4 crates/uv-installer/src/plan.rs
  50. +4 −4 crates/uv-installer/src/satisfies.rs
  51. +3 −3 crates/uv-installer/src/site_packages.rs
  52. +13 −13 crates/uv-pep508/src/lib.rs
  53. +2 −2 crates/uv-pep508/src/unnamed.rs
  54. +4 −4 crates/uv-performance-memory-allocator/Cargo.lock
  55. +1 −1 crates/uv-publish/src/lib.rs
  56. +0 −2 crates/uv-pypi-types/Cargo.toml
  57. +3 −3 crates/uv-pypi-types/src/direct_url.rs
  58. +0 −2 crates/uv-pypi-types/src/lib.rs
  59. +24 −20 crates/uv-pypi-types/src/parsed_url.rs
  60. +59 −16 crates/uv-requirements-txt/src/lib.rs
  61. +2 −2 crates/uv-requirements/src/extras.rs
  62. +3 −2 crates/uv-requirements/src/lib.rs
  63. +1 −2 crates/uv-requirements/src/lookahead.rs
  64. +1 −1 crates/uv-requirements/src/source_tree.rs
  65. +2 −2 crates/uv-requirements/src/specification.rs
  66. +4 −3 crates/uv-requirements/src/unnamed.rs
  67. +7 −7 crates/uv-resolver/src/fork_indexes.rs
  68. +55 −43 crates/uv-resolver/src/lock/mod.rs
  69. +2 −3 crates/uv-resolver/src/lock/requirements_txt.rs
  70. +1 −1 crates/uv-resolver/src/manifest.rs
  71. +3 −4 crates/uv-resolver/src/prerelease.rs
  72. +6 −15 crates/uv-resolver/src/pubgrub/dependencies.rs
  73. +2 −2 crates/uv-resolver/src/pubgrub/report.rs
  74. +3 −5 crates/uv-resolver/src/resolution/output.rs
  75. +5 −3 crates/uv-resolver/src/resolver/batch_prefetch.rs
  76. +2 −1 crates/uv-resolver/src/resolver/fork_map.rs
  77. +7 −6 crates/uv-resolver/src/resolver/indexes.rs
  78. +14 −12 crates/uv-resolver/src/resolver/mod.rs
  79. +31 −10 crates/uv-resolver/src/resolver/provider.rs
  80. +1 −1 crates/uv-resolver/src/yanks.rs
  81. +1 −0 crates/uv-tool/Cargo.toml
  82. +3 −5 crates/uv-tool/src/tool.rs
  83. +25 −31 crates/uv-torch/src/backend.rs
  84. +3 −5 crates/uv-types/src/hash.rs
  85. +4 −4 crates/uv-types/src/requirements.rs
  86. +1 −2 crates/uv-types/src/traits.rs
  87. +1 −1 crates/uv-version/Cargo.toml
  88. +4 −4 crates/uv-workspace/src/pyproject.rs
  89. +55 −24 crates/uv-workspace/src/pyproject_mut.rs
  90. +10 −12 crates/uv-workspace/src/workspace.rs
  91. +1 −1 crates/uv/Cargo.toml
  92. +2 −2 crates/uv/src/commands/build_frontend.rs
  93. +1 −0 crates/uv/src/commands/mod.rs
  94. +6 −4 crates/uv/src/commands/pip/compile.rs
  95. +7 −5 crates/uv/src/commands/pip/install.rs
  96. +7 −2 crates/uv/src/commands/pip/latest.rs
  97. +2 −0 crates/uv/src/commands/pip/list.rs
  98. +9 −1 crates/uv/src/commands/pip/operations.rs
  99. +4 −2 crates/uv/src/commands/pip/sync.rs
  100. +2 −0 crates/uv/src/commands/pip/tree.rs
  101. +1 −1 crates/uv/src/commands/pip/uninstall.rs
  102. +18 −12 crates/uv/src/commands/project/add.rs
  103. +4 −4 crates/uv/src/commands/project/lock.rs
  104. +2 −2 crates/uv/src/commands/project/lock_target.rs
  105. +8 −8 crates/uv/src/commands/project/mod.rs
  106. +2 −2 crates/uv/src/commands/project/sync.rs
  107. +10 −7 crates/uv/src/commands/publish.rs
  108. +54 −2 crates/uv/src/commands/python/find.rs
  109. +16 −7 crates/uv/src/commands/python/list.rs
  110. +1 −1 crates/uv/src/commands/run.rs
  111. +1 −1 crates/uv/src/commands/tool/common.rs
  112. +6 −4 crates/uv/src/commands/tool/install.rs
  113. +12 −8 crates/uv/src/commands/tool/mod.rs
  114. +44 −5 crates/uv/src/commands/tool/run.rs
  115. +1 −1 crates/uv/src/commands/tool/upgrade.rs
  116. +5 −3 crates/uv/src/commands/venv.rs
  117. +53 −11 crates/uv/src/lib.rs
  118. +22 −3 crates/uv/src/settings.rs
  119. +116 −0 crates/uv/tests/it/build_backend.rs
  120. +59 −5 crates/uv/tests/it/common/mod.rs
  121. +67 −0 crates/uv/tests/it/edit.rs
  122. +218 −8 crates/uv/tests/it/lock.rs
  123. +3 −0 crates/uv/tests/it/main.rs
  124. +64 −0 crates/uv/tests/it/pip_compile.rs
  125. +174 −37 crates/uv/tests/it/python_find.rs
  126. +282 −0 crates/uv/tests/it/python_list.rs
  127. +0 −20 crates/uv/tests/it/snapshots/it__ecosystem__saleor-lock-file.snap
  128. +195 −6 crates/uv/tests/it/sync.rs
  129. +94 −0 crates/uv/tests/it/tool_run.rs
  130. +6 −6 docs/concepts/projects/dependencies.md
  131. +12 −0 docs/concepts/python-versions.md
  132. +2 −2 docs/getting-started/installation.md
  133. +2 −2 docs/guides/integration/aws-lambda.md
  134. +0 −6 docs/guides/integration/dependency-bots.md
  135. +5 −5 docs/guides/integration/docker.md
  136. +1 −1 docs/guides/integration/github.md
  137. +5 −5 docs/guides/integration/pre-commit.md
  138. +2 −2 docs/guides/integration/pytorch.md
  139. +24 −2 docs/reference/cli.md
  140. +1 −1 pyproject.toml
57 changes: 34 additions & 23 deletions .github/workflows/build-binaries.yml
Original file line number Diff line number Diff line change
@@ -54,7 +54,7 @@ jobs:
- name: "Prep README.md"
run: python scripts/transform_readme.py --target pypi
- name: "Build sdist"
uses: PyO3/maturin-action@36db84001d74475ad1b8e6613557ae4ee2dc3598 # v1.47.2
uses: PyO3/maturin-action@22fe573c6ed0c03ab9b84e631cbfa49bddf6e20e # v1.47.3
with:
command: sdist
args: --out dist
@@ -74,7 +74,7 @@ jobs:

# uv-build
- name: "Build sdist uv-build"
uses: PyO3/maturin-action@36db84001d74475ad1b8e6613557ae4ee2dc3598 # v1.47.2
uses: PyO3/maturin-action@22fe573c6ed0c03ab9b84e631cbfa49bddf6e20e # v1.47.3
with:
command: sdist
args: --out crates/uv-build/dist -m crates/uv-build/Cargo.toml
@@ -103,7 +103,7 @@ jobs:

# uv
- name: "Build wheels - x86_64"
uses: PyO3/maturin-action@36db84001d74475ad1b8e6613557ae4ee2dc3598 # v1.47.2
uses: PyO3/maturin-action@22fe573c6ed0c03ab9b84e631cbfa49bddf6e20e # v1.47.3
with:
target: x86_64
args: --release --locked --out dist --features self-update
@@ -133,7 +133,7 @@ jobs:
# uv-build
- name: "Build wheels uv-build - x86_64"
uses: PyO3/maturin-action@36db84001d74475ad1b8e6613557ae4ee2dc3598 # v1.47.2
uses: PyO3/maturin-action@22fe573c6ed0c03ab9b84e631cbfa49bddf6e20e # v1.47.3
with:
target: x86_64
args: --profile minimal-size --locked --out crates/uv-build/dist -m crates/uv-build/Cargo.toml
@@ -157,7 +157,7 @@ jobs:

# uv
- name: "Build wheels - aarch64"
uses: PyO3/maturin-action@36db84001d74475ad1b8e6613557ae4ee2dc3598 # v1.47.2
uses: PyO3/maturin-action@22fe573c6ed0c03ab9b84e631cbfa49bddf6e20e # v1.47.3
with:
target: aarch64
args: --release --locked --out dist --features self-update
@@ -193,7 +193,7 @@ jobs:
# uv-build
- name: "Build wheels uv-build - aarch64"
uses: PyO3/maturin-action@36db84001d74475ad1b8e6613557ae4ee2dc3598 # v1.47.2
uses: PyO3/maturin-action@22fe573c6ed0c03ab9b84e631cbfa49bddf6e20e # v1.47.3
with:
target: aarch64
args: --profile minimal-size --locked --out crates/uv-build/dist -m crates/uv-build/Cargo.toml
@@ -231,7 +231,7 @@ jobs:

# uv
- name: "Build wheels"
uses: PyO3/maturin-action@36db84001d74475ad1b8e6613557ae4ee2dc3598 # v1.47.2
uses: PyO3/maturin-action@22fe573c6ed0c03ab9b84e631cbfa49bddf6e20e # v1.47.3
with:
target: ${{ matrix.platform.target }}
args: --release --locked --out dist --features self-update
@@ -265,7 +265,7 @@ jobs:
# uv-build
- name: "Build wheels uv-build"
uses: PyO3/maturin-action@36db84001d74475ad1b8e6613557ae4ee2dc3598 # v1.47.2
uses: PyO3/maturin-action@22fe573c6ed0c03ab9b84e631cbfa49bddf6e20e # v1.47.3
with:
target: ${{ matrix.platform.target }}
args: --profile minimal-size --locked --out crates/uv-build/dist -m crates/uv-build/Cargo.toml
@@ -287,9 +287,9 @@ jobs:
runs-on: depot-ubuntu-latest-4
strategy:
matrix:
target:
- x86_64-unknown-linux-gnu
- i686-unknown-linux-gnu
include:
- { target: "i686-unknown-linux-gnu", cc: "gcc -m32" }
- { target: "x86_64-unknown-linux-gnu", cc: "gcc" }
steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- uses: actions/setup-python@42375524e23c412d93fb67b49958b491fce71c38 # v5
@@ -301,13 +301,19 @@ jobs:

# uv
- name: "Build wheels"
uses: PyO3/maturin-action@36db84001d74475ad1b8e6613557ae4ee2dc3598 # v1.47.2
uses: PyO3/maturin-action@22fe573c6ed0c03ab9b84e631cbfa49bddf6e20e # v1.47.3
with:
target: ${{ matrix.target }}
# Generally, we try to build in a target docker container. In this case however, a
# 32-bit compiler runs out of memory (4GB memory limit for 32-bit), so we cross compile
# from 64-bit version of the container, breaking the pattern from other builds.
container: quay.io/pypa/manylinux2014
manylinux: auto
args: --release --locked --out dist --features self-update
# See: https://github.com/sfackler/rust-openssl/issues/2036#issuecomment-1724324145
before-script-linux: |
# Install the 32-bit cross target on 64-bit (noop if we're already on 64-bit)
rustup target add ${{ matrix.target }}
# If we're running on rhel centos, install needed packages.
if command -v yum &> /dev/null; then
yum update -y && yum install -y perl-core openssl openssl-devel pkgconfig libatomic
@@ -316,11 +322,16 @@ jobs:
# in order to build openssl with -latomic flag.
if [[ ! -d "/usr/lib64" ]]; then
ln -s /usr/lib/libatomic.so.1 /usr/lib/libatomic.so
else
# Support cross-compiling from 64-bit to 32-bit
yum install -y glibc-devel.i686 libstdc++-devel.i686
fi
else
# If we're running on debian-based system.
apt update -y && apt-get install -y libssl-dev openssl pkg-config
fi
env:
CC: ${{ matrix.cc }}
- name: "Test wheel"
if: ${{ startsWith(matrix.target, 'x86_64') }}
run: |
@@ -355,7 +366,7 @@ jobs:
# uv-build
- name: "Build wheels uv-build"
uses: PyO3/maturin-action@36db84001d74475ad1b8e6613557ae4ee2dc3598 # v1.47.2
uses: PyO3/maturin-action@22fe573c6ed0c03ab9b84e631cbfa49bddf6e20e # v1.47.3
with:
target: ${{ matrix.target }}
manylinux: auto
@@ -399,7 +410,7 @@ jobs:

# uv
- name: "Build wheels"
uses: PyO3/maturin-action@36db84001d74475ad1b8e6613557ae4ee2dc3598 # v1.47.2
uses: PyO3/maturin-action@22fe573c6ed0c03ab9b84e631cbfa49bddf6e20e # v1.47.3
with:
target: ${{ matrix.platform.target }}
# On `aarch64`, use `manylinux: 2_28`; otherwise, use `manylinux: auto`.
@@ -449,7 +460,7 @@ jobs:
# uv-build
- name: "Build wheels uv-build"
uses: PyO3/maturin-action@36db84001d74475ad1b8e6613557ae4ee2dc3598 # v1.47.2
uses: PyO3/maturin-action@22fe573c6ed0c03ab9b84e631cbfa49bddf6e20e # v1.47.3
with:
target: ${{ matrix.platform.target }}
# On `aarch64`, use `manylinux: 2_28`; otherwise, use `manylinux: auto`.
@@ -498,7 +509,7 @@ jobs:

# uv
- name: "Build wheels"
uses: PyO3/maturin-action@36db84001d74475ad1b8e6613557ae4ee2dc3598 # v1.47.2
uses: PyO3/maturin-action@22fe573c6ed0c03ab9b84e631cbfa49bddf6e20e # v1.47.3
with:
target: ${{ matrix.platform.target }}
manylinux: auto
@@ -548,7 +559,7 @@ jobs:
# uv-build
- name: "Build wheels uv-build"
uses: PyO3/maturin-action@36db84001d74475ad1b8e6613557ae4ee2dc3598 # v1.47.2
uses: PyO3/maturin-action@22fe573c6ed0c03ab9b84e631cbfa49bddf6e20e # v1.47.3
with:
target: ${{ matrix.platform.target }}
manylinux: auto
@@ -602,7 +613,7 @@ jobs:

# uv
- name: "Build wheels"
uses: PyO3/maturin-action@36db84001d74475ad1b8e6613557ae4ee2dc3598 # v1.47.2
uses: PyO3/maturin-action@22fe573c6ed0c03ab9b84e631cbfa49bddf6e20e # v1.47.3
with:
target: ${{ matrix.platform.target }}
manylinux: auto
@@ -660,7 +671,7 @@ jobs:
# uv-build
- name: "Build wheels uv-build"
uses: PyO3/maturin-action@36db84001d74475ad1b8e6613557ae4ee2dc3598 # v1.47.2
uses: PyO3/maturin-action@22fe573c6ed0c03ab9b84e631cbfa49bddf6e20e # v1.47.3
with:
target: ${{ matrix.platform.target }}
manylinux: auto
@@ -699,7 +710,7 @@ jobs:

# uv
- name: "Build wheels"
uses: PyO3/maturin-action@36db84001d74475ad1b8e6613557ae4ee2dc3598 # v1.47.2
uses: PyO3/maturin-action@22fe573c6ed0c03ab9b84e631cbfa49bddf6e20e # v1.47.3
with:
target: ${{ matrix.target }}
manylinux: musllinux_1_1
@@ -746,7 +757,7 @@ jobs:
# uv-build
- name: "Build wheels uv-build"
uses: PyO3/maturin-action@36db84001d74475ad1b8e6613557ae4ee2dc3598 # v1.47.2
uses: PyO3/maturin-action@22fe573c6ed0c03ab9b84e631cbfa49bddf6e20e # v1.47.3
with:
target: ${{ matrix.target }}
manylinux: musllinux_1_1
@@ -793,7 +804,7 @@ jobs:

# uv
- name: "Build wheels"
uses: PyO3/maturin-action@36db84001d74475ad1b8e6613557ae4ee2dc3598 # v1.47.2
uses: PyO3/maturin-action@22fe573c6ed0c03ab9b84e631cbfa49bddf6e20e # v1.47.3
with:
target: ${{ matrix.platform.target }}
manylinux: musllinux_1_1
@@ -860,7 +871,7 @@ jobs:
# uv-build
- name: "Build wheels"
uses: PyO3/maturin-action@36db84001d74475ad1b8e6613557ae4ee2dc3598 # v1.47.2
uses: PyO3/maturin-action@22fe573c6ed0c03ab9b84e631cbfa49bddf6e20e # v1.47.3
with:
target: ${{ matrix.platform.target }}
manylinux: musllinux_1_1
Loading