From 37e22e4da60e348fea2b0debd408b5762fd9c872 Mon Sep 17 00:00:00 2001
From: Zanie Blue
Date: Tue, 3 Jun 2025 11:08:09 -0500
Subject: [PATCH 001/250] Remove `python-managed` marker from `sync_dry_run`
test (#13816)
Not sure why this is present, it does not seem to use a managed
interpreter
---
crates/uv/tests/it/sync.rs | 1 -
1 file changed, 1 deletion(-)
diff --git a/crates/uv/tests/it/sync.rs b/crates/uv/tests/it/sync.rs
index 4d3264e01..0fa6224ef 100644
--- a/crates/uv/tests/it/sync.rs
+++ b/crates/uv/tests/it/sync.rs
@@ -7767,7 +7767,6 @@ fn find_links_relative_in_config_works_from_subdir() -> Result<()> {
}
#[test]
-#[cfg(feature = "python-managed")]
fn sync_dry_run() -> Result<()> {
let context = TestContext::new_with_versions(&["3.8", "3.12"]);
From f9d3f24728d34e73cb0b01570ffd389dd2c1f92f Mon Sep 17 00:00:00 2001
From: Hood Chatham
Date: Tue, 3 Jun 2025 10:01:26 -0700
Subject: [PATCH 002/250] Add Pyodide support (#12731)
This includes some initial work on adding Pyodide support (issue
#12729). It is enough to get
```
uv pip compile -p /path/to/pyodide --extra-index-url file:/path/to/simple-index
```
to work which should already be quite useful.
## Test Plan
* added a unit test for `pyodide_platform`
* integration tested manually with:
```
cargo run pip install \
-p /home/rchatham/Documents/programming/tmp/pyodide-venv-test/.pyodide-xbuildenv-0.29.3/0.27.4/xbuildenv/pyodide-root/dist/python \
--extra-index-url file:/home/rchatham/Documents/programming/tmp/pyodide-venv-test/.pyodide-xbuildenv-0.29.3/0.27.4/xbuildenv/pyodide-root/package_index \
--index-strategy unsafe-best-match --target blah --no-build \
numpy pydantic
```
---------
Co-authored-by: konsti
Co-authored-by: Zanie Blue
---
.github/workflows/ci.yml | 39 ++++++++++++++
crates/uv-configuration/src/target_triple.rs | 23 ++++++++
crates/uv-platform-tags/src/platform.rs | 7 ++-
crates/uv-platform-tags/src/platform_tag.rs | 54 +++++++++++++++++++
crates/uv-platform-tags/src/tags.rs | 6 +++
.../uv-python/python/get_interpreter_info.py | 18 +++++++
crates/uv-python/src/interpreter.rs | 2 +
crates/uv-python/src/platform.rs | 7 +++
crates/uv-torch/src/backend.rs | 3 +-
docs/reference/cli.md | 4 ++
uv.schema.json | 7 +++
11 files changed, 168 insertions(+), 2 deletions(-)
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index c5b14ab65..5463294cc 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -1294,6 +1294,45 @@ jobs:
run: |
.\uv.exe pip install anyio
+ integration-test-pyodide-linux:
+ timeout-minutes: 10
+ needs: build-binary-linux-libc
+ name: "integration test | pyodide on ubuntu"
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
+
+ - name: "Download binary"
+ uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0
+ with:
+ name: uv-linux-libc-${{ github.sha }}
+
+ - name: "Prepare binary"
+ run: chmod +x ./uv
+
+ - name: "Create a native virtual environment"
+ run: |
+ ./uv venv venv-native -p 3.12
+ # We use features added in 0.30.3 but there is no known breakage in
+ # newer versions.
+ ./uv pip install -p venv-native/bin/python pyodide-build==0.30.3 pip
+
+ - name: "Install pyodide interpreter"
+ run: |
+ source ./venv-native/bin/activate
+ pyodide xbuildenv install 0.27.5
+ PYODIDE_PYTHON=$(pyodide config get interpreter)
+ PYODIDE_INDEX=$(pyodide config get package_index)
+ echo "PYODIDE_PYTHON=$PYODIDE_PYTHON" >> $GITHUB_ENV
+ echo "PYODIDE_INDEX=$PYODIDE_INDEX" >> $GITHUB_ENV
+
+ - name: "Create pyodide virtual environment"
+ run: |
+ ./uv venv -p $PYODIDE_PYTHON venv-pyodide
+ source ./venv-pyodide/bin/activate
+ ./uv pip install --extra-index-url=$PYODIDE_INDEX --no-build numpy
+ python -c 'import numpy'
+
integration-test-github-actions:
timeout-minutes: 10
needs: build-binary-linux-libc
diff --git a/crates/uv-configuration/src/target_triple.rs b/crates/uv-configuration/src/target_triple.rs
index c0c651409..b9ca3fafe 100644
--- a/crates/uv-configuration/src/target_triple.rs
+++ b/crates/uv-configuration/src/target_triple.rs
@@ -226,6 +226,10 @@ pub enum TargetTriple {
#[serde(rename = "aarch64-manylinux_2_40")]
#[serde(alias = "aarch64-manylinux240")]
Aarch64Manylinux240,
+
+ /// A wasm32 target using the the Pyodide 2024 platform. Meant for use with Python 3.12.
+ #[cfg_attr(feature = "clap", value(name = "wasm32-pyodide2024"))]
+ Wasm32Pyodide2024,
}
impl TargetTriple {
@@ -450,6 +454,13 @@ impl TargetTriple {
},
Arch::Aarch64,
),
+ Self::Wasm32Pyodide2024 => Platform::new(
+ Os::Pyodide {
+ major: 2024,
+ minor: 0,
+ },
+ Arch::Wasm32,
+ ),
}
}
@@ -490,6 +501,7 @@ impl TargetTriple {
Self::Aarch64Manylinux238 => "aarch64",
Self::Aarch64Manylinux239 => "aarch64",
Self::Aarch64Manylinux240 => "aarch64",
+ Self::Wasm32Pyodide2024 => "wasm32",
}
}
@@ -530,6 +542,7 @@ impl TargetTriple {
Self::Aarch64Manylinux238 => "Linux",
Self::Aarch64Manylinux239 => "Linux",
Self::Aarch64Manylinux240 => "Linux",
+ Self::Wasm32Pyodide2024 => "Emscripten",
}
}
@@ -570,6 +583,10 @@ impl TargetTriple {
Self::Aarch64Manylinux238 => "",
Self::Aarch64Manylinux239 => "",
Self::Aarch64Manylinux240 => "",
+ // This is the value Emscripten gives for its version:
+ // https://github.com/emscripten-core/emscripten/blob/4.0.8/system/lib/libc/emscripten_syscall_stubs.c#L63
+ // It doesn't really seem to mean anything? But for completeness we include it here.
+ Self::Wasm32Pyodide2024 => "#1",
}
}
@@ -610,6 +627,9 @@ impl TargetTriple {
Self::Aarch64Manylinux238 => "",
Self::Aarch64Manylinux239 => "",
Self::Aarch64Manylinux240 => "",
+ // This is the Emscripten compiler version for Pyodide 2024.
+ // See https://pyodide.org/en/stable/development/abi.html#pyodide-2024-0
+ Self::Wasm32Pyodide2024 => "3.1.58",
}
}
@@ -650,6 +670,7 @@ impl TargetTriple {
Self::Aarch64Manylinux238 => "posix",
Self::Aarch64Manylinux239 => "posix",
Self::Aarch64Manylinux240 => "posix",
+ Self::Wasm32Pyodide2024 => "posix",
}
}
@@ -690,6 +711,7 @@ impl TargetTriple {
Self::Aarch64Manylinux238 => "linux",
Self::Aarch64Manylinux239 => "linux",
Self::Aarch64Manylinux240 => "linux",
+ Self::Wasm32Pyodide2024 => "emscripten",
}
}
@@ -730,6 +752,7 @@ impl TargetTriple {
Self::Aarch64Manylinux238 => true,
Self::Aarch64Manylinux239 => true,
Self::Aarch64Manylinux240 => true,
+ Self::Wasm32Pyodide2024 => false,
}
}
diff --git a/crates/uv-platform-tags/src/platform.rs b/crates/uv-platform-tags/src/platform.rs
index c2b849e0f..88c36714b 100644
--- a/crates/uv-platform-tags/src/platform.rs
+++ b/crates/uv-platform-tags/src/platform.rs
@@ -43,6 +43,7 @@ pub enum Os {
Manylinux { major: u16, minor: u16 },
Musllinux { major: u16, minor: u16 },
Windows,
+ Pyodide { major: u16, minor: u16 },
Macos { major: u16, minor: u16 },
FreeBsd { release: String },
NetBsd { release: String },
@@ -67,6 +68,7 @@ impl fmt::Display for Os {
Self::Illumos { .. } => write!(f, "illumos"),
Self::Haiku { .. } => write!(f, "haiku"),
Self::Android { .. } => write!(f, "android"),
+ Self::Pyodide { .. } => write!(f, "pyodide"),
}
}
}
@@ -109,6 +111,7 @@ pub enum Arch {
S390X,
LoongArch64,
Riscv64,
+ Wasm32,
}
impl fmt::Display for Arch {
@@ -126,6 +129,7 @@ impl fmt::Display for Arch {
Self::S390X => write!(f, "s390x"),
Self::LoongArch64 => write!(f, "loongarch64"),
Self::Riscv64 => write!(f, "riscv64"),
+ Self::Wasm32 => write!(f, "wasm32"),
}
}
}
@@ -168,7 +172,7 @@ impl Arch {
// manylinux_2_36
Self::LoongArch64 => Some(36),
// unsupported
- Self::Powerpc | Self::Armv5TEL | Self::Armv6L => None,
+ Self::Powerpc | Self::Armv5TEL | Self::Armv6L | Self::Wasm32 => None,
}
}
@@ -187,6 +191,7 @@ impl Arch {
Self::S390X => "s390x",
Self::LoongArch64 => "loongarch64",
Self::Riscv64 => "riscv64",
+ Self::Wasm32 => "wasm32",
}
}
diff --git a/crates/uv-platform-tags/src/platform_tag.rs b/crates/uv-platform-tags/src/platform_tag.rs
index 0ba46200d..1162a83d7 100644
--- a/crates/uv-platform-tags/src/platform_tag.rs
+++ b/crates/uv-platform-tags/src/platform_tag.rs
@@ -71,6 +71,8 @@ pub enum PlatformTag {
Illumos { release_arch: SmallString },
/// Ex) `solaris_11_4_x86_64`
Solaris { release_arch: SmallString },
+ /// Ex) `pyodide_2024_0_wasm32`
+ Pyodide { major: u16, minor: u16 },
}
impl PlatformTag {
@@ -97,6 +99,7 @@ impl PlatformTag {
PlatformTag::Haiku { .. } => Some("Haiku"),
PlatformTag::Illumos { .. } => Some("Illumos"),
PlatformTag::Solaris { .. } => Some("Solaris"),
+ PlatformTag::Pyodide { .. } => Some("Pyodide"),
}
}
}
@@ -262,6 +265,7 @@ impl std::fmt::Display for PlatformTag {
Self::Haiku { release_arch } => write!(f, "haiku_{release_arch}"),
Self::Illumos { release_arch } => write!(f, "illumos_{release_arch}"),
Self::Solaris { release_arch } => write!(f, "solaris_{release_arch}_64bit"),
+ Self::Pyodide { major, minor } => write!(f, "pyodide_{major}_{minor}_wasm32"),
}
}
}
@@ -616,6 +620,35 @@ impl FromStr for PlatformTag {
});
}
+ if let Some(rest) = s.strip_prefix("pyodide_") {
+ let mid =
+ rest.strip_suffix("_wasm32")
+ .ok_or_else(|| ParsePlatformTagError::InvalidArch {
+ platform: "pyodide",
+ tag: s.to_string(),
+ })?;
+ let underscore = memchr::memchr(b'_', mid.as_bytes()).ok_or_else(|| {
+ ParsePlatformTagError::InvalidFormat {
+ platform: "pyodide",
+ tag: s.to_string(),
+ }
+ })?;
+ let major: u16 = mid[..underscore].parse().map_err(|_| {
+ ParsePlatformTagError::InvalidMajorVersion {
+ platform: "pyodide",
+ tag: s.to_string(),
+ }
+ })?;
+
+ let minor: u16 = mid[underscore + 1..].parse().map_err(|_| {
+ ParsePlatformTagError::InvalidMinorVersion {
+ platform: "pyodide",
+ tag: s.to_string(),
+ }
+ })?;
+ return Ok(Self::Pyodide { major, minor });
+ }
+
Err(ParsePlatformTagError::UnknownFormat(s.to_string()))
}
}
@@ -900,6 +933,27 @@ mod tests {
);
}
+ #[test]
+ fn pyodide_platform() {
+ let tag = PlatformTag::Pyodide {
+ major: 2024,
+ minor: 0,
+ };
+ assert_eq!(
+ PlatformTag::from_str("pyodide_2024_0_wasm32").as_ref(),
+ Ok(&tag)
+ );
+ assert_eq!(tag.to_string(), "pyodide_2024_0_wasm32");
+
+ assert_eq!(
+ PlatformTag::from_str("pyodide_2024_0_wasm64"),
+ Err(ParsePlatformTagError::InvalidArch {
+ platform: "pyodide",
+ tag: "pyodide_2024_0_wasm64".to_string()
+ })
+ );
+ }
+
#[test]
fn unknown_platform() {
assert_eq!(
diff --git a/crates/uv-platform-tags/src/tags.rs b/crates/uv-platform-tags/src/tags.rs
index 1e20c348c..7381f5dd5 100644
--- a/crates/uv-platform-tags/src/tags.rs
+++ b/crates/uv-platform-tags/src/tags.rs
@@ -617,6 +617,12 @@ fn compatible_tags(platform: &Platform) -> Result, PlatformErro
arch,
}]
}
+ (Os::Pyodide { major, minor }, Arch::Wasm32) => {
+ vec![PlatformTag::Pyodide {
+ major: *major,
+ minor: *minor,
+ }]
+ }
_ => {
return Err(PlatformError::OsVersionDetectionError(format!(
"Unsupported operating system and architecture combination: {os} {arch}"
diff --git a/crates/uv-python/python/get_interpreter_info.py b/crates/uv-python/python/get_interpreter_info.py
index 2b1ee09cc..0fe088819 100644
--- a/crates/uv-python/python/get_interpreter_info.py
+++ b/crates/uv-python/python/get_interpreter_info.py
@@ -510,6 +510,24 @@ def get_operating_system_and_architecture():
"major": int(version[0]),
"minor": int(version[1]),
}
+ elif operating_system == "emscripten":
+ pyodide_abi_version = sysconfig.get_config_var("PYODIDE_ABI_VERSION")
+ if not pyodide_abi_version:
+ print(
+ json.dumps(
+ {
+ "result": "error",
+ "kind": "emscripten_not_pyodide",
+ }
+ )
+ )
+ sys.exit(0)
+ version = pyodide_abi_version.split("_")
+ operating_system = {
+ "name": "pyodide",
+ "major": int(version[0]),
+ "minor": int(version[1]),
+ }
elif operating_system in [
"freebsd",
"netbsd",
diff --git a/crates/uv-python/src/interpreter.rs b/crates/uv-python/src/interpreter.rs
index 2f85fa042..4d6f1f81d 100644
--- a/crates/uv-python/src/interpreter.rs
+++ b/crates/uv-python/src/interpreter.rs
@@ -757,6 +757,8 @@ pub enum InterpreterInfoError {
python_major: usize,
python_minor: usize,
},
+ #[error("Only Pyodide is support for Emscripten Python")]
+ EmscriptenNotPyodide,
}
#[derive(Debug, Deserialize, Serialize, Clone)]
diff --git a/crates/uv-python/src/platform.rs b/crates/uv-python/src/platform.rs
index 1ccb0832e..025592c37 100644
--- a/crates/uv-python/src/platform.rs
+++ b/crates/uv-python/src/platform.rs
@@ -348,6 +348,10 @@ impl From<&uv_platform_tags::Arch> for Arch {
),
variant: None,
},
+ uv_platform_tags::Arch::Wasm32 => Self {
+ family: target_lexicon::Architecture::Wasm32,
+ variant: None,
+ },
}
}
}
@@ -380,6 +384,9 @@ impl From<&uv_platform_tags::Os> for Os {
uv_platform_tags::Os::NetBsd { .. } => Self(target_lexicon::OperatingSystem::Netbsd),
uv_platform_tags::Os::OpenBsd { .. } => Self(target_lexicon::OperatingSystem::Openbsd),
uv_platform_tags::Os::Windows => Self(target_lexicon::OperatingSystem::Windows),
+ uv_platform_tags::Os::Pyodide { .. } => {
+ Self(target_lexicon::OperatingSystem::Emscripten)
+ }
}
}
}
diff --git a/crates/uv-torch/src/backend.rs b/crates/uv-torch/src/backend.rs
index d3e5afc55..0df5bd844 100644
--- a/crates/uv-torch/src/backend.rs
+++ b/crates/uv-torch/src/backend.rs
@@ -220,7 +220,8 @@ impl TorchStrategy {
| Os::Dragonfly { .. }
| Os::Illumos { .. }
| Os::Haiku { .. }
- | Os::Android { .. } => {
+ | Os::Android { .. }
+ | Os::Pyodide { .. } => {
Either::Right(std::iter::once(TorchBackend::Cpu.index_url()))
}
}
diff --git a/docs/reference/cli.md b/docs/reference/cli.md
index ad0fce937..b7e41728a 100644
--- a/docs/reference/cli.md
+++ b/docs/reference/cli.md
@@ -1702,6 +1702,7 @@ interpreter. Use --universal
to display the tree for all platforms,
aarch64-manylinux_2_38
: An ARM64 target for the manylinux_2_38
platform
aarch64-manylinux_2_39
: An ARM64 target for the manylinux_2_39
platform
aarch64-manylinux_2_40
: An ARM64 target for the manylinux_2_40
platform
+wasm32-pyodide2024
: A wasm32 target using the the Pyodide 2024 platform. Meant for use with Python 3.12
--python-version
python-version The Python version to use when filtering the tree.
For example, pass --python-version 3.10
to display the dependencies that would be included when installing on Python 3.10.
Defaults to the version of the discovered Python interpreter.
@@ -3295,6 +3296,7 @@ by --python-version
.
aarch64-manylinux_2_38
: An ARM64 target for the manylinux_2_38
platform
aarch64-manylinux_2_39
: An ARM64 target for the manylinux_2_39
platform
aarch64-manylinux_2_40
: An ARM64 target for the manylinux_2_40
platform
+wasm32-pyodide2024
: A wasm32 target using the the Pyodide 2024 platform. Meant for use with Python 3.12
--python-version
python-version The Python version to use for resolution.
For example, 3.8
or 3.8.17
.
Defaults to the version of the Python interpreter used for resolution.
@@ -3533,6 +3535,7 @@ be used with caution, as it can modify the system Python installation.
aarch64-manylinux_2_38
: An ARM64 target for the manylinux_2_38
platform
aarch64-manylinux_2_39
: An ARM64 target for the manylinux_2_39
platform
aarch64-manylinux_2_40
: An ARM64 target for the manylinux_2_40
platform
+wasm32-pyodide2024
: A wasm32 target using the the Pyodide 2024 platform. Meant for use with Python 3.12
--python-version
python-version The minimum Python version that should be supported by the requirements (e.g., 3.7
or 3.7.9
).
If a patch version is omitted, the minimum patch version is assumed. For example, 3.7
is mapped to 3.7.0
.
--quiet
, -q
Use quiet output.
@@ -3796,6 +3799,7 @@ should be used with caution, as it can modify the system Python installation.aarch64-manylinux_2_38
: An ARM64 target for the manylinux_2_38
platform
aarch64-manylinux_2_39
: An ARM64 target for the manylinux_2_39
platform
aarch64-manylinux_2_40
: An ARM64 target for the manylinux_2_40
platform
+wasm32-pyodide2024
: A wasm32 target using the the Pyodide 2024 platform. Meant for use with Python 3.12
--python-version
python-version The minimum Python version that should be supported by the requirements (e.g., 3.7
or 3.7.9
).
If a patch version is omitted, the minimum patch version is assumed. For example, 3.7
is mapped to 3.7.0
.
--quiet
, -q
Use quiet output.
diff --git a/uv.schema.json b/uv.schema.json
index 54d5a0c74..19a6bf4bd 100644
--- a/uv.schema.json
+++ b/uv.schema.json
@@ -2338,6 +2338,13 @@
"enum": [
"aarch64-manylinux_2_40"
]
+ },
+ {
+ "description": "A wasm32 target using the the Pyodide 2024 platform. Meant for use with Python 3.12.",
+ "type": "string",
+ "enum": [
+ "wasm32-pyodide2024"
+ ]
}
]
},
From f5c360144504b121bab6cd233e1d127f76f82580 Mon Sep 17 00:00:00 2001
From: Jacob Woliver
Date: Tue, 3 Jun 2025 15:18:19 -0400
Subject: [PATCH 003/250] Better error message for version specifier with
missing operator (#13803)
## Summary
When missing an operator for version parsing, it would give an error
that was hard to know how to fix if you were not familiar with version
specifiers / PEP-440:
```
Unexpected end of version specifier, expected operator
```
Now, it will attempt to provide a more useful hint if it can parse the
version from the remaining scanner:
```
Unexpected end of version specifier, expected operator (did you mean "==3.12"?)
```
## Test Plan
Unit tests in `version_specifier.rs` were added/updated for the
following cases:
- `test_parse_specifier_missing_operator_error`
- `test_parse_specifier_missing_operator_invalid_version_error`
- `test_invalid_word`
- `test_invalid_specifier`
- `error_message_version_specifiers_parse_error`
A test in `edit.rs` for failing to parse the `pyproject.toml` when using
`add` was also included to match the request in the original issue:
- `add_invalid_requires_python`
I didn't add cases where no version specifier is provided because it
seemed like it doesn't get to the point of parsing in that case, so it
should not happen.
## Reference
Fixes #13126
---------
Co-authored-by: Jacob Woliver
Co-authored-by: konstin
---
crates/uv-pep440/src/version_specifier.rs | 80 ++++++++++++++++++++---
crates/uv/tests/it/edit.rs | 35 ++++++++++
crates/uv/tests/it/pip_compile.rs | 2 +-
3 files changed, 107 insertions(+), 10 deletions(-)
diff --git a/crates/uv-pep440/src/version_specifier.rs b/crates/uv-pep440/src/version_specifier.rs
index 47bde78b7..4255c13fa 100644
--- a/crates/uv-pep440/src/version_specifier.rs
+++ b/crates/uv-pep440/src/version_specifier.rs
@@ -627,7 +627,15 @@ impl FromStr for VersionSpecifier {
// operator but we don't know yet if it has a star
let operator = s.eat_while(['=', '!', '~', '<', '>']);
if operator.is_empty() {
- return Err(ParseErrorKind::MissingOperator.into());
+ // Attempt to parse the version from the rest of the scanner to provide a more useful error message in MissingOperator.
+ // If it is not able to be parsed (i.e. not a valid version), it will just be None and no additional info will be added to the error message.
+ s.eat_while(|c: char| c.is_whitespace());
+ let version = s.eat_while(|c: char| !c.is_whitespace());
+ s.eat_while(|c: char| c.is_whitespace());
+ return Err(ParseErrorKind::MissingOperator(VersionOperatorBuildError {
+ version_pattern: VersionPattern::from_str(version).ok(),
+ })
+ .into());
}
let operator = Operator::from_str(operator).map_err(ParseErrorKind::InvalidOperator)?;
s.eat_while(|c: char| c.is_whitespace());
@@ -695,6 +703,25 @@ impl std::fmt::Display for VersionSpecifierBuildError {
}
}
+#[derive(Clone, Debug, Eq, PartialEq)]
+struct VersionOperatorBuildError {
+ version_pattern: Option,
+}
+
+impl std::error::Error for VersionOperatorBuildError {}
+
+impl std::fmt::Display for VersionOperatorBuildError {
+ fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
+ write!(f, "Unexpected end of version specifier, expected operator")?;
+ if let Some(version_pattern) = &self.version_pattern {
+ let version_specifier =
+ VersionSpecifier::from_pattern(Operator::Equal, version_pattern.clone()).unwrap();
+ write!(f, ". Did you mean `{version_specifier}`?")?;
+ }
+ Ok(())
+ }
+}
+
/// The specific kind of error that can occur when building a version specifier
/// from an operator and version pair.
#[derive(Clone, Debug, Eq, PartialEq)]
@@ -748,9 +775,7 @@ impl std::fmt::Display for VersionSpecifierParseError {
ParseErrorKind::InvalidOperator(ref err) => err.fmt(f),
ParseErrorKind::InvalidVersion(ref err) => err.fmt(f),
ParseErrorKind::InvalidSpecifier(ref err) => err.fmt(f),
- ParseErrorKind::MissingOperator => {
- write!(f, "Unexpected end of version specifier, expected operator")
- }
+ ParseErrorKind::MissingOperator(ref err) => err.fmt(f),
ParseErrorKind::MissingVersion => {
write!(f, "Unexpected end of version specifier, expected version")
}
@@ -768,7 +793,7 @@ enum ParseErrorKind {
InvalidOperator(OperatorParseError),
InvalidVersion(VersionPatternParseError),
InvalidSpecifier(VersionSpecifierBuildError),
- MissingOperator,
+ MissingOperator(VersionOperatorBuildError),
MissingVersion,
InvalidTrailing(String),
}
@@ -1356,6 +1381,32 @@ mod tests {
);
}
+ #[test]
+ fn test_parse_specifier_missing_operator_error() {
+ let result = VersionSpecifiers::from_str("3.12");
+ assert_eq!(
+ result.unwrap_err().to_string(),
+ indoc! {"
+ Failed to parse version: Unexpected end of version specifier, expected operator. Did you mean `==3.12`?:
+ 3.12
+ ^^^^
+ "}
+ );
+ }
+
+ #[test]
+ fn test_parse_specifier_missing_operator_invalid_version_error() {
+ let result = VersionSpecifiers::from_str("blergh");
+ assert_eq!(
+ result.unwrap_err().to_string(),
+ indoc! {r"
+ Failed to parse version: Unexpected end of version specifier, expected operator:
+ blergh
+ ^^^^^^
+ "}
+ );
+ }
+
#[test]
fn test_non_star_after_star() {
let result = VersionSpecifiers::from_str("== 0.9.*.1");
@@ -1386,7 +1437,10 @@ mod tests {
let result = VersionSpecifiers::from_str("blergh");
assert_eq!(
result.unwrap_err().inner.err,
- ParseErrorKind::MissingOperator.into(),
+ ParseErrorKind::MissingOperator(VersionOperatorBuildError {
+ version_pattern: None
+ })
+ .into(),
);
}
@@ -1395,7 +1449,13 @@ mod tests {
fn test_invalid_specifier() {
let specifiers = [
// Operator-less specifier
- ("2.0", ParseErrorKind::MissingOperator.into()),
+ (
+ "2.0",
+ ParseErrorKind::MissingOperator(VersionOperatorBuildError {
+ version_pattern: VersionPattern::from_str("2.0").ok(),
+ })
+ .into(),
+ ),
// Invalid operator
(
"=>2.0",
@@ -1735,7 +1795,9 @@ mod tests {
fn error_message_version_specifiers_parse_error() {
let specs = ">=1.2.3, 5.4.3, >=3.4.5";
let err = VersionSpecifierParseError {
- kind: Box::new(ParseErrorKind::MissingOperator),
+ kind: Box::new(ParseErrorKind::MissingOperator(VersionOperatorBuildError {
+ version_pattern: VersionPattern::from_str("5.4.3").ok(),
+ })),
};
let inner = Box::new(VersionSpecifiersParseErrorInner {
err,
@@ -1748,7 +1810,7 @@ mod tests {
assert_eq!(
err.to_string(),
"\
-Failed to parse version: Unexpected end of version specifier, expected operator:
+Failed to parse version: Unexpected end of version specifier, expected operator. Did you mean `==5.4.3`?:
>=1.2.3, 5.4.3, >=3.4.5
^^^^^^
"
diff --git a/crates/uv/tests/it/edit.rs b/crates/uv/tests/it/edit.rs
index 5f0f2d260..e620eb850 100644
--- a/crates/uv/tests/it/edit.rs
+++ b/crates/uv/tests/it/edit.rs
@@ -11408,6 +11408,41 @@ fn add_invalid_ignore_error_code() -> Result<()> {
Ok(())
}
+/// uv should fail to parse `pyproject.toml` if `require-python`
+/// contains an invalid specifier and try to return a helpful hint.
+#[test]
+fn add_invalid_requires_python() -> Result<()> {
+ let context = TestContext::new("3.12");
+
+ let pyproject_toml = context.temp_dir.child("pyproject.toml");
+ pyproject_toml.write_str(indoc! { r#"
+ [project]
+ name = "foo"
+ version = "1.0.0"
+ requires-python = "3.12"
+ dependencies = []
+ "#
+ })?;
+
+ uv_snapshot!(context.add().arg("anyio"), @r#"
+ success: false
+ exit_code: 2
+ ----- stdout -----
+
+ ----- stderr -----
+ error: Failed to parse: `pyproject.toml`
+ Caused by: TOML parse error at line 4, column 19
+ |
+ 4 | requires-python = "3.12"
+ | ^^^^^^
+ Failed to parse version: Unexpected end of version specifier, expected operator. Did you mean `==3.12`?:
+ 3.12
+ ^^^^
+ "#);
+
+ Ok(())
+}
+
/// In authentication "always", the normal authentication flow should still work.
#[test]
fn add_auth_policy_always_with_credentials() -> Result<()> {
diff --git a/crates/uv/tests/it/pip_compile.rs b/crates/uv/tests/it/pip_compile.rs
index 93ed41d01..b63a8b37c 100644
--- a/crates/uv/tests/it/pip_compile.rs
+++ b/crates/uv/tests/it/pip_compile.rs
@@ -6961,7 +6961,7 @@ fn invalid_metadata_requires_python() -> Result<()> {
╰─▶ Because validation==2.0.0 has invalid metadata and you require validation==2.0.0, we can conclude that your requirements are unsatisfiable.
hint: Metadata for `validation` (v2.0.0) could not be parsed:
- Failed to parse version: Unexpected end of version specifier, expected operator:
+ Failed to parse version: Unexpected end of version specifier, expected operator. Did you mean `==12`?:
12
^^
"###
From 3ca8d074a453c55f3f290cd2726a44161dc45370 Mon Sep 17 00:00:00 2001
From: Zanie Blue
Date: Tue, 3 Jun 2025 17:07:03 -0500
Subject: [PATCH 004/250] Use "terminal driver" instead of "shell" in SIGINT
docs (#13787)
Addressing the comment at
https://github.com/astral-sh/uv/issues/12108#issuecomment-2925703719
---
crates/uv/src/commands/run.rs | 52 +++++++++++++++++------------------
docs/concepts/projects/run.md | 6 ++--
2 files changed, 29 insertions(+), 29 deletions(-)
diff --git a/crates/uv/src/commands/run.rs b/crates/uv/src/commands/run.rs
index 4d827d194..8b4ceaf2d 100644
--- a/crates/uv/src/commands/run.rs
+++ b/crates/uv/src/commands/run.rs
@@ -9,33 +9,33 @@ use crate::commands::ExitStatus;
/// long as the command is the last thing that runs in this process; otherwise, we'd need to restore
/// the default signal handlers after the command completes.
pub(crate) async fn run_to_completion(mut handle: Child) -> anyhow::Result {
- // On Unix, shells will send SIGINT to the active process group when a user presses `Ctrl-C`. In
- // general, this means that uv should ignore SIGINT, allowing the child process to cleanly exit
- // instead. If uv forwarded the SIGINT immediately, the child process would receive _two_ SIGINT
- // signals which has semantic meaning for some programs, i.e., slow exit on the first signal and
- // fast exit on the second. The exception to this is if a child process changes its process
- // group, in which case the shell will _not_ send SIGINT to the child process and uv must take
- // ownership of forwarding the signal.
+ // On Unix, the terminal driver will send SIGINT to the active process group when a user presses
+ // `Ctrl-C`. In general, this means that uv should ignore SIGINT, allowing the child process to
+ // cleanly exit instead. If uv forwarded the SIGINT immediately, the child process would receive
+ // _two_ SIGINT signals which has semantic meaning for some programs, i.e., slow exit on the
+ // first signal and fast exit on the second. The exception to this is if a child process changes
+ // its process group, in which case the terminal driver will _not_ send SIGINT to the child
+ // process and uv must take ownership of forwarding the signal.
//
- // Note this assumes an interactive shell. If a signal is sent directly to the uv parent process
- // (e.g., `kill -2 `), the process group is not involved and a signal is not sent to the
- // child by default. In this context, uv must forward the signal to the child. We work around
- // this by forwarding SIGINT if it is received more than once. We could attempt to infer if the
- // parent is a shell using TTY detection(?), but there hasn't been sufficient motivation to
- // explore alternatives yet.
+ // Note this assumes an interactive terminal. If a signal is sent directly to the uv parent
+ // process (e.g., `kill -2 `), the process group is not involved and a signal is not sent
+ // to the child by default. In this context, uv must forward the signal to the child. We work
+ // around this by forwarding SIGINT if it is received more than once. We could attempt to infer
+ // if the parent is a terminal using TTY detection(?), but there hasn't been sufficient
+ // motivation to explore alternatives yet.
//
- // Use of SIGTERM is also a bit complicated. If a shell receives a SIGTERM, it just waits for
+ // Use of SIGTERM is also a bit complicated. If a terminal receives a SIGTERM, it just waits for
// its children to exit — multiple SIGTERMs do not have any effect and the signals are not
// forwarded to the children. Consequently, the description for SIGINT above does not apply to
- // SIGTERM in shells. It is _possible_ to have a parent process that sends a SIGTERM to the
- // process group; for example, `tini` supports this via a `-g` option. In this case, it's
- // possible that uv will improperly send a second SIGTERM to the child process. However,
- // this seems preferable to not forwarding it in the first place. In the Docker case, if `uv`
- // is invoked directly (instead of via an init system), it's PID 1 which has a special-cased
- // default signal handler for SIGTERM by default. Generally, if a process receives a SIGTERM and
- // does not have a SIGTERM handler, it is terminated. However, if PID 1 receives a SIGTERM, it
- // is not terminated. In this context, it is essential for uv to forward the SIGTERM to the
- // child process or the process will not be killable.
+ // SIGTERM in the terminal driver. It is _possible_ to have a parent process that sends a
+ // SIGTERM to the process group; for example, `tini` supports this via a `-g` option. In this
+ // case, it's possible that uv will improperly send a second SIGTERM to the child process.
+ // However, this seems preferable to not forwarding it in the first place. In the Docker case,
+ // if `uv` is invoked directly (instead of via an init system), it's PID 1 which has a
+ // special-cased default signal handler for SIGTERM by default. Generally, if a process receives
+ // a SIGTERM and does not have a SIGTERM handler, it is terminated. However, if PID 1 receives a
+ // SIGTERM, it is not terminated. In this context, it is essential for uv to forward the SIGTERM
+ // to the child process or the process will not be killable.
#[cfg(unix)]
let status = {
use std::ops::Deref;
@@ -162,8 +162,8 @@ pub(crate) async fn run_to_completion(mut handle: Child) -> anyhow::Result anyhow::Result
Date: Wed, 4 Jun 2025 09:57:24 +0200
Subject: [PATCH 005/250] Test case: Don't redact username `git` for SSH
(#13814)
---
Cargo.lock | 18 +++++
crates/uv/Cargo.toml | 1 +
crates/uv/tests/it/common/mod.rs | 2 +
crates/uv/tests/it/export.rs | 120 ++++++++++++++++++++++++++++++-
4 files changed, 140 insertions(+), 1 deletion(-)
diff --git a/Cargo.lock b/Cargo.lock
index c3ebdde47..ac897265f 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -4738,6 +4738,7 @@ dependencies = [
"version-ranges",
"walkdir",
"which",
+ "whoami",
"wiremock",
"zip",
]
@@ -6111,6 +6112,12 @@ dependencies = [
"wit-bindgen-rt",
]
+[[package]]
+name = "wasite"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b8dad83b4f25e74f184f64c43b150b91efe7647395b42289f38e50566d82855b"
+
[[package]]
name = "wasm-bindgen"
version = "0.2.100"
@@ -6267,6 +6274,17 @@ dependencies = [
"winsafe",
]
+[[package]]
+name = "whoami"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6994d13118ab492c3c80c1f81928718159254c53c472bf9ce36f8dae4add02a7"
+dependencies = [
+ "redox_syscall 0.5.8",
+ "wasite",
+ "web-sys",
+]
+
[[package]]
name = "widestring"
version = "1.1.0"
diff --git a/crates/uv/Cargo.toml b/crates/uv/Cargo.toml
index 70d9daaba..e47b96913 100644
--- a/crates/uv/Cargo.toml
+++ b/crates/uv/Cargo.toml
@@ -124,6 +124,7 @@ reqwest = { workspace = true, features = ["blocking"], default-features = false
similar = { version = "2.6.0" }
tar = { workspace = true }
tempfile = { workspace = true }
+whoami = { version = "1.6.0" }
wiremock = { workspace = true }
zip = { workspace = true }
diff --git a/crates/uv/tests/it/common/mod.rs b/crates/uv/tests/it/common/mod.rs
index 8c65c7e86..9d54d00be 100644
--- a/crates/uv/tests/it/common/mod.rs
+++ b/crates/uv/tests/it/common/mod.rs
@@ -1626,6 +1626,8 @@ pub const READ_ONLY_GITHUB_TOKEN_2: &[&str] = &[
"SHIzUG1tRVZRSHMzQTl2a3NiVnB4Tmk0eTR3R2JVYklLck1qY05naHhMSFVMTDZGVElIMXNYeFhYN2gK",
];
+pub const SSH_DEPLOY_KEY: &str = "LS0tLS1CRUdJTiBPUEVOU1NIIFBSSVZBVEUgS0VZLS0tLS0KYjNCbGJuTnphQzFyWlhrdGRqRUFBQUFBQkc1dmJtVUFBQUFFYm05dVpRQUFBQUFBQUFBQkFBQUFNd0FBQUF0emMyZ3RaVwpReU5UVXhPUUFBQUNBeTF1SnNZK1JXcWp1NkdIY3Z6a3AwS21yWDEwdmo3RUZqTkpNTkRqSGZPZ0FBQUpqWUpwVnAyQ2FWCmFRQUFBQXR6YzJndFpXUXlOVFV4T1FBQUFDQXkxdUpzWStSV3FqdTZHSGN2emtwMEttclgxMHZqN0VGak5KTU5EakhmT2cKQUFBRUMwbzBnd1BxbGl6TFBJOEFXWDVaS2dVZHJyQ2ptMDhIQm9FenB4VDg3MXBqTFc0bXhqNUZhcU83b1lkeS9PU25RcQphdGZYUytQc1FXTTBrdzBPTWQ4NkFBQUFFR3R2Ym5OMGFVQmhjM1J5WVd3dWMyZ0JBZ01FQlE9PQotLS0tLUVORCBPUEVOU1NIIFBSSVZBVEUgS0VZLS0tLS0K";
+
/// Decode a split, base64 encoded authentication token.
/// We split and encode the token to bypass revoke by GitHub's secret scanning
pub fn decode_token(content: &[&str]) -> String {
diff --git a/crates/uv/tests/it/export.rs b/crates/uv/tests/it/export.rs
index 20f733060..8a4db03b2 100644
--- a/crates/uv/tests/it/export.rs
+++ b/crates/uv/tests/it/export.rs
@@ -1,14 +1,16 @@
#![allow(clippy::disallowed_types)]
use crate::common::{
- READ_ONLY_GITHUB_TOKEN, TestContext, apply_filters, decode_token, uv_snapshot,
+ READ_ONLY_GITHUB_TOKEN, SSH_DEPLOY_KEY, TestContext, apply_filters, decode_token, uv_snapshot,
};
use anyhow::{Ok, Result};
use assert_cmd::assert::OutputAssertExt;
use assert_fs::prelude::*;
use indoc::{formatdoc, indoc};
use insta::assert_snapshot;
+use std::path::Path;
use std::process::Stdio;
+use uv_fs::Simplified;
#[test]
fn requirements_txt_dependency() -> Result<()> {
@@ -1174,6 +1176,122 @@ fn requirements_txt_https_git_credentials() -> Result<()> {
Ok(())
}
+/// SSH blocks too permissive key files.
+fn reduce_key_permissions(key_file: &Path) -> Result<()> {
+ #[cfg(unix)]
+ {
+ use std::fs::Permissions;
+ use std::os::unix::fs::PermissionsExt;
+ fs_err::set_permissions(key_file, Permissions::from_mode(0o400))?;
+ }
+ #[cfg(windows)]
+ {
+ use std::process::Command;
+
+ // https://superuser.com/a/1489152
+ Command::new("icacls")
+ .arg(key_file)
+ .arg("/inheritance:r")
+ .assert()
+ .success();
+ Command::new("icacls")
+ .arg(key_file)
+ .arg("/grant:r")
+ .arg(format!("{}:R", whoami::username()))
+ .assert()
+ .success();
+ }
+ Ok(())
+}
+
+/// Don't redact the username `git` in SSH URLs.
+#[cfg(feature = "git")]
+#[test]
+fn requirements_txt_ssh_git_username() -> Result<()> {
+ let context = TestContext::new("3.12");
+
+ let pyproject_toml = context.temp_dir.child("pyproject.toml");
+ pyproject_toml.write_str(
+ r#"
+ [project]
+ name = "debug"
+ version = "0.1.0"
+ requires-python = ">=3.12"
+ dependencies = ["uv-private-pypackage @ git+ssh://git@github.com/astral-test/uv-private-pypackage.git@d780faf0ac91257d4d5a4f0c5a0e4509608c0071"]
+ "#,
+ )?;
+
+ let fake_deploy_key = context.temp_dir.child("fake_deploy_key");
+ fake_deploy_key.write_str("not a key")?;
+ reduce_key_permissions(&fake_deploy_key)?;
+
+ // Ensure that we're loading the key and fail if it isn't present
+ let failing_git_ssh_command = format!(
+ "ssh -i {} -o IdentitiesOnly=yes -F /dev/null -o StrictHostKeyChecking=no",
+ fake_deploy_key.portable_display()
+ );
+ let mut filters = context.filters();
+ filters.push((
+ "process didn't exit successfully: .*",
+ "process didn't exit successfully: [GIT_COMMAND_ERROR]",
+ ));
+ let load_key_error = regex::escape(r#"Load key "[TEMP_DIR]/fake_deploy_key":"#) + ".*";
+ filters.push((
+ &load_key_error,
+ r#"Load key "[TEMP_DIR]/fake_deploy_key": [ERROR]"#,
+ ));
+ filters.push((
+ " *Warning: Permanently added 'github.com' \\(ED25519\\) to the list of known hosts.*\n",
+ "",
+ ));
+ filters.push(("failed to clone into: .*", "failed to clone into: [PATH]"));
+ uv_snapshot!(filters, context.export().env("GIT_SSH_COMMAND", failing_git_ssh_command), @r#"
+ success: false
+ exit_code: 1
+ ----- stdout -----
+
+ ----- stderr -----
+ × Failed to download and build `uv-private-pypackage @ git+ssh://git@github.com/astral-test/uv-private-pypackage.git@d780faf0ac91257d4d5a4f0c5a0e4509608c0071`
+ ├─▶ Git operation failed
+ ├─▶ failed to clone into: [PATH]
+ ├─▶ failed to fetch branch, tag, or commit `d780faf0ac91257d4d5a4f0c5a0e4509608c0071`
+ ╰─▶ process didn't exit successfully: [GIT_COMMAND_ERROR]
+ --- stderr
+ Load key "[TEMP_DIR]/fake_deploy_key": [ERROR]
+ git@github.com: Permission denied (publickey).
+ fatal: Could not read from remote repository.
+
+ Please make sure you have the correct access rights
+ and the repository exists.
+ "#);
+
+ let ssh_deploy_key = context.temp_dir.child("uv_test_key");
+ ssh_deploy_key.write_str((decode_token(&[SSH_DEPLOY_KEY]) + "\n").as_str())?;
+ reduce_key_permissions(&ssh_deploy_key)?;
+
+ // Use the specified SSH key, and only that key, ignore `~/.ssh/config`, disable host key
+ // verification for Windows.
+ let git_ssh_command = format!(
+ "ssh -i {} -o IdentitiesOnly=yes -F /dev/null -o StrictHostKeyChecking=no",
+ ssh_deploy_key.portable_display()
+ );
+
+ uv_snapshot!(context.filters(), context.export().env("GIT_SSH_COMMAND", git_ssh_command), @r"
+ success: true
+ exit_code: 0
+ ----- stdout -----
+ # This file was autogenerated by uv via the following command:
+ # uv export --cache-dir [CACHE_DIR]
+ uv-private-pypackage @ git+ssh://git@github.com/astral-test/uv-private-pypackage.git@d780faf0ac91257d4d5a4f0c5a0e4509608c0071
+ # via debug
+
+ ----- stderr -----
+ Resolved 2 packages in [TIME]
+ ");
+
+ Ok(())
+}
+
#[test]
fn requirements_txt_https_credentials() -> Result<()> {
let context = TestContext::new("3.12");
From a748336a0983aee884eb91600b8ebc24fc850e0f Mon Sep 17 00:00:00 2001
From: konsti
Date: Wed, 4 Jun 2025 17:02:26 +0200
Subject: [PATCH 006/250] Follow-up #13814, git+ssh test case (#13839)
Follow-ups to review on #13814
---
crates/uv/tests/it/common/mod.rs | 2 +-
crates/uv/tests/it/export.rs | 18 +++++++++++-------
2 files changed, 12 insertions(+), 8 deletions(-)
diff --git a/crates/uv/tests/it/common/mod.rs b/crates/uv/tests/it/common/mod.rs
index 9d54d00be..67e1a6126 100644
--- a/crates/uv/tests/it/common/mod.rs
+++ b/crates/uv/tests/it/common/mod.rs
@@ -1626,7 +1626,7 @@ pub const READ_ONLY_GITHUB_TOKEN_2: &[&str] = &[
"SHIzUG1tRVZRSHMzQTl2a3NiVnB4Tmk0eTR3R2JVYklLck1qY05naHhMSFVMTDZGVElIMXNYeFhYN2gK",
];
-pub const SSH_DEPLOY_KEY: &str = "LS0tLS1CRUdJTiBPUEVOU1NIIFBSSVZBVEUgS0VZLS0tLS0KYjNCbGJuTnphQzFyWlhrdGRqRUFBQUFBQkc1dmJtVUFBQUFFYm05dVpRQUFBQUFBQUFBQkFBQUFNd0FBQUF0emMyZ3RaVwpReU5UVXhPUUFBQUNBeTF1SnNZK1JXcWp1NkdIY3Z6a3AwS21yWDEwdmo3RUZqTkpNTkRqSGZPZ0FBQUpqWUpwVnAyQ2FWCmFRQUFBQXR6YzJndFpXUXlOVFV4T1FBQUFDQXkxdUpzWStSV3FqdTZHSGN2emtwMEttclgxMHZqN0VGak5KTU5EakhmT2cKQUFBRUMwbzBnd1BxbGl6TFBJOEFXWDVaS2dVZHJyQ2ptMDhIQm9FenB4VDg3MXBqTFc0bXhqNUZhcU83b1lkeS9PU25RcQphdGZYUytQc1FXTTBrdzBPTWQ4NkFBQUFFR3R2Ym5OMGFVQmhjM1J5WVd3dWMyZ0JBZ01FQlE9PQotLS0tLUVORCBPUEVOU1NIIFBSSVZBVEUgS0VZLS0tLS0K";
+pub const READ_ONLY_GITHUB_SSH_DEPLOY_KEY: &str = "LS0tLS1CRUdJTiBPUEVOU1NIIFBSSVZBVEUgS0VZLS0tLS0KYjNCbGJuTnphQzFyWlhrdGRqRUFBQUFBQkc1dmJtVUFBQUFFYm05dVpRQUFBQUFBQUFBQkFBQUFNd0FBQUF0emMyZ3RaVwpReU5UVXhPUUFBQUNBeTF1SnNZK1JXcWp1NkdIY3Z6a3AwS21yWDEwdmo3RUZqTkpNTkRqSGZPZ0FBQUpqWUpwVnAyQ2FWCmFRQUFBQXR6YzJndFpXUXlOVFV4T1FBQUFDQXkxdUpzWStSV3FqdTZHSGN2emtwMEttclgxMHZqN0VGak5KTU5EakhmT2cKQUFBRUMwbzBnd1BxbGl6TFBJOEFXWDVaS2dVZHJyQ2ptMDhIQm9FenB4VDg3MXBqTFc0bXhqNUZhcU83b1lkeS9PU25RcQphdGZYUytQc1FXTTBrdzBPTWQ4NkFBQUFFR3R2Ym5OMGFVQmhjM1J5WVd3dWMyZ0JBZ01FQlE9PQotLS0tLUVORCBPUEVOU1NIIFBSSVZBVEUgS0VZLS0tLS0K";
/// Decode a split, base64 encoded authentication token.
/// We split and encode the token to bypass revoke by GitHub's secret scanning
diff --git a/crates/uv/tests/it/export.rs b/crates/uv/tests/it/export.rs
index 8a4db03b2..a555ab8fb 100644
--- a/crates/uv/tests/it/export.rs
+++ b/crates/uv/tests/it/export.rs
@@ -1,7 +1,8 @@
#![allow(clippy::disallowed_types)]
use crate::common::{
- READ_ONLY_GITHUB_TOKEN, SSH_DEPLOY_KEY, TestContext, apply_filters, decode_token, uv_snapshot,
+ READ_ONLY_GITHUB_SSH_DEPLOY_KEY, READ_ONLY_GITHUB_TOKEN, TestContext, apply_filters,
+ decode_token, uv_snapshot,
};
use anyhow::{Ok, Result};
use assert_cmd::assert::OutputAssertExt;
@@ -1176,12 +1177,14 @@ fn requirements_txt_https_git_credentials() -> Result<()> {
Ok(())
}
-/// SSH blocks too permissive key files.
-fn reduce_key_permissions(key_file: &Path) -> Result<()> {
+/// SSH blocks too permissive key files, so we need to scope permissions for the file to the current
+/// user.
+fn reduce_ssh_key_file_permissions(key_file: &Path) -> Result<()> {
#[cfg(unix)]
{
use std::fs::Permissions;
use std::os::unix::fs::PermissionsExt;
+
fs_err::set_permissions(key_file, Permissions::from_mode(0o400))?;
}
#[cfg(windows)]
@@ -1223,9 +1226,10 @@ fn requirements_txt_ssh_git_username() -> Result<()> {
let fake_deploy_key = context.temp_dir.child("fake_deploy_key");
fake_deploy_key.write_str("not a key")?;
- reduce_key_permissions(&fake_deploy_key)?;
+ reduce_ssh_key_file_permissions(&fake_deploy_key)?;
- // Ensure that we're loading the key and fail if it isn't present
+ // Ensure that we fail without passing the correct key (and don't go to the dev machine's
+ // credential helper).
let failing_git_ssh_command = format!(
"ssh -i {} -o IdentitiesOnly=yes -F /dev/null -o StrictHostKeyChecking=no",
fake_deploy_key.portable_display()
@@ -1266,8 +1270,8 @@ fn requirements_txt_ssh_git_username() -> Result<()> {
"#);
let ssh_deploy_key = context.temp_dir.child("uv_test_key");
- ssh_deploy_key.write_str((decode_token(&[SSH_DEPLOY_KEY]) + "\n").as_str())?;
- reduce_key_permissions(&ssh_deploy_key)?;
+ ssh_deploy_key.write_str((decode_token(&[READ_ONLY_GITHUB_SSH_DEPLOY_KEY]) + "\n").as_str())?;
+ reduce_ssh_key_file_permissions(&ssh_deploy_key)?;
// Use the specified SSH key, and only that key, ignore `~/.ssh/config`, disable host key
// verification for Windows.
From d8636a4088ef44512d30a9ba90e82eb8a779ac11 Mon Sep 17 00:00:00 2001
From: Aria Desires
Date: Wed, 4 Jun 2025 11:32:59 -0400
Subject: [PATCH 007/250] Prefer the binary's version when checking if it's up
to date (#13840)
Fixes #13741
---
crates/uv/src/commands/self_update.rs | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/crates/uv/src/commands/self_update.rs b/crates/uv/src/commands/self_update.rs
index 4f8ff28d3..4b4fd4830 100644
--- a/crates/uv/src/commands/self_update.rs
+++ b/crates/uv/src/commands/self_update.rs
@@ -63,6 +63,14 @@ pub(crate) async fn self_update(
return Ok(ExitStatus::Error);
};
+ // If we know what our version is, ignore whatever the receipt thinks it is!
+ // This makes us behave better if someone manually installs a random version of uv
+ // in a way that doesn't update the receipt.
+ if let Ok(version) = env!("CARGO_PKG_VERSION").parse() {
+ // This is best-effort, it's fine if it fails (also it can't actually fail)
+ let _ = updater.set_current_version(version);
+ }
+
// Ensure the receipt is for the current binary. If it's not, then the user likely has multiple
// uv binaries installed, and the current binary was _not_ installed via the standalone
// installation scripts.
From 794b3ec7506e0430b088a24d2e680ed7ac8d14b4 Mon Sep 17 00:00:00 2001
From: konsti
Date: Wed, 4 Jun 2025 18:48:53 +0200
Subject: [PATCH 008/250] Downgrade reqwest and hyper-util (#13835)
Workaround for https://github.com/astral-sh/uv/issues/13831, see also
https://github.com/hyperium/hyper/issues/3900
---
Cargo.lock | 80 ++++++++++++++++++++----------------------------------
Cargo.toml | 2 +-
2 files changed, 31 insertions(+), 51 deletions(-)
diff --git a/Cargo.lock b/Cargo.lock
index ac897265f..0dcf1613f 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -1675,26 +1675,22 @@ dependencies = [
"tokio",
"tokio-rustls",
"tower-service",
- "webpki-roots 0.26.8",
+ "webpki-roots",
]
[[package]]
name = "hyper-util"
-version = "0.1.13"
+version = "0.1.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b1c293b6b3d21eca78250dc7dbebd6b9210ec5530e038cbfe0661b5c47ab06e8"
+checksum = "cf9f1e950e0d9d1d3c47184416723cf29c0d1f93bd8cccf37e4beb6b44f31710"
dependencies = [
- "base64 0.22.1",
"bytes",
"futures-channel",
- "futures-core",
"futures-util",
"http",
"http-body",
"hyper",
- "ipnet",
"libc",
- "percent-encoding",
"pin-project-lite",
"socket2",
"tokio",
@@ -1937,16 +1933,6 @@ version = "2.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130"
-[[package]]
-name = "iri-string"
-version = "0.7.8"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dbc5ebe9c3a1a7a5127f920a418f7585e9e758e911d0466ed004f393b0e380b2"
-dependencies = [
- "memchr",
- "serde",
-]
-
[[package]]
name = "is-terminal"
version = "0.4.15"
@@ -3098,9 +3084,9 @@ dependencies = [
[[package]]
name = "reqwest"
-version = "0.12.18"
+version = "0.12.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e98ff6b0dbbe4d5a37318f433d4fc82babd21631f194d370409ceb2e40b2f0b5"
+checksum = "d19c46a6fdd48bc4dab94b6103fccc55d34c67cc0ad04653aad4ea2a07cd7bbb"
dependencies = [
"async-compression",
"base64 0.22.1",
@@ -3126,6 +3112,7 @@ dependencies = [
"quinn",
"rustls",
"rustls-native-certs",
+ "rustls-pemfile",
"rustls-pki-types",
"serde",
"serde_json",
@@ -3136,14 +3123,14 @@ dependencies = [
"tokio-socks",
"tokio-util",
"tower",
- "tower-http",
"tower-service",
"url",
"wasm-bindgen",
"wasm-bindgen-futures",
"wasm-streams",
"web-sys",
- "webpki-roots 1.0.0",
+ "webpki-roots",
+ "windows-registry 0.4.0",
]
[[package]]
@@ -3389,6 +3376,15 @@ dependencies = [
"security-framework",
]
+[[package]]
+name = "rustls-pemfile"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dce314e5fee3f39953d46bb63bb8a46d40c2f8fb7cc5a3b6cab2bde9721d6e50"
+dependencies = [
+ "rustls-pki-types",
+]
+
[[package]]
name = "rustls-pki-types"
version = "1.11.0"
@@ -4284,24 +4280,6 @@ dependencies = [
"tower-service",
]
-[[package]]
-name = "tower-http"
-version = "0.6.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0fdb0c213ca27a9f57ab69ddb290fd80d970922355b83ae380b395d3986b8a2e"
-dependencies = [
- "bitflags 2.9.1",
- "bytes",
- "futures-util",
- "http",
- "http-body",
- "iri-string",
- "pin-project-lite",
- "tower",
- "tower-layer",
- "tower-service",
-]
-
[[package]]
name = "tower-layer"
version = "0.3.3"
@@ -5665,7 +5643,7 @@ dependencies = [
"uv-trampoline-builder",
"uv-warnings",
"which",
- "windows-registry",
+ "windows-registry 0.5.2",
"windows-result 0.3.4",
"windows-sys 0.59.0",
]
@@ -5867,7 +5845,7 @@ dependencies = [
"tracing",
"uv-fs",
"uv-static",
- "windows-registry",
+ "windows-registry 0.5.2",
"windows-result 0.3.4",
"windows-sys 0.59.0",
]
@@ -6246,15 +6224,6 @@ dependencies = [
"rustls-pki-types",
]
-[[package]]
-name = "webpki-roots"
-version = "1.0.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2853738d1cc4f2da3a225c18ec6c3721abb31961096e9dbf5ab35fa88b19cfdb"
-dependencies = [
- "rustls-pki-types",
-]
-
[[package]]
name = "weezl"
version = "0.1.8"
@@ -6483,6 +6452,17 @@ dependencies = [
"windows-link",
]
+[[package]]
+name = "windows-registry"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4286ad90ddb45071efd1a66dfa43eb02dd0dfbae1545ad6cc3c51cf34d7e8ba3"
+dependencies = [
+ "windows-result 0.3.4",
+ "windows-strings 0.3.1",
+ "windows-targets 0.53.0",
+]
+
[[package]]
name = "windows-registry"
version = "0.5.2"
diff --git a/Cargo.toml b/Cargo.toml
index 4d369bc9e..368dc0442 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -142,7 +142,7 @@ ref-cast = { version = "1.0.24" }
reflink-copy = { version = "0.1.19" }
regex = { version = "1.10.6" }
regex-automata = { version = "0.4.8", default-features = false, features = ["dfa-build", "dfa-search", "perf", "std", "syntax"] }
-reqwest = { version = "0.12.7", default-features = false, features = ["json", "gzip", "stream", "rustls-tls", "rustls-tls-native-roots", "socks", "multipart", "http2", "blocking"] }
+reqwest = { version = "=0.12.15", default-features = false, features = ["json", "gzip", "stream", "rustls-tls", "rustls-tls-native-roots", "socks", "multipart", "http2", "blocking"] }
reqwest-middleware = { version = "0.4.0", features = ["multipart"] }
reqwest-retry = { version = "0.7.0" }
rkyv = { version = "0.8.8", features = ["bytecheck"] }
From f168802ba48718cf11cb40e4a0044b2ca94ea560 Mon Sep 17 00:00:00 2001
From: Zanie Blue
Date: Wed, 4 Jun 2025 13:24:40 -0500
Subject: [PATCH 009/250] Bump `cargo-test-macos` timeout to 15m (#13847)
Closes https://github.com/astral-sh/uv/issues/13846
15m is fine, we should definitely take action if it runs that long
normally though.
---
.github/workflows/ci.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 5463294cc..12d6e5f91 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -229,7 +229,7 @@ jobs:
--status-level skip --failure-output immediate-final --no-fail-fast -j 20 --final-status-level slow
cargo-test-macos:
- timeout-minutes: 10
+ timeout-minutes: 15
needs: determine_changes
if: ${{ !contains(github.event.pull_request.labels.*.name, 'no-test') && (needs.determine_changes.outputs.code == 'true' || github.ref == 'refs/heads/main') }}
runs-on: macos-latest-xlarge # github-macos-14-aarch64-6
From 8e8b7449dc465bea84ab051358d1a8566a64c681 Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
<41898282+github-actions[bot]@users.noreply.github.com>
Date: Wed, 4 Jun 2025 19:07:04 +0000
Subject: [PATCH 010/250] Sync latest Python releases (#13848)
https://github.com/astral-sh/python-build-standalone/releases/tag/20250604
Co-authored-by: zanieb <2586601+zanieb@users.noreply.github.com>
---
crates/uv-python/download-metadata.json | 3648 +++++++++++++++++++++++
crates/uv/tests/it/python_install.rs | 194 +-
crates/uv/tests/it/python_list.rs | 9 +-
3 files changed, 3750 insertions(+), 101 deletions(-)
diff --git a/crates/uv-python/download-metadata.json b/crates/uv-python/download-metadata.json
index 9bf8a6a47..345fe23fb 100644
--- a/crates/uv-python/download-metadata.json
+++ b/crates/uv-python/download-metadata.json
@@ -1,4 +1,804 @@
{
+ "cpython-3.14.0b1-darwin-aarch64-none": {
+ "name": "cpython",
+ "arch": {
+ "family": "aarch64",
+ "variant": null
+ },
+ "os": "darwin",
+ "libc": "none",
+ "major": 3,
+ "minor": 14,
+ "patch": 0,
+ "prerelease": "b1",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.14.0b1%2B20250604-aarch64-apple-darwin-install_only_stripped.tar.gz",
+ "sha256": "1d118780ec1b610ca7520379f5b6c68314f0672145348e06bb29668fe2967657",
+ "variant": null
+ },
+ "cpython-3.14.0b1-darwin-x86_64-none": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": null
+ },
+ "os": "darwin",
+ "libc": "none",
+ "major": 3,
+ "minor": 14,
+ "patch": 0,
+ "prerelease": "b1",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.14.0b1%2B20250604-x86_64-apple-darwin-install_only_stripped.tar.gz",
+ "sha256": "bedcafacb966f0259b32944388039ad906e649588f91c9fa8892c8c58eb10ed8",
+ "variant": null
+ },
+ "cpython-3.14.0b1-linux-aarch64-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "aarch64",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 14,
+ "patch": 0,
+ "prerelease": "b1",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.14.0b1%2B20250604-aarch64-unknown-linux-gnu-install_only_stripped.tar.gz",
+ "sha256": "a0ddc9b714fa7236869190308852d0ce3a9292b6dcfa14544cceef6b2e9a478a",
+ "variant": null
+ },
+ "cpython-3.14.0b1-linux-armv7-gnueabi": {
+ "name": "cpython",
+ "arch": {
+ "family": "armv7",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "gnueabi",
+ "major": 3,
+ "minor": 14,
+ "patch": 0,
+ "prerelease": "b1",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.14.0b1%2B20250604-armv7-unknown-linux-gnueabi-install_only_stripped.tar.gz",
+ "sha256": "8acfd7f51db4c1bbd4b885c693520b2ed82429d00e8b5715d22b7dd0a436bf00",
+ "variant": null
+ },
+ "cpython-3.14.0b1-linux-armv7-gnueabihf": {
+ "name": "cpython",
+ "arch": {
+ "family": "armv7",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "gnueabihf",
+ "major": 3,
+ "minor": 14,
+ "patch": 0,
+ "prerelease": "b1",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.14.0b1%2B20250604-armv7-unknown-linux-gnueabihf-install_only_stripped.tar.gz",
+ "sha256": "220b888323546fa466514c455b9cd4e136138a29d24991f6441fc6f3c66a702e",
+ "variant": null
+ },
+ "cpython-3.14.0b1-linux-powerpc64le-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "powerpc64le",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 14,
+ "patch": 0,
+ "prerelease": "b1",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.14.0b1%2B20250604-ppc64le-unknown-linux-gnu-install_only_stripped.tar.gz",
+ "sha256": "b865a3e7e86de1c05a20e38d683f58fd6720f6fd7921be6f66a28faab90afe23",
+ "variant": null
+ },
+ "cpython-3.14.0b1-linux-riscv64-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "riscv64",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 14,
+ "patch": 0,
+ "prerelease": "b1",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.14.0b1%2B20250604-riscv64-unknown-linux-gnu-install_only_stripped.tar.gz",
+ "sha256": "43789b114c6bf708822040ad74ee9fefdd6ac8acc52c9d14b4d6a306f9fc2fce",
+ "variant": null
+ },
+ "cpython-3.14.0b1-linux-s390x-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "s390x",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 14,
+ "patch": 0,
+ "prerelease": "b1",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.14.0b1%2B20250604-s390x-unknown-linux-gnu-install_only_stripped.tar.gz",
+ "sha256": "9961f062bd6d2045ed84510a940f65ecce4ebc416d87ebe3c9865fe73648db77",
+ "variant": null
+ },
+ "cpython-3.14.0b1-linux-x86_64-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 14,
+ "patch": 0,
+ "prerelease": "b1",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.14.0b1%2B20250604-x86_64-unknown-linux-gnu-install_only_stripped.tar.gz",
+ "sha256": "7239666ecd4c205dbbb9f2defa52f91cf2a59d2e1cd5a041b5e9e0c8c07af1a0",
+ "variant": null
+ },
+ "cpython-3.14.0b1-linux-x86_64-musl": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "musl",
+ "major": 3,
+ "minor": 14,
+ "patch": 0,
+ "prerelease": "b1",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.14.0b1%2B20250604-x86_64-unknown-linux-musl-install_only_stripped.tar.gz",
+ "sha256": "4bb35000a3a99b05f1ab290ea1c360e5e0530a0bcd3d9aed0f1635da0d97762f",
+ "variant": null
+ },
+ "cpython-3.14.0b1-linux-x86_64_v2-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": "v2"
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 14,
+ "patch": 0,
+ "prerelease": "b1",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.14.0b1%2B20250604-x86_64_v2-unknown-linux-gnu-install_only_stripped.tar.gz",
+ "sha256": "cbd0cd0209a3514fa7ba80be8ba72e88571562eee9331f6a4bf803e70f59b9eb",
+ "variant": null
+ },
+ "cpython-3.14.0b1-linux-x86_64_v2-musl": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": "v2"
+ },
+ "os": "linux",
+ "libc": "musl",
+ "major": 3,
+ "minor": 14,
+ "patch": 0,
+ "prerelease": "b1",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.14.0b1%2B20250604-x86_64_v2-unknown-linux-musl-install_only_stripped.tar.gz",
+ "sha256": "814e5a91c1fe706da55f0ae8a447ea9e5a22f197be4064105bcfedf1960e2cda",
+ "variant": null
+ },
+ "cpython-3.14.0b1-linux-x86_64_v3-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": "v3"
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 14,
+ "patch": 0,
+ "prerelease": "b1",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.14.0b1%2B20250604-x86_64_v3-unknown-linux-gnu-install_only_stripped.tar.gz",
+ "sha256": "370c2188baf500e810bde23b2c3ba45c60cb4f53b0381816ef9443b96742e925",
+ "variant": null
+ },
+ "cpython-3.14.0b1-linux-x86_64_v3-musl": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": "v3"
+ },
+ "os": "linux",
+ "libc": "musl",
+ "major": 3,
+ "minor": 14,
+ "patch": 0,
+ "prerelease": "b1",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.14.0b1%2B20250604-x86_64_v3-unknown-linux-musl-install_only_stripped.tar.gz",
+ "sha256": "c1ab6f3fc5e413d2c7496c7844856fc0f4cdebe7b24eb34769d399ab4f830e44",
+ "variant": null
+ },
+ "cpython-3.14.0b1-linux-x86_64_v4-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": "v4"
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 14,
+ "patch": 0,
+ "prerelease": "b1",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.14.0b1%2B20250604-x86_64_v4-unknown-linux-gnu-install_only_stripped.tar.gz",
+ "sha256": "48e01a7d254226fd5d7aeec633f9b4a9e8805a16996eebe370139967fe69c09e",
+ "variant": null
+ },
+ "cpython-3.14.0b1-linux-x86_64_v4-musl": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": "v4"
+ },
+ "os": "linux",
+ "libc": "musl",
+ "major": 3,
+ "minor": 14,
+ "patch": 0,
+ "prerelease": "b1",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.14.0b1%2B20250604-x86_64_v4-unknown-linux-musl-install_only_stripped.tar.gz",
+ "sha256": "1d102b29e869d3ec8a01afc02f132a34f378c777ca2db00bad95ad4571b9ac82",
+ "variant": null
+ },
+ "cpython-3.14.0b1-windows-i686-none": {
+ "name": "cpython",
+ "arch": {
+ "family": "i686",
+ "variant": null
+ },
+ "os": "windows",
+ "libc": "none",
+ "major": 3,
+ "minor": 14,
+ "patch": 0,
+ "prerelease": "b1",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.14.0b1%2B20250604-i686-pc-windows-msvc-install_only_stripped.tar.gz",
+ "sha256": "6cb3871821917e9d0f2faf1d9e6eb798d487d6bcb353035dbf3c282d263634f1",
+ "variant": null
+ },
+ "cpython-3.14.0b1-windows-x86_64-none": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": null
+ },
+ "os": "windows",
+ "libc": "none",
+ "major": 3,
+ "minor": 14,
+ "patch": 0,
+ "prerelease": "b1",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.14.0b1%2B20250604-x86_64-pc-windows-msvc-install_only_stripped.tar.gz",
+ "sha256": "ad78cd205c5b71bd8790e4eee5a8775b5cbf5b6f9593b5e4f09dc0ed0591b216",
+ "variant": null
+ },
+ "cpython-3.14.0b1+freethreaded-darwin-aarch64-none": {
+ "name": "cpython",
+ "arch": {
+ "family": "aarch64",
+ "variant": null
+ },
+ "os": "darwin",
+ "libc": "none",
+ "major": 3,
+ "minor": 14,
+ "patch": 0,
+ "prerelease": "b1",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.14.0b1%2B20250604-aarch64-apple-darwin-freethreaded%2Bpgo%2Blto-full.tar.zst",
+ "sha256": "3c70e6c641041fac01e8aa6f42c3d261f9b5038edebbed92f2bc63c738fabf80",
+ "variant": "freethreaded"
+ },
+ "cpython-3.14.0b1+freethreaded-darwin-x86_64-none": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": null
+ },
+ "os": "darwin",
+ "libc": "none",
+ "major": 3,
+ "minor": 14,
+ "patch": 0,
+ "prerelease": "b1",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.14.0b1%2B20250604-x86_64-apple-darwin-freethreaded%2Bpgo%2Blto-full.tar.zst",
+ "sha256": "50c0d4b010ad52915e642533969ba6d9191cefd62a8c194cd4e741909e1888af",
+ "variant": "freethreaded"
+ },
+ "cpython-3.14.0b1+freethreaded-linux-aarch64-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "aarch64",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 14,
+ "patch": 0,
+ "prerelease": "b1",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.14.0b1%2B20250604-aarch64-unknown-linux-gnu-freethreaded%2Blto-full.tar.zst",
+ "sha256": "50dae9b70d85dc2222a12907c0bc1fd5d387dce72da51a3a2f0e00d2e8ae2fe0",
+ "variant": "freethreaded"
+ },
+ "cpython-3.14.0b1+freethreaded-linux-armv7-gnueabi": {
+ "name": "cpython",
+ "arch": {
+ "family": "armv7",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "gnueabi",
+ "major": 3,
+ "minor": 14,
+ "patch": 0,
+ "prerelease": "b1",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.14.0b1%2B20250604-armv7-unknown-linux-gnueabi-freethreaded%2Blto-full.tar.zst",
+ "sha256": "62ea0a1210e33b4dd64cbe6f3fd2e667e5aa6915594a7dcc08866813f38ad263",
+ "variant": "freethreaded"
+ },
+ "cpython-3.14.0b1+freethreaded-linux-armv7-gnueabihf": {
+ "name": "cpython",
+ "arch": {
+ "family": "armv7",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "gnueabihf",
+ "major": 3,
+ "minor": 14,
+ "patch": 0,
+ "prerelease": "b1",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.14.0b1%2B20250604-armv7-unknown-linux-gnueabihf-freethreaded%2Blto-full.tar.zst",
+ "sha256": "5fa4c36b14ad504a76617f9e7e3e07d244a19a9605a08bd9ebcb074f2b6d419e",
+ "variant": "freethreaded"
+ },
+ "cpython-3.14.0b1+freethreaded-linux-powerpc64le-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "powerpc64le",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 14,
+ "patch": 0,
+ "prerelease": "b1",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.14.0b1%2B20250604-ppc64le-unknown-linux-gnu-freethreaded%2Blto-full.tar.zst",
+ "sha256": "93b89f74bc1b0a5c9bbb9f7a5a9e845b77b296a3fca1fdf652844354068b5510",
+ "variant": "freethreaded"
+ },
+ "cpython-3.14.0b1+freethreaded-linux-riscv64-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "riscv64",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 14,
+ "patch": 0,
+ "prerelease": "b1",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.14.0b1%2B20250604-riscv64-unknown-linux-gnu-freethreaded%2Blto-full.tar.zst",
+ "sha256": "6f26da3dd497793e3d32559ffd4e3e7d7fa25dc923e1d490f022a41179169dd2",
+ "variant": "freethreaded"
+ },
+ "cpython-3.14.0b1+freethreaded-linux-s390x-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "s390x",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 14,
+ "patch": 0,
+ "prerelease": "b1",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.14.0b1%2B20250604-s390x-unknown-linux-gnu-freethreaded%2Blto-full.tar.zst",
+ "sha256": "44ed2d3bc3a67c88a5d13fb855252952659186fbe1f7c489e241971f9b5cbdac",
+ "variant": "freethreaded"
+ },
+ "cpython-3.14.0b1+freethreaded-linux-x86_64-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 14,
+ "patch": 0,
+ "prerelease": "b1",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.14.0b1%2B20250604-x86_64-unknown-linux-gnu-freethreaded%2Bpgo%2Blto-full.tar.zst",
+ "sha256": "72fce8adbbd9e1a3cae96fa11c908930d039780f148562c8a0a169cf0950254e",
+ "variant": "freethreaded"
+ },
+ "cpython-3.14.0b1+freethreaded-linux-x86_64-musl": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "musl",
+ "major": 3,
+ "minor": 14,
+ "patch": 0,
+ "prerelease": "b1",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.14.0b1%2B20250604-x86_64-unknown-linux-musl-freethreaded%2Blto-full.tar.zst",
+ "sha256": "f107d98f8d9390ccad38a94914ff1886a9feb1dee147596b24c196761484d6e9",
+ "variant": "freethreaded"
+ },
+ "cpython-3.14.0b1+freethreaded-linux-x86_64_v2-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": "v2"
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 14,
+ "patch": 0,
+ "prerelease": "b1",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.14.0b1%2B20250604-x86_64_v2-unknown-linux-gnu-freethreaded%2Bpgo%2Blto-full.tar.zst",
+ "sha256": "c3555140cab901f4f1fccc61162ebe53a9b43298230b579f2ecf8080f19f043a",
+ "variant": "freethreaded"
+ },
+ "cpython-3.14.0b1+freethreaded-linux-x86_64_v2-musl": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": "v2"
+ },
+ "os": "linux",
+ "libc": "musl",
+ "major": 3,
+ "minor": 14,
+ "patch": 0,
+ "prerelease": "b1",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.14.0b1%2B20250604-x86_64_v2-unknown-linux-musl-freethreaded%2Blto-full.tar.zst",
+ "sha256": "ade8e50da56ee8d492db40059dcc99cf2587f4742e1ddc47e8fe77c9d15789c7",
+ "variant": "freethreaded"
+ },
+ "cpython-3.14.0b1+freethreaded-linux-x86_64_v3-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": "v3"
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 14,
+ "patch": 0,
+ "prerelease": "b1",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.14.0b1%2B20250604-x86_64_v3-unknown-linux-gnu-freethreaded%2Bpgo%2Blto-full.tar.zst",
+ "sha256": "505a9fd0e88ea1c11ee383661bae3e8b4a87973072ec7b068f8605619d095568",
+ "variant": "freethreaded"
+ },
+ "cpython-3.14.0b1+freethreaded-linux-x86_64_v3-musl": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": "v3"
+ },
+ "os": "linux",
+ "libc": "musl",
+ "major": 3,
+ "minor": 14,
+ "patch": 0,
+ "prerelease": "b1",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.14.0b1%2B20250604-x86_64_v3-unknown-linux-musl-freethreaded%2Blto-full.tar.zst",
+ "sha256": "774074106198623f7ce18dc7419a7ac2cf03caab4b4a49acebb83a697a768a50",
+ "variant": "freethreaded"
+ },
+ "cpython-3.14.0b1+freethreaded-linux-x86_64_v4-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": "v4"
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 14,
+ "patch": 0,
+ "prerelease": "b1",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.14.0b1%2B20250604-x86_64_v4-unknown-linux-gnu-freethreaded%2Bpgo%2Blto-full.tar.zst",
+ "sha256": "ff3d37f009adeaf1214a03c34db0f97418c6cbe95d2e84c8795a33ef64d71ebe",
+ "variant": "freethreaded"
+ },
+ "cpython-3.14.0b1+freethreaded-linux-x86_64_v4-musl": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": "v4"
+ },
+ "os": "linux",
+ "libc": "musl",
+ "major": 3,
+ "minor": 14,
+ "patch": 0,
+ "prerelease": "b1",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.14.0b1%2B20250604-x86_64_v4-unknown-linux-musl-freethreaded%2Blto-full.tar.zst",
+ "sha256": "389a789233e9a1911bc77d4bc3a11d99481ad56953d0e33f9301c8451c197b77",
+ "variant": "freethreaded"
+ },
+ "cpython-3.14.0b1+freethreaded-windows-i686-none": {
+ "name": "cpython",
+ "arch": {
+ "family": "i686",
+ "variant": null
+ },
+ "os": "windows",
+ "libc": "none",
+ "major": 3,
+ "minor": 14,
+ "patch": 0,
+ "prerelease": "b1",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.14.0b1%2B20250604-i686-pc-windows-msvc-freethreaded%2Bpgo-full.tar.zst",
+ "sha256": "ab67b1623761b8da2a7c25f38ebab71f9dca5ed19868bb97ca345d2799e49970",
+ "variant": "freethreaded"
+ },
+ "cpython-3.14.0b1+freethreaded-windows-x86_64-none": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": null
+ },
+ "os": "windows",
+ "libc": "none",
+ "major": 3,
+ "minor": 14,
+ "patch": 0,
+ "prerelease": "b1",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.14.0b1%2B20250604-x86_64-pc-windows-msvc-freethreaded%2Bpgo-full.tar.zst",
+ "sha256": "8c478ba0bf2081f9abe4dc422ac9ab02319ef7b476ce9fe98999a7e89bf478c2",
+ "variant": "freethreaded"
+ },
+ "cpython-3.14.0b1+debug-linux-aarch64-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "aarch64",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 14,
+ "patch": 0,
+ "prerelease": "b1",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.14.0b1%2B20250604-aarch64-unknown-linux-gnu-debug-full.tar.zst",
+ "sha256": "67d969d97d9a6cefc780fc898ebf1eaf90b4652512ebb60de14cb4290f48bd83",
+ "variant": "debug"
+ },
+ "cpython-3.14.0b1+debug-linux-armv7-gnueabi": {
+ "name": "cpython",
+ "arch": {
+ "family": "armv7",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "gnueabi",
+ "major": 3,
+ "minor": 14,
+ "patch": 0,
+ "prerelease": "b1",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.14.0b1%2B20250604-armv7-unknown-linux-gnueabi-debug-full.tar.zst",
+ "sha256": "355b9b829aa0736acdb48145235025ece06406b932647ad5af7ef0db781e0acf",
+ "variant": "debug"
+ },
+ "cpython-3.14.0b1+debug-linux-armv7-gnueabihf": {
+ "name": "cpython",
+ "arch": {
+ "family": "armv7",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "gnueabihf",
+ "major": 3,
+ "minor": 14,
+ "patch": 0,
+ "prerelease": "b1",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.14.0b1%2B20250604-armv7-unknown-linux-gnueabihf-debug-full.tar.zst",
+ "sha256": "125e2b5a470157d9bbdb782bca691a922c490e01fae29859adac9ab861a70ff3",
+ "variant": "debug"
+ },
+ "cpython-3.14.0b1+debug-linux-powerpc64le-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "powerpc64le",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 14,
+ "patch": 0,
+ "prerelease": "b1",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.14.0b1%2B20250604-ppc64le-unknown-linux-gnu-debug-full.tar.zst",
+ "sha256": "16cd16598fcdd61c66107ba468e3e57e4ac4dbdd578d418c532631475251ee09",
+ "variant": "debug"
+ },
+ "cpython-3.14.0b1+debug-linux-riscv64-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "riscv64",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 14,
+ "patch": 0,
+ "prerelease": "b1",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.14.0b1%2B20250604-riscv64-unknown-linux-gnu-debug-full.tar.zst",
+ "sha256": "326b87cba49d447764d6235120025b28b4672331dcb89858944c86e8018d968b",
+ "variant": "debug"
+ },
+ "cpython-3.14.0b1+debug-linux-s390x-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "s390x",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 14,
+ "patch": 0,
+ "prerelease": "b1",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.14.0b1%2B20250604-s390x-unknown-linux-gnu-debug-full.tar.zst",
+ "sha256": "8bd0aad1f68a465f86bbd2167dd8beba5714726f7c84c9104f1c4f52f5258355",
+ "variant": "debug"
+ },
+ "cpython-3.14.0b1+debug-linux-x86_64-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 14,
+ "patch": 0,
+ "prerelease": "b1",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.14.0b1%2B20250604-x86_64-unknown-linux-gnu-debug-full.tar.zst",
+ "sha256": "01dcd2188bd60d4f77d3289d5532f0ba027d8ebebe972147e93f5a34ebecb038",
+ "variant": "debug"
+ },
+ "cpython-3.14.0b1+debug-linux-x86_64-musl": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "musl",
+ "major": 3,
+ "minor": 14,
+ "patch": 0,
+ "prerelease": "b1",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.14.0b1%2B20250604-x86_64-unknown-linux-musl-debug-full.tar.zst",
+ "sha256": "a1eff13c5e1c068326220878b254572d0d7a2bbde064a5037ac9ec296f5fe36b",
+ "variant": "debug"
+ },
+ "cpython-3.14.0b1+debug-linux-x86_64_v2-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": "v2"
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 14,
+ "patch": 0,
+ "prerelease": "b1",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.14.0b1%2B20250604-x86_64_v2-unknown-linux-gnu-debug-full.tar.zst",
+ "sha256": "3bb1a5e372e866ae7d54b2d47ffe0ff25a2f1971de2682205bdd208b2a6b22c5",
+ "variant": "debug"
+ },
+ "cpython-3.14.0b1+debug-linux-x86_64_v2-musl": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": "v2"
+ },
+ "os": "linux",
+ "libc": "musl",
+ "major": 3,
+ "minor": 14,
+ "patch": 0,
+ "prerelease": "b1",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.14.0b1%2B20250604-x86_64_v2-unknown-linux-musl-debug-full.tar.zst",
+ "sha256": "1fe182c5091519b55e2d6d50925f6ef707036204d1fe83a25dbac7106479488b",
+ "variant": "debug"
+ },
+ "cpython-3.14.0b1+debug-linux-x86_64_v3-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": "v3"
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 14,
+ "patch": 0,
+ "prerelease": "b1",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.14.0b1%2B20250604-x86_64_v3-unknown-linux-gnu-debug-full.tar.zst",
+ "sha256": "93b6648fb818004b97399ad7bbca16a22f3b03aff13ce964bbc9e55db4f7f6c7",
+ "variant": "debug"
+ },
+ "cpython-3.14.0b1+debug-linux-x86_64_v3-musl": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": "v3"
+ },
+ "os": "linux",
+ "libc": "musl",
+ "major": 3,
+ "minor": 14,
+ "patch": 0,
+ "prerelease": "b1",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.14.0b1%2B20250604-x86_64_v3-unknown-linux-musl-debug-full.tar.zst",
+ "sha256": "4feff760f2a5f4e289bc0416996d224034ef877f142d5062a9fef0bf41848ad5",
+ "variant": "debug"
+ },
+ "cpython-3.14.0b1+debug-linux-x86_64_v4-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": "v4"
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 14,
+ "patch": 0,
+ "prerelease": "b1",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.14.0b1%2B20250604-x86_64_v4-unknown-linux-gnu-debug-full.tar.zst",
+ "sha256": "1b46954388e4a198b931c015ec5ef323eeed893f9857ba07465939c639a4cde5",
+ "variant": "debug"
+ },
+ "cpython-3.14.0b1+debug-linux-x86_64_v4-musl": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": "v4"
+ },
+ "os": "linux",
+ "libc": "musl",
+ "major": 3,
+ "minor": 14,
+ "patch": 0,
+ "prerelease": "b1",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.14.0b1%2B20250604-x86_64_v4-unknown-linux-musl-debug-full.tar.zst",
+ "sha256": "e375062a77f341f34fe57e9109bd22108b1a7abf0fa5d6069a781e266213b0e9",
+ "variant": "debug"
+ },
"cpython-3.14.0a7-darwin-aarch64-none": {
"name": "cpython",
"arch": {
@@ -3119,6 +3919,806 @@
"sha256": "a72cb0116a6511c20de6350a1fc664b96f8f5af4bdc10abdaa7208526a729fad",
"variant": "debug"
},
+ "cpython-3.13.4-darwin-aarch64-none": {
+ "name": "cpython",
+ "arch": {
+ "family": "aarch64",
+ "variant": null
+ },
+ "os": "darwin",
+ "libc": "none",
+ "major": 3,
+ "minor": 13,
+ "patch": 4,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.13.4%2B20250604-aarch64-apple-darwin-install_only_stripped.tar.gz",
+ "sha256": "15c7d478f3e167840ca1a6e0851c19edafc75786ff954bc7b405e9aaca05a6e9",
+ "variant": null
+ },
+ "cpython-3.13.4-darwin-x86_64-none": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": null
+ },
+ "os": "darwin",
+ "libc": "none",
+ "major": 3,
+ "minor": 13,
+ "patch": 4,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.13.4%2B20250604-x86_64-apple-darwin-install_only_stripped.tar.gz",
+ "sha256": "e998a79b99d329a3e868b56d69976c8de45a290d0580e6e3325d0422fe158e49",
+ "variant": null
+ },
+ "cpython-3.13.4-linux-aarch64-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "aarch64",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 13,
+ "patch": 4,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.13.4%2B20250604-aarch64-unknown-linux-gnu-install_only_stripped.tar.gz",
+ "sha256": "c1bf8b9a2df80831ebcd52bb5ee17b60306b95a5b1832278f3644758db2c48e6",
+ "variant": null
+ },
+ "cpython-3.13.4-linux-armv7-gnueabi": {
+ "name": "cpython",
+ "arch": {
+ "family": "armv7",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "gnueabi",
+ "major": 3,
+ "minor": 13,
+ "patch": 4,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.13.4%2B20250604-armv7-unknown-linux-gnueabi-install_only_stripped.tar.gz",
+ "sha256": "267e8ce32918a6faf5e7b534f1a6c292b64b451b645bbd9c2d5e9f1ff75722da",
+ "variant": null
+ },
+ "cpython-3.13.4-linux-armv7-gnueabihf": {
+ "name": "cpython",
+ "arch": {
+ "family": "armv7",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "gnueabihf",
+ "major": 3,
+ "minor": 13,
+ "patch": 4,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.13.4%2B20250604-armv7-unknown-linux-gnueabihf-install_only_stripped.tar.gz",
+ "sha256": "943defb8d2754f5e18228966ac5a217773a58c437b683fc97a6f80f2264c509e",
+ "variant": null
+ },
+ "cpython-3.13.4-linux-powerpc64le-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "powerpc64le",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 13,
+ "patch": 4,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.13.4%2B20250604-ppc64le-unknown-linux-gnu-install_only_stripped.tar.gz",
+ "sha256": "587709c1a3274678c76696e7cabb9f8b3835ef1de8e3ccf3659067982aea10ea",
+ "variant": null
+ },
+ "cpython-3.13.4-linux-riscv64-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "riscv64",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 13,
+ "patch": 4,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.13.4%2B20250604-riscv64-unknown-linux-gnu-install_only_stripped.tar.gz",
+ "sha256": "61b001ea3b5625704aa4114c9f352d9859ff3f1e6100a441874031841f7d7c8b",
+ "variant": null
+ },
+ "cpython-3.13.4-linux-s390x-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "s390x",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 13,
+ "patch": 4,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.13.4%2B20250604-s390x-unknown-linux-gnu-install_only_stripped.tar.gz",
+ "sha256": "fc31c9b40a576cf071c9f2b0e9a2ee47a65f1707218986fba5aac32bbc534de2",
+ "variant": null
+ },
+ "cpython-3.13.4-linux-x86_64-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 13,
+ "patch": 4,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.13.4%2B20250604-x86_64-unknown-linux-gnu-install_only_stripped.tar.gz",
+ "sha256": "0d5139af9c77c8ea3937b907d9694adb7442be0211df869bee0495004a3cb18d",
+ "variant": null
+ },
+ "cpython-3.13.4-linux-x86_64-musl": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "musl",
+ "major": 3,
+ "minor": 13,
+ "patch": 4,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.13.4%2B20250604-x86_64-unknown-linux-musl-install_only_stripped.tar.gz",
+ "sha256": "00610ee98af5e600f1be1b636223375801e944461858d8b4a5015da6005cdeba",
+ "variant": null
+ },
+ "cpython-3.13.4-linux-x86_64_v2-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": "v2"
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 13,
+ "patch": 4,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.13.4%2B20250604-x86_64_v2-unknown-linux-gnu-install_only_stripped.tar.gz",
+ "sha256": "801743f9858f2f37a0eed966e54538280dffc1f2ad98b9f78e875bba371fffe2",
+ "variant": null
+ },
+ "cpython-3.13.4-linux-x86_64_v2-musl": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": "v2"
+ },
+ "os": "linux",
+ "libc": "musl",
+ "major": 3,
+ "minor": 13,
+ "patch": 4,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.13.4%2B20250604-x86_64_v2-unknown-linux-musl-install_only_stripped.tar.gz",
+ "sha256": "9e265c02b9b17483ace13f6214fdd45bf5a74e0dbd88ac0a75c1a83d30a4843e",
+ "variant": null
+ },
+ "cpython-3.13.4-linux-x86_64_v3-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": "v3"
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 13,
+ "patch": 4,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.13.4%2B20250604-x86_64_v3-unknown-linux-gnu-install_only_stripped.tar.gz",
+ "sha256": "b9c2a51abffd8c61414a1078c85492b96dda78aa6a89b08533b2cdc7b7420eca",
+ "variant": null
+ },
+ "cpython-3.13.4-linux-x86_64_v3-musl": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": "v3"
+ },
+ "os": "linux",
+ "libc": "musl",
+ "major": 3,
+ "minor": 13,
+ "patch": 4,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.13.4%2B20250604-x86_64_v3-unknown-linux-musl-install_only_stripped.tar.gz",
+ "sha256": "d75a9d288725440d03bc6a896efc18b7d51145ae5506a0119aae92088f523592",
+ "variant": null
+ },
+ "cpython-3.13.4-linux-x86_64_v4-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": "v4"
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 13,
+ "patch": 4,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.13.4%2B20250604-x86_64_v4-unknown-linux-gnu-install_only_stripped.tar.gz",
+ "sha256": "e4e5a56dbbd4407445ba68fcafb3344ce1ee73dd4cd1eb0d44af1f173742f902",
+ "variant": null
+ },
+ "cpython-3.13.4-linux-x86_64_v4-musl": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": "v4"
+ },
+ "os": "linux",
+ "libc": "musl",
+ "major": 3,
+ "minor": 13,
+ "patch": 4,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.13.4%2B20250604-x86_64_v4-unknown-linux-musl-install_only_stripped.tar.gz",
+ "sha256": "9e29e5bceb4ead44b25e234440629891967472cea89709df5d00d0832757e852",
+ "variant": null
+ },
+ "cpython-3.13.4-windows-i686-none": {
+ "name": "cpython",
+ "arch": {
+ "family": "i686",
+ "variant": null
+ },
+ "os": "windows",
+ "libc": "none",
+ "major": 3,
+ "minor": 13,
+ "patch": 4,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.13.4%2B20250604-i686-pc-windows-msvc-install_only_stripped.tar.gz",
+ "sha256": "d7438d8646c60cb25a986138ee2d6e515096ea570e651aed665e314b457c284e",
+ "variant": null
+ },
+ "cpython-3.13.4-windows-x86_64-none": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": null
+ },
+ "os": "windows",
+ "libc": "none",
+ "major": 3,
+ "minor": 13,
+ "patch": 4,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.13.4%2B20250604-x86_64-pc-windows-msvc-install_only_stripped.tar.gz",
+ "sha256": "24af2e541783037f81a247c9adabf0ab56d5766009bb94e4559d409cbcab9b56",
+ "variant": null
+ },
+ "cpython-3.13.4+freethreaded-darwin-aarch64-none": {
+ "name": "cpython",
+ "arch": {
+ "family": "aarch64",
+ "variant": null
+ },
+ "os": "darwin",
+ "libc": "none",
+ "major": 3,
+ "minor": 13,
+ "patch": 4,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.13.4%2B20250604-aarch64-apple-darwin-freethreaded%2Bpgo%2Blto-full.tar.zst",
+ "sha256": "9a0a8de4b015f8fd355fda4fb5ae8ed708af5ae801b7565cfbf909d75da82cfd",
+ "variant": "freethreaded"
+ },
+ "cpython-3.13.4+freethreaded-darwin-x86_64-none": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": null
+ },
+ "os": "darwin",
+ "libc": "none",
+ "major": 3,
+ "minor": 13,
+ "patch": 4,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.13.4%2B20250604-x86_64-apple-darwin-freethreaded%2Bpgo%2Blto-full.tar.zst",
+ "sha256": "db4198487680cfd9ad2fa1171771b949a22232ad34fd61b3604a25826995b9d8",
+ "variant": "freethreaded"
+ },
+ "cpython-3.13.4+freethreaded-linux-aarch64-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "aarch64",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 13,
+ "patch": 4,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.13.4%2B20250604-aarch64-unknown-linux-gnu-freethreaded%2Blto-full.tar.zst",
+ "sha256": "db29f03366bbc2db6ecfbb06cbb9b97546fe5b2907ee7b7a7d32462d52fc05a1",
+ "variant": "freethreaded"
+ },
+ "cpython-3.13.4+freethreaded-linux-armv7-gnueabi": {
+ "name": "cpython",
+ "arch": {
+ "family": "armv7",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "gnueabi",
+ "major": 3,
+ "minor": 13,
+ "patch": 4,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.13.4%2B20250604-armv7-unknown-linux-gnueabi-freethreaded%2Blto-full.tar.zst",
+ "sha256": "069d929fc9fadbada263d68bc891230d22c55126c66eb1092d81cce28fc4c325",
+ "variant": "freethreaded"
+ },
+ "cpython-3.13.4+freethreaded-linux-armv7-gnueabihf": {
+ "name": "cpython",
+ "arch": {
+ "family": "armv7",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "gnueabihf",
+ "major": 3,
+ "minor": 13,
+ "patch": 4,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.13.4%2B20250604-armv7-unknown-linux-gnueabihf-freethreaded%2Blto-full.tar.zst",
+ "sha256": "13bff9e59896b433a3729c4c48c4e00e02876077f350bd149e4c2d1823565784",
+ "variant": "freethreaded"
+ },
+ "cpython-3.13.4+freethreaded-linux-powerpc64le-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "powerpc64le",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 13,
+ "patch": 4,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.13.4%2B20250604-ppc64le-unknown-linux-gnu-freethreaded%2Blto-full.tar.zst",
+ "sha256": "a7f9fd66185ead073ad8f75d811d82492e9e920c59af73eb53ddcdea03a50be9",
+ "variant": "freethreaded"
+ },
+ "cpython-3.13.4+freethreaded-linux-riscv64-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "riscv64",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 13,
+ "patch": 4,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.13.4%2B20250604-riscv64-unknown-linux-gnu-freethreaded%2Blto-full.tar.zst",
+ "sha256": "ceb9be68c4a7533661af21fd571fdd2bb98f97ea3fe3a367a28444c19ad8022b",
+ "variant": "freethreaded"
+ },
+ "cpython-3.13.4+freethreaded-linux-s390x-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "s390x",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 13,
+ "patch": 4,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.13.4%2B20250604-s390x-unknown-linux-gnu-freethreaded%2Blto-full.tar.zst",
+ "sha256": "0a2c2a8135c3bc6b99c986c68362e41957412a1b15158cacc764b94c40160908",
+ "variant": "freethreaded"
+ },
+ "cpython-3.13.4+freethreaded-linux-x86_64-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 13,
+ "patch": 4,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.13.4%2B20250604-x86_64-unknown-linux-gnu-freethreaded%2Bpgo%2Blto-full.tar.zst",
+ "sha256": "7371e135046d22d1943259e01a93813f314de781661665a2a9ce7735740a1004",
+ "variant": "freethreaded"
+ },
+ "cpython-3.13.4+freethreaded-linux-x86_64-musl": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "musl",
+ "major": 3,
+ "minor": 13,
+ "patch": 4,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.13.4%2B20250604-x86_64-unknown-linux-musl-freethreaded%2Blto-full.tar.zst",
+ "sha256": "49bea5e8ec13902adb25c47f4d5892df66099f715f3553f246e615b63f74a730",
+ "variant": "freethreaded"
+ },
+ "cpython-3.13.4+freethreaded-linux-x86_64_v2-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": "v2"
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 13,
+ "patch": 4,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.13.4%2B20250604-x86_64_v2-unknown-linux-gnu-freethreaded%2Bpgo%2Blto-full.tar.zst",
+ "sha256": "8dadecc39553224923481b1242dcc7399b5682a4918708367c82c2c5daf22ac0",
+ "variant": "freethreaded"
+ },
+ "cpython-3.13.4+freethreaded-linux-x86_64_v2-musl": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": "v2"
+ },
+ "os": "linux",
+ "libc": "musl",
+ "major": 3,
+ "minor": 13,
+ "patch": 4,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.13.4%2B20250604-x86_64_v2-unknown-linux-musl-freethreaded%2Blto-full.tar.zst",
+ "sha256": "e7af1e644b032a26d0009ebc5ff0cd4c81b5f42b49fff8466cfec33aaf4541f6",
+ "variant": "freethreaded"
+ },
+ "cpython-3.13.4+freethreaded-linux-x86_64_v3-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": "v3"
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 13,
+ "patch": 4,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.13.4%2B20250604-x86_64_v3-unknown-linux-gnu-freethreaded%2Bpgo%2Blto-full.tar.zst",
+ "sha256": "44c05857659f014c2cb102d7fa6bbdf9694e5d452ec59ec73b178857d3c5a4fe",
+ "variant": "freethreaded"
+ },
+ "cpython-3.13.4+freethreaded-linux-x86_64_v3-musl": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": "v3"
+ },
+ "os": "linux",
+ "libc": "musl",
+ "major": 3,
+ "minor": 13,
+ "patch": 4,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.13.4%2B20250604-x86_64_v3-unknown-linux-musl-freethreaded%2Blto-full.tar.zst",
+ "sha256": "b01c288164de9b90b051f4234211391292ba17b29fb37814306e5ad973c92285",
+ "variant": "freethreaded"
+ },
+ "cpython-3.13.4+freethreaded-linux-x86_64_v4-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": "v4"
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 13,
+ "patch": 4,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.13.4%2B20250604-x86_64_v4-unknown-linux-gnu-freethreaded%2Bpgo%2Blto-full.tar.zst",
+ "sha256": "8b4481389875b69c3b7666926a7fd92ba31d05e6ba16350dce48c48f19f12618",
+ "variant": "freethreaded"
+ },
+ "cpython-3.13.4+freethreaded-linux-x86_64_v4-musl": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": "v4"
+ },
+ "os": "linux",
+ "libc": "musl",
+ "major": 3,
+ "minor": 13,
+ "patch": 4,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.13.4%2B20250604-x86_64_v4-unknown-linux-musl-freethreaded%2Blto-full.tar.zst",
+ "sha256": "abc49f5df6d8f5d7661094f4db59a703eb561a618cba906eb78c5f420fdb4151",
+ "variant": "freethreaded"
+ },
+ "cpython-3.13.4+freethreaded-windows-i686-none": {
+ "name": "cpython",
+ "arch": {
+ "family": "i686",
+ "variant": null
+ },
+ "os": "windows",
+ "libc": "none",
+ "major": 3,
+ "minor": 13,
+ "patch": 4,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.13.4%2B20250604-i686-pc-windows-msvc-freethreaded%2Bpgo-full.tar.zst",
+ "sha256": "5b80318e2e4911f7f8dcfd2f0fe3bfa65c2810199ba9c57d281330c6a86c50f8",
+ "variant": "freethreaded"
+ },
+ "cpython-3.13.4+freethreaded-windows-x86_64-none": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": null
+ },
+ "os": "windows",
+ "libc": "none",
+ "major": 3,
+ "minor": 13,
+ "patch": 4,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.13.4%2B20250604-x86_64-pc-windows-msvc-freethreaded%2Bpgo-full.tar.zst",
+ "sha256": "597b9eaa75914a21819ef8a7c8aec0fbe34a6e6e393a7c40c5d7f53633172d41",
+ "variant": "freethreaded"
+ },
+ "cpython-3.13.4+debug-linux-aarch64-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "aarch64",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 13,
+ "patch": 4,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.13.4%2B20250604-aarch64-unknown-linux-gnu-debug-full.tar.zst",
+ "sha256": "3c2701522cc05954999f3effb4e0aa6b18e2346c89692ff2b7a812196eb43088",
+ "variant": "debug"
+ },
+ "cpython-3.13.4+debug-linux-armv7-gnueabi": {
+ "name": "cpython",
+ "arch": {
+ "family": "armv7",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "gnueabi",
+ "major": 3,
+ "minor": 13,
+ "patch": 4,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.13.4%2B20250604-armv7-unknown-linux-gnueabi-debug-full.tar.zst",
+ "sha256": "0a4ad399350ccc8faf2557db5b8ab58ed4c9a40a427603e74d9eb277b4d9f7ab",
+ "variant": "debug"
+ },
+ "cpython-3.13.4+debug-linux-armv7-gnueabihf": {
+ "name": "cpython",
+ "arch": {
+ "family": "armv7",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "gnueabihf",
+ "major": 3,
+ "minor": 13,
+ "patch": 4,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.13.4%2B20250604-armv7-unknown-linux-gnueabihf-debug-full.tar.zst",
+ "sha256": "82d81489a9ffc48d64e4594c3fc191c41cb68113cc02bf8bc962abac970c7dc1",
+ "variant": "debug"
+ },
+ "cpython-3.13.4+debug-linux-powerpc64le-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "powerpc64le",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 13,
+ "patch": 4,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.13.4%2B20250604-ppc64le-unknown-linux-gnu-debug-full.tar.zst",
+ "sha256": "458c5c5ce1395602d06ea7c4c4e83e6fb7d10636076d42f8700f1de4ed442ad7",
+ "variant": "debug"
+ },
+ "cpython-3.13.4+debug-linux-riscv64-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "riscv64",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 13,
+ "patch": 4,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.13.4%2B20250604-riscv64-unknown-linux-gnu-debug-full.tar.zst",
+ "sha256": "df654d622c6d8dea5b52fc2162528c24c9d002aa31573d67497c8df10b052c83",
+ "variant": "debug"
+ },
+ "cpython-3.13.4+debug-linux-s390x-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "s390x",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 13,
+ "patch": 4,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.13.4%2B20250604-s390x-unknown-linux-gnu-debug-full.tar.zst",
+ "sha256": "f9d0fa69cb1ff2f7d6807e86c34244661d0997b75269e3d789a53252a8ce9722",
+ "variant": "debug"
+ },
+ "cpython-3.13.4+debug-linux-x86_64-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 13,
+ "patch": 4,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.13.4%2B20250604-x86_64-unknown-linux-gnu-debug-full.tar.zst",
+ "sha256": "a249d97f487f7cd0ea6ac7be4c26ac9fdcb9ac40fea6870718dce78342481b39",
+ "variant": "debug"
+ },
+ "cpython-3.13.4+debug-linux-x86_64-musl": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "musl",
+ "major": 3,
+ "minor": 13,
+ "patch": 4,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.13.4%2B20250604-x86_64-unknown-linux-musl-debug-full.tar.zst",
+ "sha256": "21c622ff3ec6f59a325e22bc7a11543d44fe180852fc37f97188d0e4d7c1eaaf",
+ "variant": "debug"
+ },
+ "cpython-3.13.4+debug-linux-x86_64_v2-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": "v2"
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 13,
+ "patch": 4,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.13.4%2B20250604-x86_64_v2-unknown-linux-gnu-debug-full.tar.zst",
+ "sha256": "4861ab2725c68b3c7112e774cd747580483310ffdeed757be1d9d0a5018d83a2",
+ "variant": "debug"
+ },
+ "cpython-3.13.4+debug-linux-x86_64_v2-musl": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": "v2"
+ },
+ "os": "linux",
+ "libc": "musl",
+ "major": 3,
+ "minor": 13,
+ "patch": 4,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.13.4%2B20250604-x86_64_v2-unknown-linux-musl-debug-full.tar.zst",
+ "sha256": "3c5935e84cabfeccca2383e4bf1729bb805a00bc72f16dc1b4c52d264e126ebb",
+ "variant": "debug"
+ },
+ "cpython-3.13.4+debug-linux-x86_64_v3-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": "v3"
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 13,
+ "patch": 4,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.13.4%2B20250604-x86_64_v3-unknown-linux-gnu-debug-full.tar.zst",
+ "sha256": "f21207cc19f78f23ed9b5d7d0371df5a306427122978953ab6945aa79694dd24",
+ "variant": "debug"
+ },
+ "cpython-3.13.4+debug-linux-x86_64_v3-musl": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": "v3"
+ },
+ "os": "linux",
+ "libc": "musl",
+ "major": 3,
+ "minor": 13,
+ "patch": 4,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.13.4%2B20250604-x86_64_v3-unknown-linux-musl-debug-full.tar.zst",
+ "sha256": "1cdc33eefa6b4efe1bfffae5f6c583813fe27c2f6600fbd6b966e68690da32c0",
+ "variant": "debug"
+ },
+ "cpython-3.13.4+debug-linux-x86_64_v4-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": "v4"
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 13,
+ "patch": 4,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.13.4%2B20250604-x86_64_v4-unknown-linux-gnu-debug-full.tar.zst",
+ "sha256": "67da23f1c517573013742828920cf982aad3c14e3fe3166022b9506d164eeb8d",
+ "variant": "debug"
+ },
+ "cpython-3.13.4+debug-linux-x86_64_v4-musl": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": "v4"
+ },
+ "os": "linux",
+ "libc": "musl",
+ "major": 3,
+ "minor": 13,
+ "patch": 4,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.13.4%2B20250604-x86_64_v4-unknown-linux-musl-debug-full.tar.zst",
+ "sha256": "c39cc0375ea2bb44d79d4b4cf6fe7bd0d337712b930431aaf16d3b07d4288e3a",
+ "variant": "debug"
+ },
"cpython-3.13.3-darwin-aarch64-none": {
"name": "cpython",
"arch": {
@@ -6527,6 +8127,518 @@
"sha256": "bd021bd31769abec42a07cf77cc4937dc83a0713b5038269e62e268f0e9639d1",
"variant": "debug"
},
+ "cpython-3.12.11-darwin-aarch64-none": {
+ "name": "cpython",
+ "arch": {
+ "family": "aarch64",
+ "variant": null
+ },
+ "os": "darwin",
+ "libc": "none",
+ "major": 3,
+ "minor": 12,
+ "patch": 11,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.12.11%2B20250604-aarch64-apple-darwin-install_only_stripped.tar.gz",
+ "sha256": "f831e8feacdb0408b965133caa6178ad296eceb61ec8aafafe6bb4f387ff426f",
+ "variant": null
+ },
+ "cpython-3.12.11-darwin-x86_64-none": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": null
+ },
+ "os": "darwin",
+ "libc": "none",
+ "major": 3,
+ "minor": 12,
+ "patch": 11,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.12.11%2B20250604-x86_64-apple-darwin-install_only_stripped.tar.gz",
+ "sha256": "7ed52279e20414555a8b36ed1c3aa60d73396a618a88a93123b52720d890db62",
+ "variant": null
+ },
+ "cpython-3.12.11-linux-aarch64-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "aarch64",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 12,
+ "patch": 11,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.12.11%2B20250604-aarch64-unknown-linux-gnu-install_only_stripped.tar.gz",
+ "sha256": "674473a70be6b6bfc028fc1dfc3d08cad63c09409e1e7ad6927fa23d388a201a",
+ "variant": null
+ },
+ "cpython-3.12.11-linux-armv7-gnueabi": {
+ "name": "cpython",
+ "arch": {
+ "family": "armv7",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "gnueabi",
+ "major": 3,
+ "minor": 12,
+ "patch": 11,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.12.11%2B20250604-armv7-unknown-linux-gnueabi-install_only_stripped.tar.gz",
+ "sha256": "8a6e054cbdf4e0b05adbfca778db6aee8efc7ba64b055edfc77ca973a3611132",
+ "variant": null
+ },
+ "cpython-3.12.11-linux-armv7-gnueabihf": {
+ "name": "cpython",
+ "arch": {
+ "family": "armv7",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "gnueabihf",
+ "major": 3,
+ "minor": 12,
+ "patch": 11,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.12.11%2B20250604-armv7-unknown-linux-gnueabihf-install_only_stripped.tar.gz",
+ "sha256": "20f34f97b29adda58f875e8c08bf57ea8b4a4c844482d6f77c36917e2c505703",
+ "variant": null
+ },
+ "cpython-3.12.11-linux-powerpc64le-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "powerpc64le",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 12,
+ "patch": 11,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.12.11%2B20250604-ppc64le-unknown-linux-gnu-install_only_stripped.tar.gz",
+ "sha256": "22ad4c6b518ce9ca3090ea90ac0b356456136fd9c3f37558b315d1d8554d6bb6",
+ "variant": null
+ },
+ "cpython-3.12.11-linux-riscv64-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "riscv64",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 12,
+ "patch": 11,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.12.11%2B20250604-riscv64-unknown-linux-gnu-install_only_stripped.tar.gz",
+ "sha256": "56ec06974667a36ae536bcd51caa42b7121e210734582753eb03002777841a47",
+ "variant": null
+ },
+ "cpython-3.12.11-linux-s390x-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "s390x",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 12,
+ "patch": 11,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.12.11%2B20250604-s390x-unknown-linux-gnu-install_only_stripped.tar.gz",
+ "sha256": "8c8cf7fa680a01a1e75b0878cc8c5785d7c074c0750bd714bdc38feb60b538fb",
+ "variant": null
+ },
+ "cpython-3.12.11-linux-x86_64-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 12,
+ "patch": 11,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.12.11%2B20250604-x86_64-unknown-linux-gnu-install_only_stripped.tar.gz",
+ "sha256": "71bd7685d6ae26dfad23ddaa9712dc4713db608a273c2e50974ad0c3748de691",
+ "variant": null
+ },
+ "cpython-3.12.11-linux-x86_64-musl": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "musl",
+ "major": 3,
+ "minor": 12,
+ "patch": 11,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.12.11%2B20250604-x86_64-unknown-linux-musl-install_only_stripped.tar.gz",
+ "sha256": "530f33db3dbadcf9abb37fa92dee7f9419a8e4ca50a2606ac4afddeb5548f262",
+ "variant": null
+ },
+ "cpython-3.12.11-linux-x86_64_v2-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": "v2"
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 12,
+ "patch": 11,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.12.11%2B20250604-x86_64_v2-unknown-linux-gnu-install_only_stripped.tar.gz",
+ "sha256": "96287411eec81af2ef5451ffcb3ba60f50438b8a27ccc6a4a881c9cb638c8e34",
+ "variant": null
+ },
+ "cpython-3.12.11-linux-x86_64_v2-musl": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": "v2"
+ },
+ "os": "linux",
+ "libc": "musl",
+ "major": 3,
+ "minor": 12,
+ "patch": 11,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.12.11%2B20250604-x86_64_v2-unknown-linux-musl-install_only_stripped.tar.gz",
+ "sha256": "32a14e868e3f399142e79a0918d2b7ab08644386ca92b3b0f869f10f8fa1f047",
+ "variant": null
+ },
+ "cpython-3.12.11-linux-x86_64_v3-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": "v3"
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 12,
+ "patch": 11,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.12.11%2B20250604-x86_64_v3-unknown-linux-gnu-install_only_stripped.tar.gz",
+ "sha256": "5a979167dc53a7dc0ff3c79b22315c62c372c5a126fed547927295e09de2c155",
+ "variant": null
+ },
+ "cpython-3.12.11-linux-x86_64_v3-musl": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": "v3"
+ },
+ "os": "linux",
+ "libc": "musl",
+ "major": 3,
+ "minor": 12,
+ "patch": 11,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.12.11%2B20250604-x86_64_v3-unknown-linux-musl-install_only_stripped.tar.gz",
+ "sha256": "d055778461a386c16015677ee87f14b0098ea581b81ef8c92a4d869b965485bb",
+ "variant": null
+ },
+ "cpython-3.12.11-linux-x86_64_v4-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": "v4"
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 12,
+ "patch": 11,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.12.11%2B20250604-x86_64_v4-unknown-linux-gnu-install_only_stripped.tar.gz",
+ "sha256": "72c5cd81fc0e87684b0e246c607277499d1a7f79070982af6fb73c9cc90fabfe",
+ "variant": null
+ },
+ "cpython-3.12.11-linux-x86_64_v4-musl": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": "v4"
+ },
+ "os": "linux",
+ "libc": "musl",
+ "major": 3,
+ "minor": 12,
+ "patch": 11,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.12.11%2B20250604-x86_64_v4-unknown-linux-musl-install_only_stripped.tar.gz",
+ "sha256": "09e15984cbe2baf3af28f8b5b8771f882208e79af992440cc5b4ec37b2f284fc",
+ "variant": null
+ },
+ "cpython-3.12.11-windows-i686-none": {
+ "name": "cpython",
+ "arch": {
+ "family": "i686",
+ "variant": null
+ },
+ "os": "windows",
+ "libc": "none",
+ "major": 3,
+ "minor": 12,
+ "patch": 11,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.12.11%2B20250604-i686-pc-windows-msvc-install_only_stripped.tar.gz",
+ "sha256": "17ffab420b0206ba231dd69213d565b6665d5ce33678c386b26151b14c019172",
+ "variant": null
+ },
+ "cpython-3.12.11-windows-x86_64-none": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": null
+ },
+ "os": "windows",
+ "libc": "none",
+ "major": 3,
+ "minor": 12,
+ "patch": 11,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.12.11%2B20250604-x86_64-pc-windows-msvc-install_only_stripped.tar.gz",
+ "sha256": "bf30bd98e67db0768b4c7b5b47a2b1a40fa9b3994dd245823d2125ba0a6ff139",
+ "variant": null
+ },
+ "cpython-3.12.11+debug-linux-aarch64-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "aarch64",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 12,
+ "patch": 11,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.12.11%2B20250604-aarch64-unknown-linux-gnu-debug-full.tar.zst",
+ "sha256": "b07fe786e9d2981a4483260a46036d3c1f5dc0fe8ce8acd9145b7b9a6c9e2bbb",
+ "variant": "debug"
+ },
+ "cpython-3.12.11+debug-linux-armv7-gnueabi": {
+ "name": "cpython",
+ "arch": {
+ "family": "armv7",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "gnueabi",
+ "major": 3,
+ "minor": 12,
+ "patch": 11,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.12.11%2B20250604-armv7-unknown-linux-gnueabi-debug-full.tar.zst",
+ "sha256": "666f1e260f855f91c3b015fe7face71de3b662c71ea6b1bb585fd3f6ce2353b7",
+ "variant": "debug"
+ },
+ "cpython-3.12.11+debug-linux-armv7-gnueabihf": {
+ "name": "cpython",
+ "arch": {
+ "family": "armv7",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "gnueabihf",
+ "major": 3,
+ "minor": 12,
+ "patch": 11,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.12.11%2B20250604-armv7-unknown-linux-gnueabihf-debug-full.tar.zst",
+ "sha256": "d8696f03ecce2c807d86ccee6ef2f805177bc26968a81e60818963ef031fef5b",
+ "variant": "debug"
+ },
+ "cpython-3.12.11+debug-linux-powerpc64le-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "powerpc64le",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 12,
+ "patch": 11,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.12.11%2B20250604-ppc64le-unknown-linux-gnu-debug-full.tar.zst",
+ "sha256": "e4acf1dc0e7a4bfc4fcaa43f967f6a3a60a3d67cddb47a0b2e659abc0e642ff3",
+ "variant": "debug"
+ },
+ "cpython-3.12.11+debug-linux-riscv64-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "riscv64",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 12,
+ "patch": 11,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.12.11%2B20250604-riscv64-unknown-linux-gnu-debug-full.tar.zst",
+ "sha256": "0b1791dd8020700ee8d0eae88e6f80ff38d847ed6b2eaefcd3cddff961f9cbea",
+ "variant": "debug"
+ },
+ "cpython-3.12.11+debug-linux-s390x-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "s390x",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 12,
+ "patch": 11,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.12.11%2B20250604-s390x-unknown-linux-gnu-debug-full.tar.zst",
+ "sha256": "6b6028d9e3c3c2aab90bdf9f2abbe82557d318fdefc2fb778443d5264cae1827",
+ "variant": "debug"
+ },
+ "cpython-3.12.11+debug-linux-x86_64-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 12,
+ "patch": 11,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.12.11%2B20250604-x86_64-unknown-linux-gnu-debug-full.tar.zst",
+ "sha256": "6cbe784b1a36f64803f402571d2c62f090347c5881494dcc3d1239371087a407",
+ "variant": "debug"
+ },
+ "cpython-3.12.11+debug-linux-x86_64-musl": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "musl",
+ "major": 3,
+ "minor": 12,
+ "patch": 11,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.12.11%2B20250604-x86_64-unknown-linux-musl-debug-full.tar.zst",
+ "sha256": "8ef7025bdb758870b585ae1bd6ac965c305f9a3b318abeb18cfb8bf0c961c379",
+ "variant": "debug"
+ },
+ "cpython-3.12.11+debug-linux-x86_64_v2-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": "v2"
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 12,
+ "patch": 11,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.12.11%2B20250604-x86_64_v2-unknown-linux-gnu-debug-full.tar.zst",
+ "sha256": "1343355cc1c63c7aec18ac0bec9b5f1679420f6c25760a10ba3b98a7b0ea5dc7",
+ "variant": "debug"
+ },
+ "cpython-3.12.11+debug-linux-x86_64_v2-musl": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": "v2"
+ },
+ "os": "linux",
+ "libc": "musl",
+ "major": 3,
+ "minor": 12,
+ "patch": 11,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.12.11%2B20250604-x86_64_v2-unknown-linux-musl-debug-full.tar.zst",
+ "sha256": "d84921fe6a4741f8e3b4b7de2cd2614424590efd13f962126950df6b92b45206",
+ "variant": "debug"
+ },
+ "cpython-3.12.11+debug-linux-x86_64_v3-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": "v3"
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 12,
+ "patch": 11,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.12.11%2B20250604-x86_64_v3-unknown-linux-gnu-debug-full.tar.zst",
+ "sha256": "23777945727900b33c8b170be712a25a1ba58e7cd26d80350389cbd4e88f3790",
+ "variant": "debug"
+ },
+ "cpython-3.12.11+debug-linux-x86_64_v3-musl": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": "v3"
+ },
+ "os": "linux",
+ "libc": "musl",
+ "major": 3,
+ "minor": 12,
+ "patch": 11,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.12.11%2B20250604-x86_64_v3-unknown-linux-musl-debug-full.tar.zst",
+ "sha256": "08194562c32c20ecec9f6bf49ce2c381859ec34d15e29f90cfc0d19ec2ea56dc",
+ "variant": "debug"
+ },
+ "cpython-3.12.11+debug-linux-x86_64_v4-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": "v4"
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 12,
+ "patch": 11,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.12.11%2B20250604-x86_64_v4-unknown-linux-gnu-debug-full.tar.zst",
+ "sha256": "de0b34205aabc4290cb1f7a34fa333ae595240cc77204ebf282eef7ea92d2884",
+ "variant": "debug"
+ },
+ "cpython-3.12.11+debug-linux-x86_64_v4-musl": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": "v4"
+ },
+ "os": "linux",
+ "libc": "musl",
+ "major": 3,
+ "minor": 12,
+ "patch": 11,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.12.11%2B20250604-x86_64_v4-unknown-linux-musl-debug-full.tar.zst",
+ "sha256": "84a0711643229dfeb7b2b2653e6b2a7f4fefbade95dc1a4d2fbabbbcb98a360a",
+ "variant": "debug"
+ },
"cpython-3.12.10-darwin-aarch64-none": {
"name": "cpython",
"arch": {
@@ -10559,6 +12671,518 @@
"sha256": "3c900c3495453cfa7e7626026ef0d8be3adf589b2b810969f6a9f44dba3c129d",
"variant": "debug"
},
+ "cpython-3.11.13-darwin-aarch64-none": {
+ "name": "cpython",
+ "arch": {
+ "family": "aarch64",
+ "variant": null
+ },
+ "os": "darwin",
+ "libc": "none",
+ "major": 3,
+ "minor": 11,
+ "patch": 13,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.11.13%2B20250604-aarch64-apple-darwin-install_only_stripped.tar.gz",
+ "sha256": "fce3646da8834e86fcd95fac3be69580cdd112fc44fd4c1bf0ac36a3cbc41458",
+ "variant": null
+ },
+ "cpython-3.11.13-darwin-x86_64-none": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": null
+ },
+ "os": "darwin",
+ "libc": "none",
+ "major": 3,
+ "minor": 11,
+ "patch": 13,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.11.13%2B20250604-x86_64-apple-darwin-install_only_stripped.tar.gz",
+ "sha256": "3a533f872d2174f18b61be70830b7b8dc6089d139afcc9c1f3f4e2f537f1564e",
+ "variant": null
+ },
+ "cpython-3.11.13-linux-aarch64-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "aarch64",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 11,
+ "patch": 13,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.11.13%2B20250604-aarch64-unknown-linux-gnu-install_only_stripped.tar.gz",
+ "sha256": "ea6c5736f5b9d17cd641227c1cf35fa7fdb8f4fe9159d24e187ffbb06a466687",
+ "variant": null
+ },
+ "cpython-3.11.13-linux-armv7-gnueabi": {
+ "name": "cpython",
+ "arch": {
+ "family": "armv7",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "gnueabi",
+ "major": 3,
+ "minor": 11,
+ "patch": 13,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.11.13%2B20250604-armv7-unknown-linux-gnueabi-install_only_stripped.tar.gz",
+ "sha256": "976c6a8af0191d4b22cd02542a6d688de0b15c6b43cfe7dee64709f30d4d4bbe",
+ "variant": null
+ },
+ "cpython-3.11.13-linux-armv7-gnueabihf": {
+ "name": "cpython",
+ "arch": {
+ "family": "armv7",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "gnueabihf",
+ "major": 3,
+ "minor": 11,
+ "patch": 13,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.11.13%2B20250604-armv7-unknown-linux-gnueabihf-install_only_stripped.tar.gz",
+ "sha256": "ec2459c24a2a7a67719a5a047926f58502bcfbc85ec8419d34a5cbc3293af2fa",
+ "variant": null
+ },
+ "cpython-3.11.13-linux-powerpc64le-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "powerpc64le",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 11,
+ "patch": 13,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.11.13%2B20250604-ppc64le-unknown-linux-gnu-install_only_stripped.tar.gz",
+ "sha256": "9c1c449addd769132edce268d2bfb149a60e6f90799e79f613a813ea0ccd8e07",
+ "variant": null
+ },
+ "cpython-3.11.13-linux-riscv64-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "riscv64",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 11,
+ "patch": 13,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.11.13%2B20250604-riscv64-unknown-linux-gnu-install_only_stripped.tar.gz",
+ "sha256": "87e8a7e86cced245eb78cfb38488e8d75750d62215db3747edd480cf1e70cddc",
+ "variant": null
+ },
+ "cpython-3.11.13-linux-s390x-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "s390x",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 11,
+ "patch": 13,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.11.13%2B20250604-s390x-unknown-linux-gnu-install_only_stripped.tar.gz",
+ "sha256": "157c02a85c22a9ef2a046b25cbfb5273690d9ee1e054f3b723c5d7bd7ec90e7f",
+ "variant": null
+ },
+ "cpython-3.11.13-linux-x86_64-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 11,
+ "patch": 13,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.11.13%2B20250604-x86_64-unknown-linux-gnu-install_only_stripped.tar.gz",
+ "sha256": "ad27e3dbaa0d4688dc74bee1f69b5e2303988960c0ee356d431ae528de2e1f8f",
+ "variant": null
+ },
+ "cpython-3.11.13-linux-x86_64-musl": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "musl",
+ "major": 3,
+ "minor": 11,
+ "patch": 13,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.11.13%2B20250604-x86_64-unknown-linux-musl-install_only_stripped.tar.gz",
+ "sha256": "d3be62d5e151365e3a8fa34b3bd8f572d8211d3952a9c7d4f668d819c6a70ad5",
+ "variant": null
+ },
+ "cpython-3.11.13-linux-x86_64_v2-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": "v2"
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 11,
+ "patch": 13,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.11.13%2B20250604-x86_64_v2-unknown-linux-gnu-install_only_stripped.tar.gz",
+ "sha256": "0766b4c138e1e2074fe16e4268e276e7285e82c08c8fd0d5120ba8879cc28508",
+ "variant": null
+ },
+ "cpython-3.11.13-linux-x86_64_v2-musl": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": "v2"
+ },
+ "os": "linux",
+ "libc": "musl",
+ "major": 3,
+ "minor": 11,
+ "patch": 13,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.11.13%2B20250604-x86_64_v2-unknown-linux-musl-install_only_stripped.tar.gz",
+ "sha256": "f97e8f79f0587339332de7a479ad82a62f15b45a67320d7614f13edc7bed6717",
+ "variant": null
+ },
+ "cpython-3.11.13-linux-x86_64_v3-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": "v3"
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 11,
+ "patch": 13,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.11.13%2B20250604-x86_64_v3-unknown-linux-gnu-install_only_stripped.tar.gz",
+ "sha256": "f7e55efcad83bb11d5d02dbebd9bbd65cd067f2fe1014ad94b4af26f45685ba2",
+ "variant": null
+ },
+ "cpython-3.11.13-linux-x86_64_v3-musl": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": "v3"
+ },
+ "os": "linux",
+ "libc": "musl",
+ "major": 3,
+ "minor": 11,
+ "patch": 13,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.11.13%2B20250604-x86_64_v3-unknown-linux-musl-install_only_stripped.tar.gz",
+ "sha256": "0e98a32c550e6096076be2fc3586ed351bdfbdca21a12e5ea91f89354bd4b6fa",
+ "variant": null
+ },
+ "cpython-3.11.13-linux-x86_64_v4-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": "v4"
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 11,
+ "patch": 13,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.11.13%2B20250604-x86_64_v4-unknown-linux-gnu-install_only_stripped.tar.gz",
+ "sha256": "e6a9453c0a0edb0c47dc1337e38c0693e2c7aaaa2ee791618c7e36518cdb51f2",
+ "variant": null
+ },
+ "cpython-3.11.13-linux-x86_64_v4-musl": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": "v4"
+ },
+ "os": "linux",
+ "libc": "musl",
+ "major": 3,
+ "minor": 11,
+ "patch": 13,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.11.13%2B20250604-x86_64_v4-unknown-linux-musl-install_only_stripped.tar.gz",
+ "sha256": "801106590f7e967d69652df0cccc9ac121de38e1a2c1b3e852025afc2652da9f",
+ "variant": null
+ },
+ "cpython-3.11.13-windows-i686-none": {
+ "name": "cpython",
+ "arch": {
+ "family": "i686",
+ "variant": null
+ },
+ "os": "windows",
+ "libc": "none",
+ "major": 3,
+ "minor": 11,
+ "patch": 13,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.11.13%2B20250604-i686-pc-windows-msvc-install_only_stripped.tar.gz",
+ "sha256": "46f69f5b9b2dd9a38f23e3f76e7b6ff342d7bef63695212895cbcbc8f2926004",
+ "variant": null
+ },
+ "cpython-3.11.13-windows-x86_64-none": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": null
+ },
+ "os": "windows",
+ "libc": "none",
+ "major": 3,
+ "minor": 11,
+ "patch": 13,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.11.13%2B20250604-x86_64-pc-windows-msvc-install_only_stripped.tar.gz",
+ "sha256": "16b88d316b3baac72b882893e982fb8f39edf5317fdfdf7c96f68cb023ba4852",
+ "variant": null
+ },
+ "cpython-3.11.13+debug-linux-aarch64-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "aarch64",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 11,
+ "patch": 13,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.11.13%2B20250604-aarch64-unknown-linux-gnu-debug-full.tar.zst",
+ "sha256": "6da8e87f12619df44b45cb87fe7a7c7d07df3bf9e73491bebc6eadfb936427bb",
+ "variant": "debug"
+ },
+ "cpython-3.11.13+debug-linux-armv7-gnueabi": {
+ "name": "cpython",
+ "arch": {
+ "family": "armv7",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "gnueabi",
+ "major": 3,
+ "minor": 11,
+ "patch": 13,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.11.13%2B20250604-armv7-unknown-linux-gnueabi-debug-full.tar.zst",
+ "sha256": "acc0ca10f4761815dd0bc44687f4351cacb8c7926831f862d1924488bfe91153",
+ "variant": "debug"
+ },
+ "cpython-3.11.13+debug-linux-armv7-gnueabihf": {
+ "name": "cpython",
+ "arch": {
+ "family": "armv7",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "gnueabihf",
+ "major": 3,
+ "minor": 11,
+ "patch": 13,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.11.13%2B20250604-armv7-unknown-linux-gnueabihf-debug-full.tar.zst",
+ "sha256": "9c5a72f6f0d0d7571c9984a8f4d1019bb73ace6bf09ec738af0157244036e69f",
+ "variant": "debug"
+ },
+ "cpython-3.11.13+debug-linux-powerpc64le-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "powerpc64le",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 11,
+ "patch": 13,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.11.13%2B20250604-ppc64le-unknown-linux-gnu-debug-full.tar.zst",
+ "sha256": "ea0255b8947c6134ee665c848cd62255a383109a371436d67ba5cf670fa3f59c",
+ "variant": "debug"
+ },
+ "cpython-3.11.13+debug-linux-riscv64-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "riscv64",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 11,
+ "patch": 13,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.11.13%2B20250604-riscv64-unknown-linux-gnu-debug-full.tar.zst",
+ "sha256": "9be52a460b84f191019b7942f2370fa0616c052b513c026d4de0bbb35a123deb",
+ "variant": "debug"
+ },
+ "cpython-3.11.13+debug-linux-s390x-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "s390x",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 11,
+ "patch": 13,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.11.13%2B20250604-s390x-unknown-linux-gnu-debug-full.tar.zst",
+ "sha256": "75c1cf70165750624688beb272a6dfa6a6778f9a81930b161fec27f4ee8e6b24",
+ "variant": "debug"
+ },
+ "cpython-3.11.13+debug-linux-x86_64-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 11,
+ "patch": 13,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.11.13%2B20250604-x86_64-unknown-linux-gnu-debug-full.tar.zst",
+ "sha256": "2aa5804e64b06091b3a72405abde53517188c5f77e8d5e98a5e405e313284eb7",
+ "variant": "debug"
+ },
+ "cpython-3.11.13+debug-linux-x86_64-musl": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "musl",
+ "major": 3,
+ "minor": 11,
+ "patch": 13,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.11.13%2B20250604-x86_64-unknown-linux-musl-debug-full.tar.zst",
+ "sha256": "f18b22d6933d4334910736932bd1f232178841b2a467dd87d41c008f8e8cb99b",
+ "variant": "debug"
+ },
+ "cpython-3.11.13+debug-linux-x86_64_v2-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": "v2"
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 11,
+ "patch": 13,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.11.13%2B20250604-x86_64_v2-unknown-linux-gnu-debug-full.tar.zst",
+ "sha256": "25126df2224ee12f449acfd706e0f393e4eaa3880d911d23afdb177d44786b53",
+ "variant": "debug"
+ },
+ "cpython-3.11.13+debug-linux-x86_64_v2-musl": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": "v2"
+ },
+ "os": "linux",
+ "libc": "musl",
+ "major": 3,
+ "minor": 11,
+ "patch": 13,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.11.13%2B20250604-x86_64_v2-unknown-linux-musl-debug-full.tar.zst",
+ "sha256": "2e816d1b44580b77c0534777215b2fce32b06b3081a1cacd10400e1e630c65e8",
+ "variant": "debug"
+ },
+ "cpython-3.11.13+debug-linux-x86_64_v3-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": "v3"
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 11,
+ "patch": 13,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.11.13%2B20250604-x86_64_v3-unknown-linux-gnu-debug-full.tar.zst",
+ "sha256": "e62fe17549793fc2a2ba32ef6d81ec39e17fd15a3e92eb7a7b9ce9369c447f77",
+ "variant": "debug"
+ },
+ "cpython-3.11.13+debug-linux-x86_64_v3-musl": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": "v3"
+ },
+ "os": "linux",
+ "libc": "musl",
+ "major": 3,
+ "minor": 11,
+ "patch": 13,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.11.13%2B20250604-x86_64_v3-unknown-linux-musl-debug-full.tar.zst",
+ "sha256": "0475503da3655ec9459a0bac836021d7c88b2c63ce23c88f5a4a56b432c227c1",
+ "variant": "debug"
+ },
+ "cpython-3.11.13+debug-linux-x86_64_v4-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": "v4"
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 11,
+ "patch": 13,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.11.13%2B20250604-x86_64_v4-unknown-linux-gnu-debug-full.tar.zst",
+ "sha256": "10a25150981aa6eb1a8e1421f93acccb9250a455d310d89ba8bcf7818d43a319",
+ "variant": "debug"
+ },
+ "cpython-3.11.13+debug-linux-x86_64_v4-musl": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": "v4"
+ },
+ "os": "linux",
+ "libc": "musl",
+ "major": 3,
+ "minor": 11,
+ "patch": 13,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.11.13%2B20250604-x86_64_v4-unknown-linux-musl-debug-full.tar.zst",
+ "sha256": "06352d73517471e7a60a5bf7bb7d165564cd98c4d85dc84058b646da6a61b007",
+ "variant": "debug"
+ },
"cpython-3.11.12-darwin-aarch64-none": {
"name": "cpython",
"arch": {
@@ -14335,6 +16959,518 @@
"sha256": "abf6c9a813e3c600b095ccfe0fb8c21e2b4156df342e9cf4ea34cb5759a0ff1c",
"variant": "debug"
},
+ "cpython-3.10.18-darwin-aarch64-none": {
+ "name": "cpython",
+ "arch": {
+ "family": "aarch64",
+ "variant": null
+ },
+ "os": "darwin",
+ "libc": "none",
+ "major": 3,
+ "minor": 10,
+ "patch": 18,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.10.18%2B20250604-aarch64-apple-darwin-install_only_stripped.tar.gz",
+ "sha256": "3d0250ac89b0990ec0715ebffd59108b6a8267efd122cea9e50e6155fa0c22b6",
+ "variant": null
+ },
+ "cpython-3.10.18-darwin-x86_64-none": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": null
+ },
+ "os": "darwin",
+ "libc": "none",
+ "major": 3,
+ "minor": 10,
+ "patch": 18,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.10.18%2B20250604-x86_64-apple-darwin-install_only_stripped.tar.gz",
+ "sha256": "253e24f8a828711ec7fd753e451751fd0dda578ee9edfbf55c3bebeba3fb1ba7",
+ "variant": null
+ },
+ "cpython-3.10.18-linux-aarch64-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "aarch64",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 10,
+ "patch": 18,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.10.18%2B20250604-aarch64-unknown-linux-gnu-install_only_stripped.tar.gz",
+ "sha256": "a7d5320d19ca8bea0938cdbb0cc5996ca6b2345e04a6c1ed82edd531bd528734",
+ "variant": null
+ },
+ "cpython-3.10.18-linux-armv7-gnueabi": {
+ "name": "cpython",
+ "arch": {
+ "family": "armv7",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "gnueabi",
+ "major": 3,
+ "minor": 10,
+ "patch": 18,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.10.18%2B20250604-armv7-unknown-linux-gnueabi-install_only_stripped.tar.gz",
+ "sha256": "da98d3eed90fd57d17cde0ea7121c38bf4e54754084004ad5900c8ac98f69a73",
+ "variant": null
+ },
+ "cpython-3.10.18-linux-armv7-gnueabihf": {
+ "name": "cpython",
+ "arch": {
+ "family": "armv7",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "gnueabihf",
+ "major": 3,
+ "minor": 10,
+ "patch": 18,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.10.18%2B20250604-armv7-unknown-linux-gnueabihf-install_only_stripped.tar.gz",
+ "sha256": "ca25e59d3e230de1cbf2e3e3ce92d24d82c1860588133d2b1daeefc7b83adad0",
+ "variant": null
+ },
+ "cpython-3.10.18-linux-powerpc64le-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "powerpc64le",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 10,
+ "patch": 18,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.10.18%2B20250604-ppc64le-unknown-linux-gnu-install_only_stripped.tar.gz",
+ "sha256": "503a7e4b53d2b9367996cde1bfe65170691092d537d8f67e82ea31e674eb5265",
+ "variant": null
+ },
+ "cpython-3.10.18-linux-riscv64-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "riscv64",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 10,
+ "patch": 18,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.10.18%2B20250604-riscv64-unknown-linux-gnu-install_only_stripped.tar.gz",
+ "sha256": "38ea6ee623c73422a3f5d099dccdb4d0c4a02dceb242ea6986fe80e30856bf0b",
+ "variant": null
+ },
+ "cpython-3.10.18-linux-s390x-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "s390x",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 10,
+ "patch": 18,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.10.18%2B20250604-s390x-unknown-linux-gnu-install_only_stripped.tar.gz",
+ "sha256": "c2f3357dc39951a726d5d42b5fd451d4103072f18ecc2a32c8935c6efadbd52d",
+ "variant": null
+ },
+ "cpython-3.10.18-linux-x86_64-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 10,
+ "patch": 18,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.10.18%2B20250604-x86_64-unknown-linux-gnu-install_only_stripped.tar.gz",
+ "sha256": "b8516e851fca78c57c8fa557007ad169771380d7e5ac72bf7e39b1b197783e19",
+ "variant": null
+ },
+ "cpython-3.10.18-linux-x86_64-musl": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "musl",
+ "major": 3,
+ "minor": 10,
+ "patch": 18,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.10.18%2B20250604-x86_64-unknown-linux-musl-install_only_stripped.tar.gz",
+ "sha256": "a5ed25422ae8961fb10727391c48c55414382e82a66d6f8348c9b13f81b226d0",
+ "variant": null
+ },
+ "cpython-3.10.18-linux-x86_64_v2-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": "v2"
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 10,
+ "patch": 18,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.10.18%2B20250604-x86_64_v2-unknown-linux-gnu-install_only_stripped.tar.gz",
+ "sha256": "b5d3425f9343295cffa0954218640a7e6fa32d57d04dbd3896c79da0e8843467",
+ "variant": null
+ },
+ "cpython-3.10.18-linux-x86_64_v2-musl": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": "v2"
+ },
+ "os": "linux",
+ "libc": "musl",
+ "major": 3,
+ "minor": 10,
+ "patch": 18,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.10.18%2B20250604-x86_64_v2-unknown-linux-musl-install_only_stripped.tar.gz",
+ "sha256": "b79940db2dd9da04cbf0a700ca409430f04f435c03044a37bb9a271bc6544606",
+ "variant": null
+ },
+ "cpython-3.10.18-linux-x86_64_v3-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": "v3"
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 10,
+ "patch": 18,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.10.18%2B20250604-x86_64_v3-unknown-linux-gnu-install_only_stripped.tar.gz",
+ "sha256": "7ac40bdf626e3a7018d5580464e22bad97646b08da7a8b8b62d7b174aaf5c828",
+ "variant": null
+ },
+ "cpython-3.10.18-linux-x86_64_v3-musl": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": "v3"
+ },
+ "os": "linux",
+ "libc": "musl",
+ "major": 3,
+ "minor": 10,
+ "patch": 18,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.10.18%2B20250604-x86_64_v3-unknown-linux-musl-install_only_stripped.tar.gz",
+ "sha256": "43d75b8dcc3a0d0e1cfff6e2be7044208e6f9e9141afe70aa550e2358d31a0b4",
+ "variant": null
+ },
+ "cpython-3.10.18-linux-x86_64_v4-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": "v4"
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 10,
+ "patch": 18,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.10.18%2B20250604-x86_64_v4-unknown-linux-gnu-install_only_stripped.tar.gz",
+ "sha256": "a406ef21373cda258547cdbeb95a94e1de6d470c8b59750ad3b697db389e4bb9",
+ "variant": null
+ },
+ "cpython-3.10.18-linux-x86_64_v4-musl": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": "v4"
+ },
+ "os": "linux",
+ "libc": "musl",
+ "major": 3,
+ "minor": 10,
+ "patch": 18,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.10.18%2B20250604-x86_64_v4-unknown-linux-musl-install_only_stripped.tar.gz",
+ "sha256": "9645bf9ac0212dc5d30616ecf0f8dd7c4a75193cf7e65f65e97f21226b388f13",
+ "variant": null
+ },
+ "cpython-3.10.18-windows-i686-none": {
+ "name": "cpython",
+ "arch": {
+ "family": "i686",
+ "variant": null
+ },
+ "os": "windows",
+ "libc": "none",
+ "major": 3,
+ "minor": 10,
+ "patch": 18,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.10.18%2B20250604-i686-pc-windows-msvc-install_only_stripped.tar.gz",
+ "sha256": "ac5b16f698e307c478d78291cabe2c3797129c1e6831e31f39f08b756b68cbda",
+ "variant": null
+ },
+ "cpython-3.10.18-windows-x86_64-none": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": null
+ },
+ "os": "windows",
+ "libc": "none",
+ "major": 3,
+ "minor": 10,
+ "patch": 18,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.10.18%2B20250604-x86_64-pc-windows-msvc-install_only_stripped.tar.gz",
+ "sha256": "d60b7bb3ce070cd60ce61ddf7af745e73466827d80937de8be6ff60846353210",
+ "variant": null
+ },
+ "cpython-3.10.18+debug-linux-aarch64-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "aarch64",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 10,
+ "patch": 18,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.10.18%2B20250604-aarch64-unknown-linux-gnu-debug-full.tar.zst",
+ "sha256": "7d613f98feccd2dbf40fefa35b3691097a22a3a408cfc81dcce13305ea7c3b64",
+ "variant": "debug"
+ },
+ "cpython-3.10.18+debug-linux-armv7-gnueabi": {
+ "name": "cpython",
+ "arch": {
+ "family": "armv7",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "gnueabi",
+ "major": 3,
+ "minor": 10,
+ "patch": 18,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.10.18%2B20250604-armv7-unknown-linux-gnueabi-debug-full.tar.zst",
+ "sha256": "17542aa1b42fca63ed1afb1eb055bbf4903ce0ec07d1fc4aaa31f2f2e928d799",
+ "variant": "debug"
+ },
+ "cpython-3.10.18+debug-linux-armv7-gnueabihf": {
+ "name": "cpython",
+ "arch": {
+ "family": "armv7",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "gnueabihf",
+ "major": 3,
+ "minor": 10,
+ "patch": 18,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.10.18%2B20250604-armv7-unknown-linux-gnueabihf-debug-full.tar.zst",
+ "sha256": "9b62d4c3ac94dd445a7872775858b232e9b5901579f5ff63ca243afa989977a7",
+ "variant": "debug"
+ },
+ "cpython-3.10.18+debug-linux-powerpc64le-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "powerpc64le",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 10,
+ "patch": 18,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.10.18%2B20250604-ppc64le-unknown-linux-gnu-debug-full.tar.zst",
+ "sha256": "7d18f668da354af30daf711b0ef8ad61580d884c22fa5a076683513ff841a997",
+ "variant": "debug"
+ },
+ "cpython-3.10.18+debug-linux-riscv64-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "riscv64",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 10,
+ "patch": 18,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.10.18%2B20250604-riscv64-unknown-linux-gnu-debug-full.tar.zst",
+ "sha256": "503417e0a80868f6e63ba673d310ded7048620b3f9caa6b4db0d50e33e26ab43",
+ "variant": "debug"
+ },
+ "cpython-3.10.18+debug-linux-s390x-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "s390x",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 10,
+ "patch": 18,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.10.18%2B20250604-s390x-unknown-linux-gnu-debug-full.tar.zst",
+ "sha256": "c07852a8e4e51633e99063ff461f0eb4e8c7cfb7c1138cb00ca76c0bb7feeca5",
+ "variant": "debug"
+ },
+ "cpython-3.10.18+debug-linux-x86_64-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 10,
+ "patch": 18,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.10.18%2B20250604-x86_64-unknown-linux-gnu-debug-full.tar.zst",
+ "sha256": "f6a9adbd47e7471b03fc1e20f9a9ff8d5afee86660aa9243a79c1ef1f5cd69b0",
+ "variant": "debug"
+ },
+ "cpython-3.10.18+debug-linux-x86_64-musl": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "musl",
+ "major": 3,
+ "minor": 10,
+ "patch": 18,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.10.18%2B20250604-x86_64-unknown-linux-musl-debug-full.tar.zst",
+ "sha256": "a21fe7c08a1dfae156016de2f620daa5148ecd0a3e4849e4d313a81ff889d563",
+ "variant": "debug"
+ },
+ "cpython-3.10.18+debug-linux-x86_64_v2-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": "v2"
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 10,
+ "patch": 18,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.10.18%2B20250604-x86_64_v2-unknown-linux-gnu-debug-full.tar.zst",
+ "sha256": "e0e04e750ba0b4ee4e49b1127a0ba2045ecaa5c7bd5d9356476193fe1657eb75",
+ "variant": "debug"
+ },
+ "cpython-3.10.18+debug-linux-x86_64_v2-musl": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": "v2"
+ },
+ "os": "linux",
+ "libc": "musl",
+ "major": 3,
+ "minor": 10,
+ "patch": 18,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.10.18%2B20250604-x86_64_v2-unknown-linux-musl-debug-full.tar.zst",
+ "sha256": "7746c97f0f1a71ab187cb201ef6b36fa08ee37c4bccca28d8cd9385d4a7cb451",
+ "variant": "debug"
+ },
+ "cpython-3.10.18+debug-linux-x86_64_v3-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": "v3"
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 10,
+ "patch": 18,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.10.18%2B20250604-x86_64_v3-unknown-linux-gnu-debug-full.tar.zst",
+ "sha256": "a9770a9845b3c60cfacaf2a2149c14fcf9c8ce4123554653d71abe9265879def",
+ "variant": "debug"
+ },
+ "cpython-3.10.18+debug-linux-x86_64_v3-musl": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": "v3"
+ },
+ "os": "linux",
+ "libc": "musl",
+ "major": 3,
+ "minor": 10,
+ "patch": 18,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.10.18%2B20250604-x86_64_v3-unknown-linux-musl-debug-full.tar.zst",
+ "sha256": "d63f9310747995538488cfa4772cc9d61d03d005c0c0f3795bc29936c4ca6935",
+ "variant": "debug"
+ },
+ "cpython-3.10.18+debug-linux-x86_64_v4-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": "v4"
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 10,
+ "patch": 18,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.10.18%2B20250604-x86_64_v4-unknown-linux-gnu-debug-full.tar.zst",
+ "sha256": "6b024935ec598b7a45acce6786f36ecafaa3be7dac3b6ffc47564771f79de512",
+ "variant": "debug"
+ },
+ "cpython-3.10.18+debug-linux-x86_64_v4-musl": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": "v4"
+ },
+ "os": "linux",
+ "libc": "musl",
+ "major": 3,
+ "minor": 10,
+ "patch": 18,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.10.18%2B20250604-x86_64_v4-unknown-linux-musl-debug-full.tar.zst",
+ "sha256": "521b6c6761f5be49f870dcaab2028abca8db41335bbc42f3e4bfd610001f17b4",
+ "variant": "debug"
+ },
"cpython-3.10.17-darwin-aarch64-none": {
"name": "cpython",
"arch": {
@@ -19263,6 +22399,518 @@
"sha256": null,
"variant": "debug"
},
+ "cpython-3.9.23-darwin-aarch64-none": {
+ "name": "cpython",
+ "arch": {
+ "family": "aarch64",
+ "variant": null
+ },
+ "os": "darwin",
+ "libc": "none",
+ "major": 3,
+ "minor": 9,
+ "patch": 23,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.9.23%2B20250604-aarch64-apple-darwin-install_only_stripped.tar.gz",
+ "sha256": "66261d94390af4dc9a352874ae8b6212560558eec12d4ef990ad1f369b0b282c",
+ "variant": null
+ },
+ "cpython-3.9.23-darwin-x86_64-none": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": null
+ },
+ "os": "darwin",
+ "libc": "none",
+ "major": 3,
+ "minor": 9,
+ "patch": 23,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.9.23%2B20250604-x86_64-apple-darwin-install_only_stripped.tar.gz",
+ "sha256": "c75e6f6acaf6e97586ec2dace9d1d1c1b08170a7edeeec4c018328bdf98fadec",
+ "variant": null
+ },
+ "cpython-3.9.23-linux-aarch64-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "aarch64",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 9,
+ "patch": 23,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.9.23%2B20250604-aarch64-unknown-linux-gnu-install_only_stripped.tar.gz",
+ "sha256": "6aed3756ca15618d502ca6b6dd3618525ad07944d835b4cfce445340ead9993f",
+ "variant": null
+ },
+ "cpython-3.9.23-linux-armv7-gnueabi": {
+ "name": "cpython",
+ "arch": {
+ "family": "armv7",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "gnueabi",
+ "major": 3,
+ "minor": 9,
+ "patch": 23,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.9.23%2B20250604-armv7-unknown-linux-gnueabi-install_only_stripped.tar.gz",
+ "sha256": "c569507edd4e33c31b965adca6734e3418980389b37b5d4db6dcc3379164795c",
+ "variant": null
+ },
+ "cpython-3.9.23-linux-armv7-gnueabihf": {
+ "name": "cpython",
+ "arch": {
+ "family": "armv7",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "gnueabihf",
+ "major": 3,
+ "minor": 9,
+ "patch": 23,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.9.23%2B20250604-armv7-unknown-linux-gnueabihf-install_only_stripped.tar.gz",
+ "sha256": "0254ec392a40d4be22a8b8aae47ba5f95f7f3b20d91460b6dce28e979a20e125",
+ "variant": null
+ },
+ "cpython-3.9.23-linux-powerpc64le-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "powerpc64le",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 9,
+ "patch": 23,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.9.23%2B20250604-ppc64le-unknown-linux-gnu-install_only_stripped.tar.gz",
+ "sha256": "0c2aa9e2e43f14545a536f79cbd39965817387ac0d12facdc3802b193b4d5276",
+ "variant": null
+ },
+ "cpython-3.9.23-linux-riscv64-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "riscv64",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 9,
+ "patch": 23,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.9.23%2B20250604-riscv64-unknown-linux-gnu-install_only_stripped.tar.gz",
+ "sha256": "8b6c4a98aca5e7fc63e5fb85a190293a399c6c87f58d7d5cafc719adaa7957f1",
+ "variant": null
+ },
+ "cpython-3.9.23-linux-s390x-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "s390x",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 9,
+ "patch": 23,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.9.23%2B20250604-s390x-unknown-linux-gnu-install_only_stripped.tar.gz",
+ "sha256": "ddf1ef3a037e0f655ac64611ddd94b5ffa12cdf5cc06c0503ae0d6a211dc9eb3",
+ "variant": null
+ },
+ "cpython-3.9.23-linux-x86_64-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 9,
+ "patch": 23,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.9.23%2B20250604-x86_64-unknown-linux-gnu-install_only_stripped.tar.gz",
+ "sha256": "63ab1e04930c19a2534a88754dcb303f349d922b53d2609d403c4e3970dbb7a3",
+ "variant": null
+ },
+ "cpython-3.9.23-linux-x86_64-musl": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "musl",
+ "major": 3,
+ "minor": 9,
+ "patch": 23,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.9.23%2B20250604-x86_64-unknown-linux-musl-install_only_stripped.tar.gz",
+ "sha256": "1d84c486dcbbc24a051e7ad3d4ea473e471ff138c40b4cb419e6285146ded37b",
+ "variant": null
+ },
+ "cpython-3.9.23-linux-x86_64_v2-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": "v2"
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 9,
+ "patch": 23,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.9.23%2B20250604-x86_64_v2-unknown-linux-gnu-install_only_stripped.tar.gz",
+ "sha256": "24100b4ecb55f104e221fa0935e03d18ac3df1cf4fcd5bac20fab7f398264ec1",
+ "variant": null
+ },
+ "cpython-3.9.23-linux-x86_64_v2-musl": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": "v2"
+ },
+ "os": "linux",
+ "libc": "musl",
+ "major": 3,
+ "minor": 9,
+ "patch": 23,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.9.23%2B20250604-x86_64_v2-unknown-linux-musl-install_only_stripped.tar.gz",
+ "sha256": "3e08248e0b4da87dcaab1aecd8453a54cccd31cd7a4542e679da145da76feaec",
+ "variant": null
+ },
+ "cpython-3.9.23-linux-x86_64_v3-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": "v3"
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 9,
+ "patch": 23,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.9.23%2B20250604-x86_64_v3-unknown-linux-gnu-install_only_stripped.tar.gz",
+ "sha256": "0aeeaed7063962e42df4009601f08663dc3699672428f455e6360f84c969ef10",
+ "variant": null
+ },
+ "cpython-3.9.23-linux-x86_64_v3-musl": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": "v3"
+ },
+ "os": "linux",
+ "libc": "musl",
+ "major": 3,
+ "minor": 9,
+ "patch": 23,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.9.23%2B20250604-x86_64_v3-unknown-linux-musl-install_only_stripped.tar.gz",
+ "sha256": "06d1177a276f9dd1471e95b9b3b01cd4fba8a1d1252a4fae1cf7917cead582c3",
+ "variant": null
+ },
+ "cpython-3.9.23-linux-x86_64_v4-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": "v4"
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 9,
+ "patch": 23,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.9.23%2B20250604-x86_64_v4-unknown-linux-gnu-install_only_stripped.tar.gz",
+ "sha256": "3a7f40090da03982a29d9612b7bae6a2d0f979f5fc29c97e77e56a8670028d0b",
+ "variant": null
+ },
+ "cpython-3.9.23-linux-x86_64_v4-musl": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": "v4"
+ },
+ "os": "linux",
+ "libc": "musl",
+ "major": 3,
+ "minor": 9,
+ "patch": 23,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.9.23%2B20250604-x86_64_v4-unknown-linux-musl-install_only_stripped.tar.gz",
+ "sha256": "8df79205510e424729fcb99a940a9e1e61a83571044bf63b1da8fce308890f6b",
+ "variant": null
+ },
+ "cpython-3.9.23-windows-i686-none": {
+ "name": "cpython",
+ "arch": {
+ "family": "i686",
+ "variant": null
+ },
+ "os": "windows",
+ "libc": "none",
+ "major": 3,
+ "minor": 9,
+ "patch": 23,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.9.23%2B20250604-i686-pc-windows-msvc-install_only_stripped.tar.gz",
+ "sha256": "23394d3825b3703017225897f5d05035e3fe502dbd5a77cd97e2c479129a1572",
+ "variant": null
+ },
+ "cpython-3.9.23-windows-x86_64-none": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": null
+ },
+ "os": "windows",
+ "libc": "none",
+ "major": 3,
+ "minor": 9,
+ "patch": 23,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.9.23%2B20250604-x86_64-pc-windows-msvc-install_only_stripped.tar.gz",
+ "sha256": "e45a280c1680d6a6061d5246ae06489cf35848c98d5a048a7b505c6f89931bae",
+ "variant": null
+ },
+ "cpython-3.9.23+debug-linux-aarch64-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "aarch64",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 9,
+ "patch": 23,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.9.23%2B20250604-aarch64-unknown-linux-gnu-debug-full.tar.zst",
+ "sha256": "46ddea12039a935112388ff1538066b614ae37613da3e2a0e7bc0ec0f3223605",
+ "variant": "debug"
+ },
+ "cpython-3.9.23+debug-linux-armv7-gnueabi": {
+ "name": "cpython",
+ "arch": {
+ "family": "armv7",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "gnueabi",
+ "major": 3,
+ "minor": 9,
+ "patch": 23,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.9.23%2B20250604-armv7-unknown-linux-gnueabi-debug-full.tar.zst",
+ "sha256": "c930d0ee01d54aa626d1cded6edb330ba420b2524d93d89e76c18372bdcde80f",
+ "variant": "debug"
+ },
+ "cpython-3.9.23+debug-linux-armv7-gnueabihf": {
+ "name": "cpython",
+ "arch": {
+ "family": "armv7",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "gnueabihf",
+ "major": 3,
+ "minor": 9,
+ "patch": 23,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.9.23%2B20250604-armv7-unknown-linux-gnueabihf-debug-full.tar.zst",
+ "sha256": "d0671ac71f7a8a0eeffe45201e49be283c33f01731fc18ee30de05632c989061",
+ "variant": "debug"
+ },
+ "cpython-3.9.23+debug-linux-powerpc64le-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "powerpc64le",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 9,
+ "patch": 23,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.9.23%2B20250604-ppc64le-unknown-linux-gnu-debug-full.tar.zst",
+ "sha256": "c0ad3c512daaf7ab95031117a99efd65e050012f377018a4a6dcaddfd1b3cfca",
+ "variant": "debug"
+ },
+ "cpython-3.9.23+debug-linux-riscv64-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "riscv64",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 9,
+ "patch": 23,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.9.23%2B20250604-riscv64-unknown-linux-gnu-debug-full.tar.zst",
+ "sha256": "9e54ad5665366623b8e9519a534cd47e587d273a86f3f1ee3d93b6efc5bfc1c8",
+ "variant": "debug"
+ },
+ "cpython-3.9.23+debug-linux-s390x-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "s390x",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 9,
+ "patch": 23,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.9.23%2B20250604-s390x-unknown-linux-gnu-debug-full.tar.zst",
+ "sha256": "b4df18af220dc9a6e3e0153849cb20172d8f4d5b4d8f5310d5ee8c947f05b88b",
+ "variant": "debug"
+ },
+ "cpython-3.9.23+debug-linux-x86_64-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 9,
+ "patch": 23,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.9.23%2B20250604-x86_64-unknown-linux-gnu-debug-full.tar.zst",
+ "sha256": "2725914e28bf9eabcbdcd1649d5eb415f98e857372dab9f78080241a44387a75",
+ "variant": "debug"
+ },
+ "cpython-3.9.23+debug-linux-x86_64-musl": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "musl",
+ "major": 3,
+ "minor": 9,
+ "patch": 23,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.9.23%2B20250604-x86_64-unknown-linux-musl-debug-full.tar.zst",
+ "sha256": "3b73369fc80a548bc3eb56a4106ab7689a2ac2e96e6415965df016ffe5ad358f",
+ "variant": "debug"
+ },
+ "cpython-3.9.23+debug-linux-x86_64_v2-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": "v2"
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 9,
+ "patch": 23,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.9.23%2B20250604-x86_64_v2-unknown-linux-gnu-debug-full.tar.zst",
+ "sha256": "a046e8c69345440d0b31b706e03a0092ae1b1d7e94638a8aa1dfe1df7e8544fe",
+ "variant": "debug"
+ },
+ "cpython-3.9.23+debug-linux-x86_64_v2-musl": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": "v2"
+ },
+ "os": "linux",
+ "libc": "musl",
+ "major": 3,
+ "minor": 9,
+ "patch": 23,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.9.23%2B20250604-x86_64_v2-unknown-linux-musl-debug-full.tar.zst",
+ "sha256": "5c3dc4d786d78ae94cab3152b55bbe7b5c9514fa977cbd52ef26aba382b26231",
+ "variant": "debug"
+ },
+ "cpython-3.9.23+debug-linux-x86_64_v3-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": "v3"
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 9,
+ "patch": 23,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.9.23%2B20250604-x86_64_v3-unknown-linux-gnu-debug-full.tar.zst",
+ "sha256": "3db582893571da8422dea4ddcd596542af9de69427506067e66ffbece5b8c13c",
+ "variant": "debug"
+ },
+ "cpython-3.9.23+debug-linux-x86_64_v3-musl": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": "v3"
+ },
+ "os": "linux",
+ "libc": "musl",
+ "major": 3,
+ "minor": 9,
+ "patch": 23,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.9.23%2B20250604-x86_64_v3-unknown-linux-musl-debug-full.tar.zst",
+ "sha256": "d2e55a20da40192e6914cb52e73f94b3da03d24cd8b514c59173115021adfa91",
+ "variant": "debug"
+ },
+ "cpython-3.9.23+debug-linux-x86_64_v4-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": "v4"
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 9,
+ "patch": 23,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.9.23%2B20250604-x86_64_v4-unknown-linux-gnu-debug-full.tar.zst",
+ "sha256": "6dbb8ba28c56d04c52d4f1de65095880d8ca4d2770c9c52855771f023cac3512",
+ "variant": "debug"
+ },
+ "cpython-3.9.23+debug-linux-x86_64_v4-musl": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": "v4"
+ },
+ "os": "linux",
+ "libc": "musl",
+ "major": 3,
+ "minor": 9,
+ "patch": 23,
+ "prerelease": "",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.9.23%2B20250604-x86_64_v4-unknown-linux-musl-debug-full.tar.zst",
+ "sha256": "7058b7adb62727e770a149ddf12b37012ffd591e07fc28241a3a37c585c2134e",
+ "variant": "debug"
+ },
"cpython-3.9.22-darwin-aarch64-none": {
"name": "cpython",
"arch": {
diff --git a/crates/uv/tests/it/python_install.rs b/crates/uv/tests/it/python_install.rs
index b8f710a62..a197601e6 100644
--- a/crates/uv/tests/it/python_install.rs
+++ b/crates/uv/tests/it/python_install.rs
@@ -25,8 +25,8 @@ fn python_install() {
----- stdout -----
----- stderr -----
- Installed Python 3.13.3 in [TIME]
- + cpython-3.13.3-[PLATFORM]
+ Installed Python 3.13.4 in [TIME]
+ + cpython-3.13.4-[PLATFORM]
");
let bin_python = context
@@ -62,8 +62,8 @@ fn python_install() {
----- stdout -----
----- stderr -----
- Installed Python 3.13.3 in [TIME]
- ~ cpython-3.13.3-[PLATFORM]
+ Installed Python 3.13.4 in [TIME]
+ ~ cpython-3.13.4-[PLATFORM]
");
// Uninstallation requires an argument
@@ -88,8 +88,8 @@ fn python_install() {
----- stderr -----
Searching for Python versions matching: Python 3.13
- Uninstalled Python 3.13.3 in [TIME]
- - cpython-3.13.3-[PLATFORM]
+ Uninstalled Python 3.13.4 in [TIME]
+ - cpython-3.13.4-[PLATFORM]
");
}
@@ -108,8 +108,8 @@ fn python_reinstall() {
----- stderr -----
Installed 2 versions in [TIME]
- + cpython-3.12.10-[PLATFORM]
- + cpython-3.13.3-[PLATFORM]
+ + cpython-3.12.11-[PLATFORM]
+ + cpython-3.13.4-[PLATFORM]
");
// Reinstall a single version
@@ -119,8 +119,8 @@ fn python_reinstall() {
----- stdout -----
----- stderr -----
- Installed Python 3.13.3 in [TIME]
- ~ cpython-3.13.3-[PLATFORM]
+ Installed Python 3.13.4 in [TIME]
+ ~ cpython-3.13.4-[PLATFORM]
");
// Reinstall multiple versions
@@ -131,8 +131,8 @@ fn python_reinstall() {
----- stderr -----
Installed 2 versions in [TIME]
- ~ cpython-3.12.10-[PLATFORM]
- ~ cpython-3.13.3-[PLATFORM]
+ ~ cpython-3.12.11-[PLATFORM]
+ ~ cpython-3.13.4-[PLATFORM]
");
// Reinstalling a version that is not installed should also work
@@ -142,8 +142,8 @@ fn python_reinstall() {
----- stdout -----
----- stderr -----
- Installed Python 3.11.12 in [TIME]
- + cpython-3.11.12-[PLATFORM]
+ Installed Python 3.11.13 in [TIME]
+ + cpython-3.11.13-[PLATFORM]
");
}
@@ -175,8 +175,8 @@ fn python_reinstall_patch() {
----- stdout -----
----- stderr -----
- Installed Python 3.12.10 in [TIME]
- + cpython-3.12.10-[PLATFORM]
+ Installed Python 3.12.11 in [TIME]
+ + cpython-3.12.11-[PLATFORM]
");
}
@@ -336,8 +336,8 @@ fn python_install_preview() {
----- stdout -----
----- stderr -----
- Installed Python 3.13.3 in [TIME]
- + cpython-3.13.3-[PLATFORM] (python, python3, python3.13)
+ Installed Python 3.13.4 in [TIME]
+ + cpython-3.13.4-[PLATFORM] (python, python3, python3.13)
");
let bin_python = context
@@ -379,8 +379,8 @@ fn python_install_preview() {
----- stdout -----
----- stderr -----
- Installed Python 3.13.3 in [TIME]
- ~ cpython-3.13.3-[PLATFORM] (python, python3, python3.13)
+ Installed Python 3.13.4 in [TIME]
+ ~ cpython-3.13.4-[PLATFORM] (python, python3, python3.13)
");
// The executable should still be present in the bin directory
@@ -393,8 +393,8 @@ fn python_install_preview() {
----- stdout -----
----- stderr -----
- Installed Python 3.13.3 in [TIME]
- + cpython-3.13.3-[PLATFORM] (python, python3, python3.13)
+ Installed Python 3.13.4 in [TIME]
+ + cpython-3.13.4-[PLATFORM] (python, python3, python3.13)
");
// The executable should still be present in the bin directory
@@ -410,7 +410,7 @@ fn python_install_preview() {
----- stdout -----
----- stderr -----
- error: Failed to install cpython-3.13.3-[PLATFORM]
+ error: Failed to install cpython-3.13.4-[PLATFORM]
Caused by: Executable already exists at `[BIN]/python3.13` but is not managed by uv; use `--force` to replace it
");
@@ -420,8 +420,8 @@ fn python_install_preview() {
----- stdout -----
----- stderr -----
- Installed Python 3.13.3 in [TIME]
- + cpython-3.13.3-[PLATFORM] (python3.13)
+ Installed Python 3.13.4 in [TIME]
+ + cpython-3.13.4-[PLATFORM] (python3.13)
");
bin_python.assert(predicate::path::exists());
@@ -452,8 +452,8 @@ fn python_install_preview() {
----- stderr -----
Searching for Python versions matching: Python 3.13
- Uninstalled Python 3.13.3 in [TIME]
- - cpython-3.13.3-[PLATFORM] (python, python3, python3.13)
+ Uninstalled Python 3.13.4 in [TIME]
+ - cpython-3.13.4-[PLATFORM] (python, python3, python3.13)
");
// The executable should be removed
@@ -648,8 +648,8 @@ fn python_install_freethreaded() {
----- stdout -----
----- stderr -----
- Installed Python 3.13.3 in [TIME]
- + cpython-3.13.3+freethreaded-[PLATFORM] (python3.13t)
+ Installed Python 3.13.4 in [TIME]
+ + cpython-3.13.4+freethreaded-[PLATFORM] (python3.13t)
");
let bin_python = context
@@ -681,8 +681,8 @@ fn python_install_freethreaded() {
----- stdout -----
----- stderr -----
- Installed Python 3.13.3 in [TIME]
- + cpython-3.13.3-[PLATFORM]
+ Installed Python 3.13.4 in [TIME]
+ + cpython-3.13.4-[PLATFORM]
");
// Should not work with older Python versions
@@ -703,8 +703,8 @@ fn python_install_freethreaded() {
----- stderr -----
Searching for Python installations
Uninstalled 2 versions in [TIME]
- - cpython-3.13.3+freethreaded-[PLATFORM] (python3.13t)
- - cpython-3.13.3-[PLATFORM]
+ - cpython-3.13.4+freethreaded-[PLATFORM] (python3.13t)
+ - cpython-3.13.4-[PLATFORM]
");
}
@@ -782,8 +782,8 @@ fn python_install_default() {
----- stdout -----
----- stderr -----
- Installed Python 3.13.3 in [TIME]
- + cpython-3.13.3-[PLATFORM] (python3.13)
+ Installed Python 3.13.4 in [TIME]
+ + cpython-3.13.4-[PLATFORM] (python3.13)
");
// Only the minor versioned executable should be installed
@@ -798,8 +798,8 @@ fn python_install_default() {
----- stdout -----
----- stderr -----
- Installed Python 3.13.3 in [TIME]
- + cpython-3.13.3-[PLATFORM] (python, python3)
+ Installed Python 3.13.4 in [TIME]
+ + cpython-3.13.4-[PLATFORM] (python, python3)
");
// Now all the executables should be installed
@@ -815,8 +815,8 @@ fn python_install_default() {
----- stderr -----
Searching for Python installations
- Uninstalled Python 3.13.3 in [TIME]
- - cpython-3.13.3-[PLATFORM] (python, python3, python3.13)
+ Uninstalled Python 3.13.4 in [TIME]
+ - cpython-3.13.4-[PLATFORM] (python, python3, python3.13)
");
// The executables should be removed
@@ -831,8 +831,8 @@ fn python_install_default() {
----- stdout -----
----- stderr -----
- Installed Python 3.13.3 in [TIME]
- + cpython-3.13.3-[PLATFORM] (python, python3, python3.13)
+ Installed Python 3.13.4 in [TIME]
+ + cpython-3.13.4-[PLATFORM] (python, python3, python3.13)
");
// Since it's a default install, we should include all of the executables
@@ -848,8 +848,8 @@ fn python_install_default() {
----- stderr -----
Searching for Python versions matching: Python 3.13
- Uninstalled Python 3.13.3 in [TIME]
- - cpython-3.13.3-[PLATFORM] (python, python3, python3.13)
+ Uninstalled Python 3.13.4 in [TIME]
+ - cpython-3.13.4-[PLATFORM] (python, python3, python3.13)
");
// We should remove all the executables
@@ -874,8 +874,8 @@ fn python_install_default() {
----- stdout -----
----- stderr -----
- Installed Python 3.12.10 in [TIME]
- + cpython-3.12.10-[PLATFORM] (python, python3, python3.12)
+ Installed Python 3.12.11 in [TIME]
+ + cpython-3.12.11-[PLATFORM] (python, python3, python3.12)
");
let bin_python_minor_12 = context
@@ -893,7 +893,7 @@ fn python_install_default() {
filters => context.filters(),
}, {
insta::assert_snapshot!(
- read_link_path(&bin_python_major), @"[TEMP_DIR]/managed/cpython-3.12.10-[PLATFORM]/bin/python3.12"
+ read_link_path(&bin_python_major), @"[TEMP_DIR]/managed/cpython-3.12.11-[PLATFORM]/bin/python3.12"
);
});
@@ -901,7 +901,7 @@ fn python_install_default() {
filters => context.filters(),
}, {
insta::assert_snapshot!(
- read_link_path(&bin_python_minor_12), @"[TEMP_DIR]/managed/cpython-3.12.10-[PLATFORM]/bin/python3.12"
+ read_link_path(&bin_python_minor_12), @"[TEMP_DIR]/managed/cpython-3.12.11-[PLATFORM]/bin/python3.12"
);
});
@@ -909,7 +909,7 @@ fn python_install_default() {
filters => context.filters(),
}, {
insta::assert_snapshot!(
- read_link_path(&bin_python_default), @"[TEMP_DIR]/managed/cpython-3.12.10-[PLATFORM]/bin/python3.12"
+ read_link_path(&bin_python_default), @"[TEMP_DIR]/managed/cpython-3.12.11-[PLATFORM]/bin/python3.12"
);
});
} else {
@@ -917,7 +917,7 @@ fn python_install_default() {
filters => context.filters(),
}, {
insta::assert_snapshot!(
- read_link_path(&bin_python_major), @"[TEMP_DIR]/managed/cpython-3.12.10-[PLATFORM]/python"
+ read_link_path(&bin_python_major), @"[TEMP_DIR]/managed/cpython-3.12.11-[PLATFORM]/python"
);
});
@@ -925,7 +925,7 @@ fn python_install_default() {
filters => context.filters(),
}, {
insta::assert_snapshot!(
- read_link_path(&bin_python_minor_12), @"[TEMP_DIR]/managed/cpython-3.12.10-[PLATFORM]/python"
+ read_link_path(&bin_python_minor_12), @"[TEMP_DIR]/managed/cpython-3.12.11-[PLATFORM]/python"
);
});
@@ -933,7 +933,7 @@ fn python_install_default() {
filters => context.filters(),
}, {
insta::assert_snapshot!(
- read_link_path(&bin_python_default), @"[TEMP_DIR]/managed/cpython-3.12.10-[PLATFORM]/python"
+ read_link_path(&bin_python_default), @"[TEMP_DIR]/managed/cpython-3.12.11-[PLATFORM]/python"
);
});
}
@@ -945,8 +945,8 @@ fn python_install_default() {
----- stdout -----
----- stderr -----
- Installed Python 3.13.3 in [TIME]
- + cpython-3.13.3-[PLATFORM] (python, python3, python3.13)
+ Installed Python 3.13.4 in [TIME]
+ + cpython-3.13.4-[PLATFORM] (python, python3, python3.13)
");
// All the executables should exist
@@ -961,7 +961,7 @@ fn python_install_default() {
filters => context.filters(),
}, {
insta::assert_snapshot!(
- read_link_path(&bin_python_major), @"[TEMP_DIR]/managed/cpython-3.13.3-[PLATFORM]/bin/python3.13"
+ read_link_path(&bin_python_major), @"[TEMP_DIR]/managed/cpython-3.13.4-[PLATFORM]/bin/python3.13"
);
});
@@ -969,7 +969,7 @@ fn python_install_default() {
filters => context.filters(),
}, {
insta::assert_snapshot!(
- read_link_path(&bin_python_minor_13), @"[TEMP_DIR]/managed/cpython-3.13.3-[PLATFORM]/bin/python3.13"
+ read_link_path(&bin_python_minor_13), @"[TEMP_DIR]/managed/cpython-3.13.4-[PLATFORM]/bin/python3.13"
);
});
@@ -977,7 +977,7 @@ fn python_install_default() {
filters => context.filters(),
}, {
insta::assert_snapshot!(
- read_link_path(&bin_python_minor_12), @"[TEMP_DIR]/managed/cpython-3.12.10-[PLATFORM]/bin/python3.12"
+ read_link_path(&bin_python_minor_12), @"[TEMP_DIR]/managed/cpython-3.12.11-[PLATFORM]/bin/python3.12"
);
});
@@ -985,7 +985,7 @@ fn python_install_default() {
filters => context.filters(),
}, {
insta::assert_snapshot!(
- read_link_path(&bin_python_default), @"[TEMP_DIR]/managed/cpython-3.13.3-[PLATFORM]/bin/python3.13"
+ read_link_path(&bin_python_default), @"[TEMP_DIR]/managed/cpython-3.13.4-[PLATFORM]/bin/python3.13"
);
});
} else {
@@ -993,7 +993,7 @@ fn python_install_default() {
filters => context.filters(),
}, {
insta::assert_snapshot!(
- read_link_path(&bin_python_major), @"[TEMP_DIR]/managed/cpython-3.13.3-[PLATFORM]/python"
+ read_link_path(&bin_python_major), @"[TEMP_DIR]/managed/cpython-3.13.4-[PLATFORM]/python"
);
});
@@ -1001,7 +1001,7 @@ fn python_install_default() {
filters => context.filters(),
}, {
insta::assert_snapshot!(
- read_link_path(&bin_python_minor_13), @"[TEMP_DIR]/managed/cpython-3.13.3-[PLATFORM]/python"
+ read_link_path(&bin_python_minor_13), @"[TEMP_DIR]/managed/cpython-3.13.4-[PLATFORM]/python"
);
});
@@ -1009,7 +1009,7 @@ fn python_install_default() {
filters => context.filters(),
}, {
insta::assert_snapshot!(
- read_link_path(&bin_python_minor_12), @"[TEMP_DIR]/managed/cpython-3.12.10-[PLATFORM]/python"
+ read_link_path(&bin_python_minor_12), @"[TEMP_DIR]/managed/cpython-3.12.11-[PLATFORM]/python"
);
});
@@ -1017,7 +1017,7 @@ fn python_install_default() {
filters => context.filters(),
}, {
insta::assert_snapshot!(
- read_link_path(&bin_python_default), @"[TEMP_DIR]/managed/cpython-3.13.3-[PLATFORM]/python"
+ read_link_path(&bin_python_default), @"[TEMP_DIR]/managed/cpython-3.13.4-[PLATFORM]/python"
);
});
}
@@ -1092,8 +1092,8 @@ fn python_install_preview_broken_link() {
----- stdout -----
----- stderr -----
- Installed Python 3.13.3 in [TIME]
- + cpython-3.13.3-[PLATFORM] (python3.13)
+ Installed Python 3.13.4 in [TIME]
+ + cpython-3.13.4-[PLATFORM] (python3.13)
");
// We should replace the broken symlink
@@ -1101,7 +1101,7 @@ fn python_install_preview_broken_link() {
filters => context.filters(),
}, {
insta::assert_snapshot!(
- read_link_path(&bin_python), @"[TEMP_DIR]/managed/cpython-3.13.3-[PLATFORM]/bin/python3.13"
+ read_link_path(&bin_python), @"[TEMP_DIR]/managed/cpython-3.13.4-[PLATFORM]/bin/python3.13"
);
});
}
@@ -1120,8 +1120,8 @@ fn python_install_default_from_env() {
----- stdout -----
----- stderr -----
- Installed Python 3.12.10 in [TIME]
- + cpython-3.12.10-[PLATFORM]
+ Installed Python 3.12.11 in [TIME]
+ + cpython-3.12.11-[PLATFORM]
");
// But prefer explicit requests
@@ -1131,8 +1131,8 @@ fn python_install_default_from_env() {
----- stdout -----
----- stderr -----
- Installed Python 3.11.12 in [TIME]
- + cpython-3.11.12-[PLATFORM]
+ Installed Python 3.11.13 in [TIME]
+ + cpython-3.11.13-[PLATFORM]
");
// We should ignore `UV_PYTHON` here and complain there is not a target
@@ -1159,8 +1159,8 @@ fn python_install_default_from_env() {
----- stderr -----
Searching for Python installations
Uninstalled 2 versions in [TIME]
- - cpython-3.11.12-[PLATFORM]
- - cpython-3.12.10-[PLATFORM]
+ - cpython-3.11.13-[PLATFORM]
+ - cpython-3.12.11-[PLATFORM]
");
// Uninstall with no targets should error
@@ -1256,8 +1256,8 @@ fn python_install_314() {
----- stdout -----
----- stderr -----
- Installed Python 3.14.0a7 in [TIME]
- + cpython-3.14.0a7-[PLATFORM]
+ Installed Python 3.14.0b1 in [TIME]
+ + cpython-3.14.0b1-[PLATFORM]
");
// Install a specific pre-release
@@ -1277,7 +1277,7 @@ fn python_install_314() {
success: true
exit_code: 0
----- stdout -----
- [TEMP_DIR]/managed/cpython-3.14.0a7-[PLATFORM]/[INSTALL-BIN]/python
+ [TEMP_DIR]/managed/cpython-3.14.0b1-[PLATFORM]/[INSTALL-BIN]/python
----- stderr -----
");
@@ -1287,7 +1287,7 @@ fn python_install_314() {
success: true
exit_code: 0
----- stdout -----
- [TEMP_DIR]/managed/cpython-3.14.0a7-[PLATFORM]/[INSTALL-BIN]/python
+ [TEMP_DIR]/managed/cpython-3.14.0b1-[PLATFORM]/[INSTALL-BIN]/python
----- stderr -----
");
@@ -1296,7 +1296,7 @@ fn python_install_314() {
success: true
exit_code: 0
----- stdout -----
- [TEMP_DIR]/managed/cpython-3.14.0a7-[PLATFORM]/[INSTALL-BIN]/python
+ [TEMP_DIR]/managed/cpython-3.14.0b1-[PLATFORM]/[INSTALL-BIN]/python
----- stderr -----
");
@@ -1308,15 +1308,15 @@ fn python_install_314() {
----- stdout -----
----- stderr -----
- Installed Python 3.13.3 in [TIME]
- + cpython-3.13.3-[PLATFORM]
+ Installed Python 3.13.4 in [TIME]
+ + cpython-3.13.4-[PLATFORM]
");
uv_snapshot!(context.filters(), context.python_find().arg("3"), @r"
success: true
exit_code: 0
----- stdout -----
- [TEMP_DIR]/managed/cpython-3.13.3-[PLATFORM]/[INSTALL-BIN]/python
+ [TEMP_DIR]/managed/cpython-3.13.4-[PLATFORM]/[INSTALL-BIN]/python
----- stderr -----
");
@@ -1348,8 +1348,8 @@ fn python_install_cached() {
----- stdout -----
----- stderr -----
- Installed Python 3.13.3 in [TIME]
- + cpython-3.13.3-[PLATFORM]
+ Installed Python 3.13.4 in [TIME]
+ + cpython-3.13.4-[PLATFORM]
");
let bin_python = context
@@ -1378,8 +1378,8 @@ fn python_install_cached() {
----- stderr -----
Searching for Python versions matching: Python 3.13
- Uninstalled Python 3.13.3 in [TIME]
- - cpython-3.13.3-[PLATFORM]
+ Uninstalled Python 3.13.4 in [TIME]
+ - cpython-3.13.4-[PLATFORM]
");
// The cached archive can be installed offline
@@ -1392,15 +1392,15 @@ fn python_install_cached() {
----- stdout -----
----- stderr -----
- Installed Python 3.13.3 in [TIME]
- + cpython-3.13.3-[PLATFORM]
+ Installed Python 3.13.4 in [TIME]
+ + cpython-3.13.4-[PLATFORM]
");
// 3.12 isn't cached, so it can't be installed
let mut filters = context.filters();
filters.push((
- "cpython-3.12.10.*.tar.gz",
- "cpython-3.12.10[DATE]-[PLATFORM].tar.gz",
+ "cpython-3.12.*.tar.gz",
+ "cpython-3.12.[PATCH]-[DATE]-[PLATFORM].tar.gz",
));
uv_snapshot!(filters, context
.python_install()
@@ -1412,8 +1412,8 @@ fn python_install_cached() {
----- stdout -----
----- stderr -----
- error: Failed to install cpython-3.12.10-[PLATFORM]
- Caused by: An offline Python installation was requested, but cpython-3.12.10[DATE]-[PLATFORM].tar.gz) is missing in python-cache
+ error: Failed to install cpython-3.12.11-[PLATFORM]
+ Caused by: An offline Python installation was requested, but cpython-3.12.[PATCH]-[DATE]-[PLATFORM].tar.gz) is missing in python-cache
");
}
@@ -1429,7 +1429,7 @@ fn python_install_emulated_macos() {
success: true
exit_code: 0
----- stdout -----
- cpython-3.13.3-macos-aarch64-none
+ cpython-3.13.4-macos-aarch64-none
----- stderr -----
");
@@ -1441,8 +1441,8 @@ fn python_install_emulated_macos() {
----- stdout -----
----- stderr -----
- Installed Python 3.13.3 in [TIME]
- + cpython-3.13.3-macos-x86_64-none
+ Installed Python 3.13.4 in [TIME]
+ + cpython-3.13.4-macos-x86_64-none
");
// It should be discoverable with `uv python find`
@@ -1450,7 +1450,7 @@ fn python_install_emulated_macos() {
success: true
exit_code: 0
----- stdout -----
- [TEMP_DIR]/managed/cpython-3.13.3-macos-x86_64-none/bin/python3.13
+ [TEMP_DIR]/managed/cpython-3.13.4-macos-x86_64-none/bin/python3.13
----- stderr -----
");
@@ -1460,8 +1460,8 @@ fn python_install_emulated_macos() {
success: true
exit_code: 0
----- stdout -----
- cpython-3.13.3-macos-aarch64-none
- cpython-3.13.3-macos-x86_64-none managed/cpython-3.13.3-macos-x86_64-none/bin/python3.13
+ cpython-3.13.4-macos-aarch64-none
+ cpython-3.13.4-macos-x86_64-none managed/cpython-3.13.4-macos-x86_64-none/bin/python3.13
----- stderr -----
");
@@ -1472,8 +1472,8 @@ fn python_install_emulated_macos() {
----- stdout -----
----- stderr -----
- Installed Python 3.13.3 in [TIME]
- + cpython-3.13.3-macos-aarch64-none
+ Installed Python 3.13.4 in [TIME]
+ + cpython-3.13.4-macos-aarch64-none
");
// Once we've installed the native version, it should be preferred over x86_64
@@ -1481,7 +1481,7 @@ fn python_install_emulated_macos() {
success: true
exit_code: 0
----- stdout -----
- [TEMP_DIR]/managed/cpython-3.13.3-macos-aarch64-none/bin/python3.13
+ [TEMP_DIR]/managed/cpython-3.13.4-macos-aarch64-none/bin/python3.13
----- stderr -----
");
diff --git a/crates/uv/tests/it/python_list.rs b/crates/uv/tests/it/python_list.rs
index 7dfcf70dc..959ebdd80 100644
--- a/crates/uv/tests/it/python_list.rs
+++ b/crates/uv/tests/it/python_list.rs
@@ -365,7 +365,7 @@ fn python_list_downloads() {
success: true
exit_code: 0
----- stdout -----
- cpython-3.10.17-[PLATFORM]
+ cpython-3.10.18-[PLATFORM]
pypy-3.10.16-[PLATFORM]
graalpy-3.10.0-[PLATFORM]
@@ -377,6 +377,7 @@ fn python_list_downloads() {
success: true
exit_code: 0
----- stdout -----
+ cpython-3.10.18-[PLATFORM]
cpython-3.10.17-[PLATFORM]
cpython-3.10.16-[PLATFORM]
cpython-3.10.15-[PLATFORM]
@@ -422,7 +423,7 @@ fn python_list_downloads_installed() {
success: true
exit_code: 0
----- stdout -----
- cpython-3.10.17-[PLATFORM]
+ cpython-3.10.18-[PLATFORM]
pypy-3.10.16-[PLATFORM]
graalpy-3.10.0-[PLATFORM]
@@ -449,7 +450,7 @@ fn python_list_downloads_installed() {
success: true
exit_code: 0
----- stdout -----
- cpython-3.10.17-[PLATFORM] managed/cpython-3.10.17-[PLATFORM]/[INSTALL-BIN]/python
+ cpython-3.10.18-[PLATFORM] managed/cpython-3.10.18-[PLATFORM]/[INSTALL-BIN]/python
pypy-3.10.16-[PLATFORM]
graalpy-3.10.0-[PLATFORM]
@@ -461,7 +462,7 @@ fn python_list_downloads_installed() {
success: true
exit_code: 0
----- stdout -----
- cpython-3.10.17-[PLATFORM]
+ cpython-3.10.18-[PLATFORM]
pypy-3.10.16-[PLATFORM]
graalpy-3.10.0-[PLATFORM]
From 90a4416ab862de640aee78c19017873a9b40fd68 Mon Sep 17 00:00:00 2001
From: Jack O'Connor
Date: Wed, 4 Jun 2025 12:35:56 -0700
Subject: [PATCH 011/250] Bump version to 0.7.11 (#13844)
---
CHANGELOG.md | 73 ++++++++++++++++++---------
Cargo.lock | 6 +--
crates/uv-build/Cargo.toml | 2 +-
crates/uv-build/pyproject.toml | 2 +-
crates/uv-version/Cargo.toml | 2 +-
crates/uv/Cargo.toml | 2 +-
docs/configuration/build-backend.md | 2 +-
docs/getting-started/installation.md | 4 +-
docs/guides/integration/aws-lambda.md | 4 +-
docs/guides/integration/docker.md | 10 ++--
docs/guides/integration/github.md | 2 +-
docs/guides/integration/pre-commit.md | 10 ++--
pyproject.toml | 2 +-
13 files changed, 73 insertions(+), 48 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 42ad3e5e3..34dd45596 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -3,6 +3,31 @@
+## 0.7.11
+
+### Python
+
+- Add Python 3.14.0b1
+- Add Python 3.13.4
+- Add Python 3.12.11
+- Add Python 3.11.13
+- Add Python 3.10.18
+- Add Python 3.9.23
+
+### Enhancements
+
+- Add Pyodide support ([#12731](https://github.com/astral-sh/uv/pull/12731))
+- Better error message for version specifier with missing operator ([#13803](https://github.com/astral-sh/uv/pull/13803))
+
+### Bug fixes
+
+- Downgrade `reqwest` and `hyper-util` to resolve connection reset errors over IPv6 ([#13835](https://github.com/astral-sh/uv/pull/13835))
+- Prefer `uv`'s binary's version when checking if it's up to date ([#13840](https://github.com/astral-sh/uv/pull/13840))
+
+### Documentation
+
+- Use "terminal driver" instead of "shell" in `SIGINT` docs ([#13787](https://github.com/astral-sh/uv/pull/13787))
+
## 0.7.10
### Enhancements
@@ -15,7 +40,7 @@
- Avoid redaction of placeholder `git` username when using SSH authentication ([#13799](https://github.com/astral-sh/uv/pull/13799))
- Propagate credentials to files on devpi indexes ending in `/+simple` ([#13743](https://github.com/astral-sh/uv/pull/13743))
-- Restore retention of credentials for direct URLs in `uv export` ([#13809](https://github.com/astral-sh/uv/pull/13809))
+- Restore retention of credentials for direct URLs in `uv export` ([#13809](https://github.com/astral-sh/uv/pull/13809))
## 0.7.9
@@ -259,11 +284,11 @@ This release contains various changes that improve correctness and user experien
### Breaking changes
- **Update `uv version` to display and update project versions ([#12349](https://github.com/astral-sh/uv/pull/12349))**
-
+
Previously, `uv version` displayed uv's version. Now, `uv version` will display or update the project's version. This interface was [heavily requested](https://github.com/astral-sh/uv/issues/6298) and, after much consideration, we decided that transitioning the top-level command was the best option.
-
+
Here's a brief example:
-
+
```console
$ uv init example
Initialized project `example` at `./example`
@@ -275,72 +300,72 @@ This release contains various changes that improve correctness and user experien
$ uv version --short
1.0.0
```
-
+
If used outside of a project, uv will fallback to showing its own version still:
-
+
```console
$ uv version
warning: failed to read project: No `pyproject.toml` found in current directory or any parent directory
running `uv self version` for compatibility with old `uv version` command.
this fallback will be removed soon, pass `--preview` to make this an error.
-
+
uv 0.7.0 (4433f41c9 2025-04-29)
```
-
+
As described in the warning, `--preview` can be used to error instead:
-
+
```console
$ uv version --preview
error: No `pyproject.toml` found in current directory or any parent directory
```
-
+
The previous functionality of `uv version` was moved to `uv self version`.
- **Avoid fallback to subsequent indexes on authentication failure ([#12805](https://github.com/astral-sh/uv/pull/12805))**
-
+
When using the `first-index` strategy (the default), uv will stop searching indexes for a package once it is found on a single index. Previously, uv considered a package as "missing" from an index during authentication failures, such as an HTTP 401 or HTTP 403 (normally, missing packages are represented by an HTTP 404). This behavior was motivated by unusual responses from some package indexes, but reduces the safety of uv's index strategy when authentication fails. Now, uv will consider an authentication failure as a stop-point when searching for a package across indexes. The `index.ignore-error-codes` option can be used to recover the existing behavior, e.g.:
-
+
```toml
[[tool.uv.index]]
name = "pytorch"
url = "https://download.pytorch.org/whl/cpu"
ignore-error-codes = [401, 403]
```
-
+
Since PyTorch's indexes always return a HTTP 403 for missing packages, uv special-cases indexes on the `pytorch.org` domain to ignore that error code by default.
- **Require the command in `uvx ` to be available in the Python environment ([#11603](https://github.com/astral-sh/uv/pull/11603))**
-
+
Previously, `uvx` would attempt to execute a command even if it was not provided by a Python package. For example, if we presume `foo` is an empty Python package which provides no command, `uvx foo` would invoke the `foo` command on the `PATH` (if present). Now, uv will error early if the `foo` executable is not provided by the requested Python package. This check is not enforced when `--from` is used, so patterns like `uvx --from foo bash -c "..."` are still valid. uv also still allows `uvx foo` where the `foo` executable is provided by a dependency of `foo` instead of `foo` itself, as this is fairly common for packages which depend on a dedicated package for their command-line interface.
- **Use index URL instead of package URL for keyring credential lookups ([#12651](https://github.com/astral-sh/uv/pull/12651))**
-
+
When determining credentials for querying a package URL, uv previously sent the full URL to the `keyring` command. However, some keyring plugins expect to receive the *index URL* (which is usually a parent of the package URL). Now, uv requests credentials for the index URL instead. This behavior matches `pip`.
- **Remove `--version` from subcommands ([#13108](https://github.com/astral-sh/uv/pull/13108))**
-
+
Previously, uv allowed the `--version` flag on arbitrary subcommands, e.g., `uv run --version`. However, the `--version` flag is useful for other operations since uv is a package manager. Consequently, we've removed the `--version` flag from subcommands — it is only available as `uv --version`.
- **Omit Python 3.7 downloads from managed versions ([#13022](https://github.com/astral-sh/uv/pull/13022))**
-
+
Python 3.7 is EOL and not formally supported by uv; however, Python 3.7 was previously available for download on a subset of platforms.
- **Reject non-PEP 751 TOML files in install, compile, and export commands ([#13120](https://github.com/astral-sh/uv/pull/13120), [#13119](https://github.com/astral-sh/uv/pull/13119))**
-
+
Previously, uv treated arbitrary `.toml` files passed to commands (e.g., `uv pip install -r foo.toml` or `uv pip compile -o foo.toml`) as `requirements.txt`-formatted files. Now, uv will error instead. If using PEP 751 lockfiles, use the standardized format for custom names instead, e.g., `pylock.foo.toml`.
- **Ignore arbitrary Python requests in version files ([#12909](https://github.com/astral-sh/uv/pull/12909))**
-
+
uv allows arbitrary strings to be used for Python version requests, in which they are treated as an executable name to search for in the `PATH`. However, using this form of request in `.python-version` files is non-standard and conflicts with `pyenv-virtualenv` which writes environment names to `.python-version` files. In this release, uv will now ignore requests that are arbitrary strings when found in `.python-version` files.
- **Error on unknown dependency object specifiers ([12811](https://github.com/astral-sh/uv/pull/12811))**
-
+
The `[dependency-groups]` entries can include "object specifiers", e.g. `set-phasers-to = ...` in:
-
+
```toml
[dependency-groups]
foo = ["pyparsing"]
bar = [{set-phasers-to = "stun"}]
```
-
+
However, the only current spec-compliant object specifier is `include-group`. Previously, uv would ignore unknown object specifiers. Now, uv will error.
- **Make `--frozen` and `--no-sources` conflicting options ([#12671](https://github.com/astral-sh/uv/pull/12671))**
-
+
Using `--no-sources` always requires a new resolution and `--frozen` will always fail when used with it. Now, this conflict is encoded in the CLI options for clarity.
- **Treat empty `UV_PYTHON_INSTALL_DIR` and `UV_TOOL_DIR` as unset ([#12907](https://github.com/astral-sh/uv/pull/12907), [#12905](https://github.com/astral-sh/uv/pull/12905))**
-
+
Previously, these variables were treated as set to the current working directory when set to an empty string. Now, uv will ignore these variables when empty. This matches uv's behavior for other environment variables which configure directories.
### Enhancements
diff --git a/Cargo.lock b/Cargo.lock
index 0dcf1613f..cc16be083 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -4617,7 +4617,7 @@ dependencies = [
[[package]]
name = "uv"
-version = "0.7.10"
+version = "0.7.11"
dependencies = [
"anstream",
"anyhow",
@@ -4781,7 +4781,7 @@ dependencies = [
[[package]]
name = "uv-build"
-version = "0.7.10"
+version = "0.7.11"
dependencies = [
"anyhow",
"uv-build-backend",
@@ -5961,7 +5961,7 @@ dependencies = [
[[package]]
name = "uv-version"
-version = "0.7.10"
+version = "0.7.11"
[[package]]
name = "uv-virtualenv"
diff --git a/crates/uv-build/Cargo.toml b/crates/uv-build/Cargo.toml
index 04f01d79b..174b39369 100644
--- a/crates/uv-build/Cargo.toml
+++ b/crates/uv-build/Cargo.toml
@@ -1,6 +1,6 @@
[package]
name = "uv-build"
-version = "0.7.10"
+version = "0.7.11"
edition.workspace = true
rust-version.workspace = true
homepage.workspace = true
diff --git a/crates/uv-build/pyproject.toml b/crates/uv-build/pyproject.toml
index bc02f3b3b..3cc810e94 100644
--- a/crates/uv-build/pyproject.toml
+++ b/crates/uv-build/pyproject.toml
@@ -1,6 +1,6 @@
[project]
name = "uv-build"
-version = "0.7.10"
+version = "0.7.11"
description = "The uv build backend"
authors = [{ name = "Astral Software Inc.", email = "hey@astral.sh" }]
requires-python = ">=3.8"
diff --git a/crates/uv-version/Cargo.toml b/crates/uv-version/Cargo.toml
index c8a2f73f4..9aaccbbbe 100644
--- a/crates/uv-version/Cargo.toml
+++ b/crates/uv-version/Cargo.toml
@@ -1,6 +1,6 @@
[package]
name = "uv-version"
-version = "0.7.10"
+version = "0.7.11"
edition = { workspace = true }
rust-version = { workspace = true }
homepage = { workspace = true }
diff --git a/crates/uv/Cargo.toml b/crates/uv/Cargo.toml
index e47b96913..80b9141dd 100644
--- a/crates/uv/Cargo.toml
+++ b/crates/uv/Cargo.toml
@@ -1,6 +1,6 @@
[package]
name = "uv"
-version = "0.7.10"
+version = "0.7.11"
edition = { workspace = true }
rust-version = { workspace = true }
homepage = { workspace = true }
diff --git a/docs/configuration/build-backend.md b/docs/configuration/build-backend.md
index b75117fac..c0631aafc 100644
--- a/docs/configuration/build-backend.md
+++ b/docs/configuration/build-backend.md
@@ -19,7 +19,7 @@ existing project, add it to the `[build-system]` section in your `pyproject.toml
```toml
[build-system]
-requires = ["uv_build>=0.7.10,<0.8.0"]
+requires = ["uv_build>=0.7.11,<0.8.0"]
build-backend = "uv_build"
```
diff --git a/docs/getting-started/installation.md b/docs/getting-started/installation.md
index 77d6c724b..1638c8871 100644
--- a/docs/getting-started/installation.md
+++ b/docs/getting-started/installation.md
@@ -25,7 +25,7 @@ uv provides a standalone installer to download and install uv:
Request a specific version by including it in the URL:
```console
- $ curl -LsSf https://astral.sh/uv/0.7.10/install.sh | sh
+ $ curl -LsSf https://astral.sh/uv/0.7.11/install.sh | sh
```
=== "Windows"
@@ -41,7 +41,7 @@ uv provides a standalone installer to download and install uv:
Request a specific version by including it in the URL:
```pwsh-session
- PS> powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/0.7.10/install.ps1 | iex"
+ PS> powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/0.7.11/install.ps1 | iex"
```
!!! tip
diff --git a/docs/guides/integration/aws-lambda.md b/docs/guides/integration/aws-lambda.md
index b26fc4c85..b7e784879 100644
--- a/docs/guides/integration/aws-lambda.md
+++ b/docs/guides/integration/aws-lambda.md
@@ -92,7 +92,7 @@ the second stage, we'll copy this directory over to the final image, omitting th
other unnecessary files.
```dockerfile title="Dockerfile"
-FROM ghcr.io/astral-sh/uv:0.7.10 AS uv
+FROM ghcr.io/astral-sh/uv:0.7.11 AS uv
# First, bundle the dependencies into the task root.
FROM public.ecr.aws/lambda/python:3.13 AS builder
@@ -334,7 +334,7 @@ And confirm that opening http://127.0.0.1:8000/ in a web browser displays, "Hell
Finally, we'll update the Dockerfile to include the local library in the deployment package:
```dockerfile title="Dockerfile"
-FROM ghcr.io/astral-sh/uv:0.7.10 AS uv
+FROM ghcr.io/astral-sh/uv:0.7.11 AS uv
# First, bundle the dependencies into the task root.
FROM public.ecr.aws/lambda/python:3.13 AS builder
diff --git a/docs/guides/integration/docker.md b/docs/guides/integration/docker.md
index 0bdf44a01..a0d26ff55 100644
--- a/docs/guides/integration/docker.md
+++ b/docs/guides/integration/docker.md
@@ -31,7 +31,7 @@ $ docker run --rm -it ghcr.io/astral-sh/uv:debian uv --help
The following distroless images are available:
- `ghcr.io/astral-sh/uv:latest`
-- `ghcr.io/astral-sh/uv:{major}.{minor}.{patch}`, e.g., `ghcr.io/astral-sh/uv:0.7.10`
+- `ghcr.io/astral-sh/uv:{major}.{minor}.{patch}`, e.g., `ghcr.io/astral-sh/uv:0.7.11`
- `ghcr.io/astral-sh/uv:{major}.{minor}`, e.g., `ghcr.io/astral-sh/uv:0.7` (the latest patch
version)
@@ -75,7 +75,7 @@ And the following derived images are available:
As with the distroless image, each derived image is published with uv version tags as
`ghcr.io/astral-sh/uv:{major}.{minor}.{patch}-{base}` and
-`ghcr.io/astral-sh/uv:{major}.{minor}-{base}`, e.g., `ghcr.io/astral-sh/uv:0.7.10-alpine`.
+`ghcr.io/astral-sh/uv:{major}.{minor}-{base}`, e.g., `ghcr.io/astral-sh/uv:0.7.11-alpine`.
For more details, see the [GitHub Container](https://github.com/astral-sh/uv/pkgs/container/uv)
page.
@@ -113,7 +113,7 @@ Note this requires `curl` to be available.
In either case, it is best practice to pin to a specific uv version, e.g., with:
```dockerfile
-COPY --from=ghcr.io/astral-sh/uv:0.7.10 /uv /uvx /bin/
+COPY --from=ghcr.io/astral-sh/uv:0.7.11 /uv /uvx /bin/
```
!!! tip
@@ -131,7 +131,7 @@ COPY --from=ghcr.io/astral-sh/uv:0.7.10 /uv /uvx /bin/
Or, with the installer:
```dockerfile
-ADD https://astral.sh/uv/0.7.10/install.sh /uv-installer.sh
+ADD https://astral.sh/uv/0.7.11/install.sh /uv-installer.sh
```
### Installing a project
@@ -557,5 +557,5 @@ Verified OK
!!! tip
These examples use `latest`, but best practice is to verify the attestation for a specific
- version tag, e.g., `ghcr.io/astral-sh/uv:0.7.10`, or (even better) the specific image digest,
+ version tag, e.g., `ghcr.io/astral-sh/uv:0.7.11`, or (even better) the specific image digest,
such as `ghcr.io/astral-sh/uv:0.5.27@sha256:5adf09a5a526f380237408032a9308000d14d5947eafa687ad6c6a2476787b4f`.
diff --git a/docs/guides/integration/github.md b/docs/guides/integration/github.md
index 6158189f9..ac2ec637c 100644
--- a/docs/guides/integration/github.md
+++ b/docs/guides/integration/github.md
@@ -47,7 +47,7 @@ jobs:
uses: astral-sh/setup-uv@v5
with:
# Install a specific version of uv.
- version: "0.7.10"
+ version: "0.7.11"
```
## Setting up Python
diff --git a/docs/guides/integration/pre-commit.md b/docs/guides/integration/pre-commit.md
index 676b42644..d56a64770 100644
--- a/docs/guides/integration/pre-commit.md
+++ b/docs/guides/integration/pre-commit.md
@@ -19,7 +19,7 @@ To make sure your `uv.lock` file is up to date even if your `pyproject.toml` fil
repos:
- repo: https://github.com/astral-sh/uv-pre-commit
# uv version.
- rev: 0.7.10
+ rev: 0.7.11
hooks:
- id: uv-lock
```
@@ -30,7 +30,7 @@ To keep a `requirements.txt` file in sync with your `uv.lock` file:
repos:
- repo: https://github.com/astral-sh/uv-pre-commit
# uv version.
- rev: 0.7.10
+ rev: 0.7.11
hooks:
- id: uv-export
```
@@ -41,7 +41,7 @@ To compile requirements files:
repos:
- repo: https://github.com/astral-sh/uv-pre-commit
# uv version.
- rev: 0.7.10
+ rev: 0.7.11
hooks:
# Compile requirements
- id: pip-compile
@@ -54,7 +54,7 @@ To compile alternative requirements files, modify `args` and `files`:
repos:
- repo: https://github.com/astral-sh/uv-pre-commit
# uv version.
- rev: 0.7.10
+ rev: 0.7.11
hooks:
# Compile requirements
- id: pip-compile
@@ -68,7 +68,7 @@ To run the hook over multiple files at the same time, add additional entries:
repos:
- repo: https://github.com/astral-sh/uv-pre-commit
# uv version.
- rev: 0.7.10
+ rev: 0.7.11
hooks:
# Compile requirements
- id: pip-compile
diff --git a/pyproject.toml b/pyproject.toml
index d13c6c981..2dbeb55c1 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -4,7 +4,7 @@ build-backend = "maturin"
[project]
name = "uv"
-version = "0.7.10"
+version = "0.7.11"
description = "An extremely fast Python package and project manager, written in Rust."
authors = [{ name = "Astral Software Inc.", email = "hey@astral.sh" }]
requires-python = ">=3.8"
From 042e8a448bd42dc1a53a1fe7883cc81e68be87d0 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Micha=C5=82=20G=C3=B3rny?=
Date: Thu, 5 Jun 2025 12:35:21 +0200
Subject: [PATCH 012/250] Make `requirements_txt_ssh_git_username` not write
into homedir (#13857)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
## Summary
Modify `requirements_txt_ssh_git_username` test to pass `-o
UserKnownHostsFile=/dev/null` to OpenSSH, in order to prevent it from
trying to write into the known-hosts in user's home directory. To add
insult to the injury, OpenSSH ignores `HOME` and writes into the actual
home when it is explicitly overridden for the purpose of testing.
## Test Plan
`cargo test --no-default-features --features=git,pypi,python` in an
environment where the user can't write to `pw_home` (but can to
`${HOME}`). Previously the test would fail:
```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Snapshot Summary ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Snapshot: requirements_txt_ssh_git_username
Source: crates/uv/tests/it/export.rs:1252
────────────────────────────────────────────────────────────────────────────────
Expression: snapshot
────────────────────────────────────────────────────────────────────────────────
-old snapshot
+new results
────────────┬───────────────────────────────────────────────────────────────────
7 7 │ ├─▶ failed to clone into: [PATH]
8 8 │ ├─▶ failed to fetch branch, tag, or commit `d780faf0ac91257d4d5a4f0c5a0e4509608c0071`
9 9 │ ╰─▶ process didn't exit successfully: [GIT_COMMAND_ERROR]
10 10 │ --- stderr
11 │+ Could not create directory '/var/lib/portage/home/.ssh' (Permission denied).
12 │+ Failed to add the host to the list of known hosts (/var/lib/portage/home/.ssh/known_hosts).
11 13 │ Load key "[TEMP_DIR]/fake_deploy_key": [ERROR]
12 14 │ git@github.com: Permission denied (publickey).
13 15 │ fatal: Could not read from remote repository.
14 16 │
────────────┴───────────────────────────────────────────────────────────────────
```
---------
Co-authored-by: konstin
---
crates/uv/tests/it/export.rs | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/crates/uv/tests/it/export.rs b/crates/uv/tests/it/export.rs
index a555ab8fb..00a291779 100644
--- a/crates/uv/tests/it/export.rs
+++ b/crates/uv/tests/it/export.rs
@@ -1230,8 +1230,9 @@ fn requirements_txt_ssh_git_username() -> Result<()> {
// Ensure that we fail without passing the correct key (and don't go to the dev machine's
// credential helper).
+ // Overriding UserKnownHostsFile prevents OpenSSH from writing into user's home directory.
let failing_git_ssh_command = format!(
- "ssh -i {} -o IdentitiesOnly=yes -F /dev/null -o StrictHostKeyChecking=no",
+ "ssh -i {} -o IdentitiesOnly=yes -F /dev/null -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null",
fake_deploy_key.portable_display()
);
let mut filters = context.filters();
@@ -1274,9 +1275,9 @@ fn requirements_txt_ssh_git_username() -> Result<()> {
reduce_ssh_key_file_permissions(&ssh_deploy_key)?;
// Use the specified SSH key, and only that key, ignore `~/.ssh/config`, disable host key
- // verification for Windows.
+ // verification for Windows, don't write the accepted host to the user home.
let git_ssh_command = format!(
- "ssh -i {} -o IdentitiesOnly=yes -F /dev/null -o StrictHostKeyChecking=no",
+ "ssh -i {} -o IdentitiesOnly=yes -F /dev/null -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null",
ssh_deploy_key.portable_display()
);
From 3a29bb09864b89d9676125e0d7b983b771509df4 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Micha=C5=82=20G=C3=B3rny?=
Date: Thu, 5 Jun 2025 15:15:00 +0200
Subject: [PATCH 013/250] Switch `sync_dry_run` test to Python 3.9 (#13858)
## Summary
Switch the `sync_dry_run` test to use Python 3.9 instead of Python 3.8.
I didn't previously catch it since it was marked as `python_managed`.
## Test Plan
`cargo test --no-default-features --features git,pypi,python` without
Python 3.8 installed.
---
crates/uv/tests/it/sync.rs | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/crates/uv/tests/it/sync.rs b/crates/uv/tests/it/sync.rs
index 0fa6224ef..1cd6a1b88 100644
--- a/crates/uv/tests/it/sync.rs
+++ b/crates/uv/tests/it/sync.rs
@@ -7768,7 +7768,7 @@ fn find_links_relative_in_config_works_from_subdir() -> Result<()> {
#[test]
fn sync_dry_run() -> Result<()> {
- let context = TestContext::new_with_versions(&["3.8", "3.12"]);
+ let context = TestContext::new_with_versions(&["3.9", "3.12"]);
let pyproject_toml = context.temp_dir.child("pyproject.toml");
pyproject_toml.write_str(
@@ -7845,7 +7845,7 @@ fn sync_dry_run() -> Result<()> {
[project]
name = "project"
version = "0.1.0"
- requires-python = "==3.8.*"
+ requires-python = "==3.9.*"
dependencies = ["iniconfig"]
"#,
)?;
@@ -7856,7 +7856,7 @@ fn sync_dry_run() -> Result<()> {
----- stdout -----
----- stderr -----
- Using CPython 3.8.[X] interpreter at: [PYTHON-3.8]
+ Using CPython 3.9.[X] interpreter at: [PYTHON-3.9]
Would replace existing virtual environment at: .venv
Resolved 2 packages in [TIME]
Would update lockfile at: uv.lock
@@ -7871,7 +7871,7 @@ fn sync_dry_run() -> Result<()> {
----- stdout -----
----- stderr -----
- Using CPython 3.8.[X] interpreter at: [PYTHON-3.8]
+ Using CPython 3.9.[X] interpreter at: [PYTHON-3.9]
Removed virtual environment at: .venv
Creating virtual environment at: .venv
Resolved 2 packages in [TIME]
From efd4652faa7c7d6329a8c995929fb37f7dfd8663 Mon Sep 17 00:00:00 2001
From: Abhishek Upadhye <113502961+AbhiUpadhye@users.noreply.github.com>
Date: Thu, 5 Jun 2025 19:51:15 +0530
Subject: [PATCH 014/250] List `.gitignore` in project init files (#13855)
Fixes https://github.com/astral-sh/uv/issues/13639
Just added a missing `.gitignore` file in the docs, so that there would
be no confusion for readers referring it.
Thank you!
---
docs/guides/projects.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/docs/guides/projects.md b/docs/guides/projects.md
index efea187db..b86d02861 100644
--- a/docs/guides/projects.md
+++ b/docs/guides/projects.md
@@ -29,7 +29,7 @@ $ uv init
uv will create the following files:
```text
-.
+├── .gitignore
├── .python-version
├── README.md
├── main.py
From cd89a592eaae2496b0dc7798d6ac0b78c65be6d2 Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
<41898282+github-actions[bot]@users.noreply.github.com>
Date: Thu, 5 Jun 2025 11:21:35 -0500
Subject: [PATCH 015/250] Update tag for Python sysconfig metadata (#13851)
Automated update for Python releases.
Co-authored-by: zanieb <2586601+zanieb@users.noreply.github.com>
---
crates/uv-dev/src/generate_sysconfig_mappings.rs | 4 ++--
crates/uv-python/src/sysconfig/generated_mappings.rs | 2 +-
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/crates/uv-dev/src/generate_sysconfig_mappings.rs b/crates/uv-dev/src/generate_sysconfig_mappings.rs
index 5599bf0be..a44b8ee86 100644
--- a/crates/uv-dev/src/generate_sysconfig_mappings.rs
+++ b/crates/uv-dev/src/generate_sysconfig_mappings.rs
@@ -11,7 +11,7 @@ use crate::ROOT_DIR;
use crate::generate_all::Mode;
/// Contains current supported targets
-const TARGETS_YML_URL: &str = "https://raw.githubusercontent.com/astral-sh/python-build-standalone/refs/tags/20250529/cpython-unix/targets.yml";
+const TARGETS_YML_URL: &str = "https://raw.githubusercontent.com/astral-sh/python-build-standalone/refs/tags/20250604/cpython-unix/targets.yml";
#[derive(clap::Args)]
pub(crate) struct Args {
@@ -130,7 +130,7 @@ async fn generate() -> Result {
output.push_str("//! DO NOT EDIT\n");
output.push_str("//!\n");
output.push_str("//! Generated with `cargo run dev generate-sysconfig-metadata`\n");
- output.push_str("//! Targets from \n");
+ output.push_str("//! Targets from \n");
output.push_str("//!\n");
// Disable clippy/fmt
diff --git a/crates/uv-python/src/sysconfig/generated_mappings.rs b/crates/uv-python/src/sysconfig/generated_mappings.rs
index 1fac2348f..df127af07 100644
--- a/crates/uv-python/src/sysconfig/generated_mappings.rs
+++ b/crates/uv-python/src/sysconfig/generated_mappings.rs
@@ -1,7 +1,7 @@
//! DO NOT EDIT
//!
//! Generated with `cargo run dev generate-sysconfig-metadata`
-//! Targets from
+//! Targets from
//!
#![allow(clippy::all)]
#![cfg_attr(any(), rustfmt::skip)]
From 789a246cf33f0cd1e4135e62c7a83d76f168fa1c Mon Sep 17 00:00:00 2001
From: Zanie Blue
Date: Thu, 5 Jun 2025 11:53:27 -0500
Subject: [PATCH 016/250] Move the pip interface documentation into the
concepts section (#13841)
The motivation here being a reduction in the length of the navigation. I
don't think we did this in the first place because we didn't have the
capability to do another nested level, but now we're doing that for
Projects.
---
docs/concepts/index.md | 1 +
mkdocs.template.yml | 18 ++++++++++--------
2 files changed, 11 insertions(+), 8 deletions(-)
diff --git a/docs/concepts/index.md b/docs/concepts/index.md
index 9a61c46a7..a338a5fe7 100644
--- a/docs/concepts/index.md
+++ b/docs/concepts/index.md
@@ -7,5 +7,6 @@ Read the concept documents to learn more about uv's features:
- [Python versions](./python-versions.md)
- [Resolution](./resolution.md)
- [Caching](./cache.md)
+- [The pip interface](../pip/index.md)
Looking for a quick introduction to features? See the [guides](../guides/index.md) instead.
diff --git a/mkdocs.template.yml b/mkdocs.template.yml
index dea9496cf..5e14d676e 100644
--- a/mkdocs.template.yml
+++ b/mkdocs.template.yml
@@ -134,6 +134,16 @@ nav:
- Python versions: concepts/python-versions.md
- Resolution: concepts/resolution.md
- Caching: concepts/cache.md
+ # Note: The `pip` section was moved to the `concepts/` section but the
+ # top-level directory structure was retained to ease the transition.
+ - The pip interface:
+ - pip/index.md
+ - Using environments: pip/environments.md
+ - Managing packages: pip/packages.md
+ - Inspecting environments: pip/inspection.md
+ - Declaring dependencies: pip/dependencies.md
+ - Locking environments: pip/compile.md
+ - Compatibility with pip: pip/compatibility.md
- Configuration:
- configuration/index.md
- Configuration files: configuration/files.md
@@ -142,14 +152,6 @@ nav:
- Package indexes: configuration/indexes.md
- Installer: configuration/installer.md
- Build backend: configuration/build-backend.md
- - The pip interface:
- - pip/index.md
- - Using environments: pip/environments.md
- - Managing packages: pip/packages.md
- - Inspecting environments: pip/inspection.md
- - Declaring dependencies: pip/dependencies.md
- - Locking environments: pip/compile.md
- - Compatibility with pip: pip/compatibility.md
- Reference:
- reference/index.md
- Commands: reference/cli.md
From 062b6ab743833e6fe3c3ecc13cda90a4b33fa2d5 Mon Sep 17 00:00:00 2001
From: Zanie Blue
Date: Thu, 5 Jun 2025 12:05:42 -0500
Subject: [PATCH 017/250] Add `uv python pin --rm` to remove `.python-version`
pins (#13860)
I realized it is non-trivial to delete the global Python version pin,
and that we were missing this simple functionality
---
crates/uv-cli/src/lib.rs | 4 ++
crates/uv/src/commands/python/pin.rs | 15 +++++++
crates/uv/src/lib.rs | 1 +
crates/uv/src/settings.rs | 3 ++
crates/uv/tests/it/python_pin.rs | 61 ++++++++++++++++++++++++++++
docs/reference/cli.md | 1 +
6 files changed, 85 insertions(+)
diff --git a/crates/uv-cli/src/lib.rs b/crates/uv-cli/src/lib.rs
index 84fc59e9b..da4524aaa 100644
--- a/crates/uv-cli/src/lib.rs
+++ b/crates/uv-cli/src/lib.rs
@@ -5032,6 +5032,10 @@ pub struct PythonPinArgs {
/// directory, this version will be used instead.
#[arg(long)]
pub global: bool,
+
+ /// Remove the Python version pin.
+ #[arg(long, conflicts_with = "request", conflicts_with = "resolved")]
+ pub rm: bool,
}
#[derive(Args)]
diff --git a/crates/uv/src/commands/python/pin.rs b/crates/uv/src/commands/python/pin.rs
index 40dbfa1d9..5e2b89c18 100644
--- a/crates/uv/src/commands/python/pin.rs
+++ b/crates/uv/src/commands/python/pin.rs
@@ -20,6 +20,7 @@ use crate::commands::{ExitStatus, project::find_requires_python};
use crate::printer::Printer;
/// Pin to a specific Python version.
+#[allow(clippy::fn_params_excessive_bools)]
pub(crate) async fn pin(
project_dir: &Path,
request: Option,
@@ -27,6 +28,7 @@ pub(crate) async fn pin(
python_preference: PythonPreference,
no_project: bool,
global: bool,
+ rm: bool,
cache: &Cache,
printer: Printer,
) -> Result {
@@ -56,6 +58,19 @@ pub(crate) async fn pin(
PythonVersionFile::discover(project_dir, &VersionFileDiscoveryOptions::default()).await
};
+ if rm {
+ let Some(file) = version_file? else {
+ bail!("No Python version file found");
+ };
+ fs_err::tokio::remove_file(file.path()).await?;
+ writeln!(
+ printer.stdout(),
+ "Removed Python version file at `{}`",
+ file.path().user_display()
+ )?;
+ return Ok(ExitStatus::Success);
+ }
+
let Some(request) = request else {
// Display the current pinned Python version
if let Some(file) = version_file? {
diff --git a/crates/uv/src/lib.rs b/crates/uv/src/lib.rs
index a0f543a0c..1d4aa932c 100644
--- a/crates/uv/src/lib.rs
+++ b/crates/uv/src/lib.rs
@@ -1466,6 +1466,7 @@ async fn run(mut cli: Cli) -> Result {
globals.python_preference,
args.no_project,
args.global,
+ args.rm,
&cache,
printer,
)
diff --git a/crates/uv/src/settings.rs b/crates/uv/src/settings.rs
index 377756dbb..38d3d16fb 100644
--- a/crates/uv/src/settings.rs
+++ b/crates/uv/src/settings.rs
@@ -1056,6 +1056,7 @@ pub(crate) struct PythonPinSettings {
pub(crate) resolved: bool,
pub(crate) no_project: bool,
pub(crate) global: bool,
+ pub(crate) rm: bool,
}
impl PythonPinSettings {
@@ -1068,6 +1069,7 @@ impl PythonPinSettings {
resolved,
no_project,
global,
+ rm,
} = args;
Self {
@@ -1075,6 +1077,7 @@ impl PythonPinSettings {
resolved: flag(resolved, no_resolved).unwrap_or(false),
no_project,
global,
+ rm,
}
}
}
diff --git a/crates/uv/tests/it/python_pin.rs b/crates/uv/tests/it/python_pin.rs
index d6c267c7a..6aff28dbf 100644
--- a/crates/uv/tests/it/python_pin.rs
+++ b/crates/uv/tests/it/python_pin.rs
@@ -2,6 +2,7 @@ use std::path::PathBuf;
use crate::common::{TestContext, uv_snapshot};
use anyhow::Result;
+use assert_cmd::assert::OutputAssertExt;
use assert_fs::fixture::{FileWriteStr, PathChild, PathCreateDir};
use insta::assert_snapshot;
use uv_python::{
@@ -814,3 +815,63 @@ fn python_pin_with_comments() -> Result<()> {
Ok(())
}
+
+#[test]
+fn python_pin_rm() {
+ let context: TestContext = TestContext::new_with_versions(&["3.12"]);
+
+ uv_snapshot!(context.filters(), context.python_pin().arg("--rm"), @r"
+ success: false
+ exit_code: 2
+ ----- stdout -----
+
+ ----- stderr -----
+ error: No Python version file found
+ ");
+
+ // Remove the local pin
+ context.python_pin().arg("3.12").assert().success();
+ uv_snapshot!(context.filters(), context.python_pin().arg("--rm"), @r"
+ success: true
+ exit_code: 0
+ ----- stdout -----
+ Removed Python version file at `.python-version`
+
+ ----- stderr -----
+ ");
+
+ uv_snapshot!(context.filters(), context.python_pin().arg("--rm").arg("--global"), @r"
+ success: false
+ exit_code: 2
+ ----- stdout -----
+
+ ----- stderr -----
+ error: No Python version file found
+ ");
+
+ // Global does not detect the local pin
+ context.python_pin().arg("3.12").assert().success();
+ uv_snapshot!(context.filters(), context.python_pin().arg("--rm").arg("--global"), @r"
+ success: false
+ exit_code: 2
+ ----- stdout -----
+
+ ----- stderr -----
+ error: No Python version file found
+ ");
+
+ context
+ .python_pin()
+ .arg("3.12")
+ .arg("--global")
+ .assert()
+ .success();
+ uv_snapshot!(context.filters(), context.python_pin().arg("--rm").arg("--global"), @r"
+ success: true
+ exit_code: 0
+ ----- stdout -----
+ Removed Python version file at `[UV_USER_CONFIG_DIR]/.python-version`
+
+ ----- stderr -----
+ ");
+}
diff --git a/docs/reference/cli.md b/docs/reference/cli.md
index b7e41728a..d89d4498e 100644
--- a/docs/reference/cli.md
+++ b/docs/reference/cli.md
@@ -2904,6 +2904,7 @@ uv python pin [OPTIONS] [REQUEST]
--resolved
Write the resolved Python interpreter path instead of the request.
Ensures that the exact same interpreter is used.
This option is usually not safe to use when committing the .python-version
file to version control.
+--rm
Remove the Python version pin
--verbose
, -v
Use verbose output.
You can configure fine-grained logging using the RUST_LOG
environment variable. (https://docs.rs/tracing-subscriber/latest/tracing_subscriber/filter/struct.EnvFilter.html#directives )
From 262ca7396533903dc9381d08153b858db28c15cb Mon Sep 17 00:00:00 2001
From: Zanie Blue
Date: Thu, 5 Jun 2025 12:09:49 -0500
Subject: [PATCH 018/250] Remove the configuration section in favor of concepts
/ reference (#13842)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Extends https://github.com/astral-sh/uv/pull/13841 — I'll drop that
commit later after that pull request merges but it's small.
I find the split into a "Configuration" section awkward and don't think
it's helping us. Everything moved into the "Concepts" section, except
the "Environment variables" page which definitely belongs in the
reference and the "Installer" page which is fairly niche and seems
better in the reference.
Before / After
---
.github/workflows/ci.yml | 2 +-
.prettierignore | 2 +-
changelogs/0.4.x.md | 2 +-
.../uv-dev/src/generate_env_vars_reference.rs | 2 +-
.../authentication.md | 0
.../build-backend.md | 0
.../configuration-files.md} | 0
docs/concepts/index.md | 4 ++++
docs/{configuration => concepts}/indexes.md | 0
docs/concepts/projects/dependencies.md | 2 +-
docs/concepts/python-versions.md | 2 +-
docs/configuration/index.md | 12 -----------
docs/getting-started/installation.md | 2 +-
.../guides/integration/alternative-indexes.md | 4 ++--
docs/guides/projects.md | 4 ++--
docs/guides/scripts.md | 6 +++---
docs/pip/compatibility.md | 6 +++---
docs/pip/packages.md | 4 ++--
.../environment.md | 0
.../{configuration => reference}/installer.md | 2 +-
mkdocs.template.yml | 20 +++++++++++--------
pyproject.toml | 2 +-
22 files changed, 37 insertions(+), 41 deletions(-)
rename docs/{configuration => concepts}/authentication.md (100%)
rename docs/{configuration => concepts}/build-backend.md (100%)
rename docs/{configuration/files.md => concepts/configuration-files.md} (100%)
rename docs/{configuration => concepts}/indexes.md (100%)
delete mode 100644 docs/configuration/index.md
rename docs/{configuration => reference}/environment.md (100%)
rename docs/{configuration => reference}/installer.md (98%)
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 12d6e5f91..7e3caec55 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -39,7 +39,7 @@ jobs:
while IFS= read -r file; do
# Generated markdown and JSON files are checked during test runs.
- if [[ "${file}" =~ ^docs/ && ! "${file}" =~ ^docs/reference/(cli|settings).md && ! "${file}" =~ ^docs/configuration/environment.md ]]; then
+ if [[ "${file}" =~ ^docs/ && ! "${file}" =~ ^docs/reference/(cli|settings).md && ! "${file}" =~ ^docs/reference/environment.md ]]; then
echo "Skipping ${file} (matches docs/ pattern)"
continue
fi
diff --git a/.prettierignore b/.prettierignore
index dc54f51ff..1f89dc11b 100644
--- a/.prettierignore
+++ b/.prettierignore
@@ -3,6 +3,6 @@ CHANGELOG.md
PREVIEW-CHANGELOG.md
docs/reference/cli.md
docs/reference/settings.md
-docs/configuration/environment.md
+docs/reference/environment.md
ecosystem/home-assistant-core/LICENSE.md
docs/guides/integration/gitlab.md
diff --git a/changelogs/0.4.x.md b/changelogs/0.4.x.md
index 335780fef..e5f996f69 100644
--- a/changelogs/0.4.x.md
+++ b/changelogs/0.4.x.md
@@ -960,7 +960,7 @@ argument (or the `UV_INDEX` environment variable); to replace the default index
These changes are entirely backwards-compatible with the deprecated `--index-url` and
`--extra-index-url` options, which continue to work as before.
-See the [Index](https://docs.astral.sh/uv/configuration/indexes/) documentation for more.
+See the [Index](https://docs.astral.sh/uv/concepts/indexes/) documentation for more.
### Enhancements
diff --git a/crates/uv-dev/src/generate_env_vars_reference.rs b/crates/uv-dev/src/generate_env_vars_reference.rs
index 7265200c1..1004b00ef 100644
--- a/crates/uv-dev/src/generate_env_vars_reference.rs
+++ b/crates/uv-dev/src/generate_env_vars_reference.rs
@@ -21,7 +21,7 @@ pub(crate) fn main(args: &Args) -> anyhow::Result<()> {
let filename = "environment.md";
let reference_path = PathBuf::from(ROOT_DIR)
.join("docs")
- .join("configuration")
+ .join("reference")
.join(filename);
match args.mode {
diff --git a/docs/configuration/authentication.md b/docs/concepts/authentication.md
similarity index 100%
rename from docs/configuration/authentication.md
rename to docs/concepts/authentication.md
diff --git a/docs/configuration/build-backend.md b/docs/concepts/build-backend.md
similarity index 100%
rename from docs/configuration/build-backend.md
rename to docs/concepts/build-backend.md
diff --git a/docs/configuration/files.md b/docs/concepts/configuration-files.md
similarity index 100%
rename from docs/configuration/files.md
rename to docs/concepts/configuration-files.md
diff --git a/docs/concepts/index.md b/docs/concepts/index.md
index a338a5fe7..f9249bd31 100644
--- a/docs/concepts/index.md
+++ b/docs/concepts/index.md
@@ -5,7 +5,11 @@ Read the concept documents to learn more about uv's features:
- [Projects](./projects/index.md)
- [Tools](./tools.md)
- [Python versions](./python-versions.md)
+- [Configuration files](./configuration-files.md)
+- [Package indexes](./indexes.md)
- [Resolution](./resolution.md)
+- [The uv build backend](./build-backend.md)
+- [Authentication](./authentication.md)
- [Caching](./cache.md)
- [The pip interface](../pip/index.md)
diff --git a/docs/configuration/indexes.md b/docs/concepts/indexes.md
similarity index 100%
rename from docs/configuration/indexes.md
rename to docs/concepts/indexes.md
diff --git a/docs/concepts/projects/dependencies.md b/docs/concepts/projects/dependencies.md
index 2c68f92a4..42a579695 100644
--- a/docs/concepts/projects/dependencies.md
+++ b/docs/concepts/projects/dependencies.md
@@ -42,7 +42,7 @@ field.
The dependency will include a constraint, e.g., `>=0.27.2`, for the most recent, compatible version
of the package. The kind of bound can be adjusted with
-[`--bounds`](../../reference/settings.md#bounds), or the constraint can be provided directly:
+[`--bounds`](../../reference/settings.md#add-bounds), or the constraint can be provided directly:
```console
$ uv add "httpx>=0.20"
diff --git a/docs/concepts/python-versions.md b/docs/concepts/python-versions.md
index 508ee2440..016d9e00d 100644
--- a/docs/concepts/python-versions.md
+++ b/docs/concepts/python-versions.md
@@ -284,7 +284,7 @@ during `uv python install`.
!!! tip
The `python-downloads` setting can be set in a
- [persistent configuration file](../configuration/files.md) to change the default behavior, or
+ [persistent configuration file](./configuration-files.md) to change the default behavior, or
the `--no-python-downloads` flag can be passed to any uv command.
## Requiring or disabling managed Python versions
diff --git a/docs/configuration/index.md b/docs/configuration/index.md
deleted file mode 100644
index 813519629..000000000
--- a/docs/configuration/index.md
+++ /dev/null
@@ -1,12 +0,0 @@
-# Configuration overview
-
-Read about the various ways to configure uv:
-
-- [Using configuration files](./files.md)
-- [Using environment variables](./environment.md)
-- [Configuring authentication](./authentication.md)
-- [Configuring package indexes](./indexes.md)
-- [The uv build backend](build-backend.md)
-
-Or, jump to the [settings reference](../reference/settings.md) which enumerates the available
-configuration options.
diff --git a/docs/getting-started/installation.md b/docs/getting-started/installation.md
index 1638c8871..6edcafa28 100644
--- a/docs/getting-started/installation.md
+++ b/docs/getting-started/installation.md
@@ -62,7 +62,7 @@ uv provides a standalone installer to download and install uv:
Alternatively, the installer or binaries can be downloaded directly from [GitHub](#github-releases).
-See the documentation on [installer configuration](../configuration/installer.md) for details on
+See the reference documentation on the [installer](../reference/installer.md) for details on
customizing your uv installation.
### PyPI
diff --git a/docs/guides/integration/alternative-indexes.md b/docs/guides/integration/alternative-indexes.md
index 7ef6300e3..52ec6e365 100644
--- a/docs/guides/integration/alternative-indexes.md
+++ b/docs/guides/integration/alternative-indexes.md
@@ -8,8 +8,8 @@ description:
# Using alternative package indexes
While uv uses the official Python Package Index (PyPI) by default, it also supports
-[alternative package indexes](../../configuration/indexes.md). Most alternative indexes require
-various forms of authentication, which require some initial setup.
+[alternative package indexes](../../concepts/indexes.md). Most alternative indexes require various
+forms of authentication, which require some initial setup.
!!! important
diff --git a/docs/guides/projects.md b/docs/guides/projects.md
index b86d02861..0fd97eb0d 100644
--- a/docs/guides/projects.md
+++ b/docs/guides/projects.md
@@ -87,8 +87,8 @@ description or license. You can edit this file manually, or use commands like `u
See the official [`pyproject.toml` guide](https://packaging.python.org/en/latest/guides/writing-pyproject-toml/)
for more details on getting started with the `pyproject.toml` format.
-You'll also use this file to specify uv [configuration options](../configuration/files.md) in a
-[`[tool.uv]`](../reference/settings.md) section.
+You'll also use this file to specify uv [configuration options](../concepts/configuration-files.md)
+in a [`[tool.uv]`](../reference/settings.md) section.
### `.python-version`
diff --git a/docs/guides/scripts.md b/docs/guides/scripts.md
index 90816c9f9..7142db155 100644
--- a/docs/guides/scripts.md
+++ b/docs/guides/scripts.md
@@ -252,8 +252,8 @@ print(httpx.get("https://example.com"))
## Using alternative package indexes
-If you wish to use an alternative [package index](../configuration/indexes.md) to resolve
-dependencies, you can provide the index with the `--index` option:
+If you wish to use an alternative [package index](../concepts/indexes.md) to resolve dependencies,
+you can provide the index with the `--index` option:
```console
$ uv add --index "https://example.com/simple" --script example.py 'requests<3' 'rich'
@@ -267,7 +267,7 @@ This will include the package data in the inline metadata:
```
If you require authentication to access the package index, then please refer to the
-[package index](../configuration/indexes.md) documentation.
+[package index](../concepts/indexes.md) documentation.
## Locking dependencies
diff --git a/docs/pip/compatibility.md b/docs/pip/compatibility.md
index 7898ea7b8..30c14827d 100644
--- a/docs/pip/compatibility.md
+++ b/docs/pip/compatibility.md
@@ -36,7 +36,7 @@ drawbacks:
Instead, uv supports its own environment variables, like `UV_INDEX_URL`. uv also supports persistent
configuration in a `uv.toml` file or a `[tool.uv.pip]` section of `pyproject.toml`. For more
-information, see [Configuration files](../configuration/files.md).
+information, see [Configuration files](../concepts/configuration-files.md).
## Pre-release compatibility
@@ -120,8 +120,8 @@ While `unsafe-best-match` is the closest to `pip`'s behavior, it exposes users t
"dependency confusion" attacks.
uv also supports pinning packages to dedicated indexes (see:
-[_Indexes_](../configuration/indexes.md#pinning-a-package-to-an-index)), such that a given package
-is _always_ installed from a specific index.
+[_Indexes_](../concepts/indexes.md#pinning-a-package-to-an-index)), such that a given package is
+_always_ installed from a specific index.
## PEP 517 build isolation
diff --git a/docs/pip/packages.md b/docs/pip/packages.md
index ccd4da19a..a47b1aa0e 100644
--- a/docs/pip/packages.md
+++ b/docs/pip/packages.md
@@ -57,8 +57,8 @@ $ # Install a branch
$ uv pip install "git+https://github.com/astral-sh/ruff@main"
```
-See the [Git authentication](../configuration/authentication.md#git-authentication) documentation
-for installation from a private repository.
+See the [Git authentication](../concepts/authentication.md#git-authentication) documentation for
+installation from a private repository.
## Editable packages
diff --git a/docs/configuration/environment.md b/docs/reference/environment.md
similarity index 100%
rename from docs/configuration/environment.md
rename to docs/reference/environment.md
diff --git a/docs/configuration/installer.md b/docs/reference/installer.md
similarity index 98%
rename from docs/configuration/installer.md
rename to docs/reference/installer.md
index 0082217f5..8db77ba5d 100644
--- a/docs/configuration/installer.md
+++ b/docs/reference/installer.md
@@ -1,4 +1,4 @@
-# Configuring the uv installer
+# The uv installer
## Changing the install path
diff --git a/mkdocs.template.yml b/mkdocs.template.yml
index 5e14d676e..9a4d3b1cb 100644
--- a/mkdocs.template.yml
+++ b/mkdocs.template.yml
@@ -74,6 +74,12 @@ plugins:
"reference/versioning.md": "reference/policies/versioning.md"
"reference/platforms.md": "reference/policies/platforms.md"
"reference/build_failures.md": "reference/troubleshooting/build-failures.md"
+ "configuration/installer.md": "reference/installer.md"
+ "configuration/authentication.md": "concepts/authentication.md"
+ "configuration/build-backend.md": "concepts/build-backend.md"
+ "configuration/files.md": "concepts/configuration-files.md"
+ "configuration/indexes.md": "concepts/indexes.md"
+ "configuration/environment.md": "reference/environment.md"
extra_css:
- stylesheets/extra.css
extra_javascript:
@@ -132,7 +138,11 @@ nav:
- Using workspaces: concepts/projects/workspaces.md
- Tools: concepts/tools.md
- Python versions: concepts/python-versions.md
+ - Configuration files: concepts/configuration-files.md
+ - Package indexes: concepts/indexes.md
- Resolution: concepts/resolution.md
+ - Build backend: concepts/build-backend.md
+ - Authentication: concepts/authentication.md
- Caching: concepts/cache.md
# Note: The `pip` section was moved to the `concepts/` section but the
# top-level directory structure was retained to ease the transition.
@@ -144,18 +154,12 @@ nav:
- Declaring dependencies: pip/dependencies.md
- Locking environments: pip/compile.md
- Compatibility with pip: pip/compatibility.md
- - Configuration:
- - configuration/index.md
- - Configuration files: configuration/files.md
- - Environment variables: configuration/environment.md
- - Authentication: configuration/authentication.md
- - Package indexes: configuration/indexes.md
- - Installer: configuration/installer.md
- - Build backend: configuration/build-backend.md
- Reference:
- reference/index.md
- Commands: reference/cli.md
- Settings: reference/settings.md
+ - Environment variables: reference/environment.md
+ - Installer: reference/installer.md
- Troubleshooting:
- reference/troubleshooting/index.md
- Build failures: reference/troubleshooting/build-failures.md
diff --git a/pyproject.toml b/pyproject.toml
index 2dbeb55c1..745081d7a 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -86,7 +86,7 @@ version_files = [
"docs/guides/integration/pre-commit.md",
"docs/guides/integration/github.md",
"docs/guides/integration/aws-lambda.md",
- "docs/configuration/build-backend.md",
+ "docs/concepts/build-backend.md",
]
[tool.mypy]
From b1a50c33cfd944940f696672631530aec0da35aa Mon Sep 17 00:00:00 2001
From: Zanie Blue
Date: Thu, 5 Jun 2025 12:27:52 -0500
Subject: [PATCH 019/250] Fix `lock_requires_python` test case (#13866)
Tracking https://github.com/astral-sh/uv/issues/13867
---
crates/uv/tests/it/lock.rs | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/crates/uv/tests/it/lock.rs b/crates/uv/tests/it/lock.rs
index 22782b1d0..07d59d338 100644
--- a/crates/uv/tests/it/lock.rs
+++ b/crates/uv/tests/it/lock.rs
@@ -3685,7 +3685,7 @@ fn lock_requires_python() -> Result<()> {
cannot be used, we can conclude that pygls>=1.1.0 cannot be used.
And because your project depends on pygls>=1.1.0, we can conclude that your project's requirements are unsatisfiable.
- hint: Pre-releases are available for `pygls` in the requested range (e.g., 2.0.0a3), but pre-releases weren't enabled (try: `--prerelease=allow`)
+ hint: Pre-releases are available for `pygls` in the requested range (e.g., 2.0.0a4), but pre-releases weren't enabled (try: `--prerelease=allow`)
hint: The `requires-python` value (>=3.7) includes Python versions that are not supported by your dependencies (e.g., pygls>=1.1.0,<=1.2.1 only supports >=3.7.9, <4). Consider using a more restrictive `requires-python` value (like >=3.7.9, <4).
");
From 94ed6f880f78bf1aa7f7d7b0a0fa092980b03409 Mon Sep 17 00:00:00 2001
From: Jack O'Connor
Date: Thu, 5 Jun 2025 13:44:59 -0700
Subject: [PATCH 020/250] update Git and GitHub Actions docs to mention `gh
auth login` (#13850)
---
docs/concepts/authentication.md | 57 ++++++++++++++++++++++++++++---
docs/guides/integration/github.md | 29 ++++++++++++++++
2 files changed, 82 insertions(+), 4 deletions(-)
diff --git a/docs/concepts/authentication.md b/docs/concepts/authentication.md
index a05a637ba..10bf57c21 100644
--- a/docs/concepts/authentication.md
+++ b/docs/concepts/authentication.md
@@ -21,12 +21,48 @@ Using a password or token:
- `git+https://@/...` (e.g., `git+https://github_pat_asdf@github.com/astral-sh/uv`)
- `git+https://@/...` (e.g., `git+https://git@github.com/astral-sh/uv`)
-When using a GitHub personal access token, the username is arbitrary. GitHub does not support
-logging in with password directly, although other hosts may. If a username is provided without
-credentials, you will be prompted to enter them.
+When using a GitHub personal access token, the username is arbitrary. GitHub doesn't allow you to
+use your account name and password in URLs like this, although other hosts may.
If there are no credentials present in the URL and authentication is needed, the
-[Git credential helper](https://git-scm.com/doc/credential-helpers) will be queried.
+[Git credential helper](#git-credential-helpers) will be queried.
+
+!!! important
+
+ When using `uv add`, uv _will not_ persist Git credentials to the `pyproject.toml` or `uv.lock`.
+ These files are often included in source control and distributions, so it is generally unsafe
+ to include credentials in them.
+
+ If you have a Git credential helper configured, your credentials may be automatically persisted,
+ resulting in successful subsequent fetches of the dependency. However, if you do not have a Git
+ credential helper or the project is used on a machine without credentials seeded, uv will fail to
+ fetch the dependency.
+
+ You _may_ force uv to persist Git credentials by passing the `--raw` option to `uv add`. However,
+ we strongly recommend setting up a [credential helper](#git-credential-helpers) instead.
+
+### Git credential helpers
+
+Git credential helpers are used to store and retrieve Git credentials. See the
+[Git documentation](https://git-scm.com/doc/credential-helpers) to learn more.
+
+If you're using GitHub, the simplest way to set up a credential helper is to
+[install the `gh` CLI](https://github.com/cli/cli#installation) and use:
+
+```console
+$ gh auth login
+```
+
+See the [`gh auth login`](https://cli.github.com/manual/gh_auth_login) documentation for more
+details.
+
+!!! note
+
+ When using `gh auth login` interactively, the credential helper will be configured automatically.
+ But when using `gh auth login --with-token`, as in the uv
+ [GitHub Actions guide](../guides/integration/github.md#private-repos), the
+ [`gh auth setup-git`](https://cli.github.com/manual/gh_auth_setup-git) command will need to be
+ run afterwards to configure the credential helper.
## HTTP authentication
@@ -62,6 +98,19 @@ authenticating index URLs.
See the [`pip` compatibility guide](../pip/compatibility.md#registry-authentication) for details on
differences from `pip`.
+!!! important
+
+ When using `uv add`, uv _will not_ persist index credentials to the `pyproject.toml` or `uv.lock`.
+ These files are often included in source control and distributions, so it is generally unsafe
+ to include credentials in them. However, uv _will_ persist credentials for direct URLs, i.e.,
+ `package @ https://username:password:example.com/foo.whl`, as there is not currently a way to
+ otherwise provide those credentials.
+
+ If credentials were attached to an index URL during `uv add`, uv may fail to fetch dependencies
+ from indexes which require authentication on subsequent operations. See the
+ [index authentication documentation](./indexes.md#authentication) for details on persistent
+ authentication for indexes.
+
## Authentication with alternative package indexes
See the [alternative indexes integration guide](../guides/integration/alternative-indexes.md) for
diff --git a/docs/guides/integration/github.md b/docs/guides/integration/github.md
index ac2ec637c..9dce72252 100644
--- a/docs/guides/integration/github.md
+++ b/docs/guides/integration/github.md
@@ -346,3 +346,32 @@ steps:
```
To opt-out again, the `--no-system` flag can be used in any uv invocation.
+
+## Private repos
+
+If your project has [dependencies](../../concepts/projects/dependencies.md#git) on private GitHub
+repositories, you will need to configure a [personal access token (PAT)][PAT] to allow uv to fetch
+them.
+
+After creating a PAT that has read access to the private repositories, add it as a [repository
+secret].
+
+Then, you can use the [`gh`](https://cli.github.com/) CLI (which is installed in GitHub Actions
+runners by default) to configure a
+[credential helper for Git](../../concepts/authentication.md#git-credential-helpers) to use the PAT
+for queries to repositories hosted on `github.com`.
+
+For example, if you called your repository secret `MY_PAT`:
+
+```yaml title="example.yml"
+steps:
+ - name: Register the personal access token
+ run: echo "${{ secrets.MY_PAT }}" | gh auth login --with-token
+ - name: Configure the Git credential helper
+ run: gh auth setup-git
+```
+
+[PAT]:
+ https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens
+[repository secret]:
+ https://docs.github.com/en/actions/security-for-github-actions/security-guides/using-secrets-in-github-actions#creating-secrets-for-a-repository
From 7dd564d3d09668488c179b02bfe446754e58a5ea Mon Sep 17 00:00:00 2001
From: Zanie Blue
Date: Thu, 5 Jun 2025 16:48:34 -0500
Subject: [PATCH 021/250] Improve `python pin` error messages (#13862)
Addresses https://github.com/astral-sh/uv/issues/13854
---
crates/uv/src/commands/python/pin.rs | 5 ++++-
crates/uv/tests/it/python_pin.rs | 16 ++++++++--------
2 files changed, 12 insertions(+), 9 deletions(-)
diff --git a/crates/uv/src/commands/python/pin.rs b/crates/uv/src/commands/python/pin.rs
index 5e2b89c18..471f7461e 100644
--- a/crates/uv/src/commands/python/pin.rs
+++ b/crates/uv/src/commands/python/pin.rs
@@ -60,6 +60,9 @@ pub(crate) async fn pin(
if rm {
let Some(file) = version_file? else {
+ if global {
+ bail!("No global Python pin found");
+ }
bail!("No Python version file found");
};
fs_err::tokio::remove_file(file.path()).await?;
@@ -87,7 +90,7 @@ pub(crate) async fn pin(
}
return Ok(ExitStatus::Success);
}
- bail!("No pinned Python version found")
+ bail!("No Python version file found; specify a version to create one")
};
let request = PythonRequest::parse(&request);
diff --git a/crates/uv/tests/it/python_pin.rs b/crates/uv/tests/it/python_pin.rs
index 6aff28dbf..cf220d6b1 100644
--- a/crates/uv/tests/it/python_pin.rs
+++ b/crates/uv/tests/it/python_pin.rs
@@ -15,14 +15,14 @@ fn python_pin() {
let context: TestContext = TestContext::new_with_versions(&["3.11", "3.12"]);
// Without arguments, we attempt to read the current pin (which does not exist yet)
- uv_snapshot!(context.filters(), context.python_pin(), @r###"
+ uv_snapshot!(context.filters(), context.python_pin(), @r"
success: false
exit_code: 2
----- stdout -----
----- stderr -----
- error: No pinned Python version found
- "###);
+ error: No Python version file found; specify a version to create one
+ ");
// Given an argument, we pin to that version
uv_snapshot!(context.filters(), context.python_pin().arg("any"), @r###"
@@ -209,14 +209,14 @@ fn python_pin_global_if_no_local() -> Result<()> {
uv.create_dir_all()?;
// Without arguments, we attempt to read the current pin (which does not exist yet)
- uv_snapshot!(context.filters(), context.python_pin(), @r###"
+ uv_snapshot!(context.filters(), context.python_pin(), @r"
success: false
exit_code: 2
----- stdout -----
----- stderr -----
- error: No pinned Python version found
- "###);
+ error: No Python version file found; specify a version to create one
+ ");
// Given an argument, we globally pin to that version
uv_snapshot!(context.filters(), context.python_pin().arg("3.11").arg("--global"), @r"
@@ -846,7 +846,7 @@ fn python_pin_rm() {
----- stdout -----
----- stderr -----
- error: No Python version file found
+ error: No global Python pin found
");
// Global does not detect the local pin
@@ -857,7 +857,7 @@ fn python_pin_rm() {
----- stdout -----
----- stderr -----
- error: No Python version file found
+ error: No global Python pin found
");
context
From a68fb53c4b1508007fce112a3cae554573e35ec6 Mon Sep 17 00:00:00 2001
From: samypr100 <3933065+samypr100@users.noreply.github.com>
Date: Fri, 6 Jun 2025 07:52:14 -0400
Subject: [PATCH 022/250] PEP 751 uv export supports --no-editable (#13852)
## Summary
When trying out `uv export --no-editable --format pylock.toml` the
exported contents would still retain `editable = true` regardless.
## Test Plan
Added additional test. Tested locally on few projects where I was
previously using `uv export --no-editable --format requirements.txt` to
ensure the output aligns.
---
.../src/lock/export/pylock_toml.rs | 9 ++-
crates/uv/src/commands/project/export.rs | 1 +
crates/uv/tests/it/export.rs | 63 +++++++++++++++++++
3 files changed, 71 insertions(+), 2 deletions(-)
diff --git a/crates/uv-resolver/src/lock/export/pylock_toml.rs b/crates/uv-resolver/src/lock/export/pylock_toml.rs
index 767d42e0b..4f3e885ab 100644
--- a/crates/uv-resolver/src/lock/export/pylock_toml.rs
+++ b/crates/uv-resolver/src/lock/export/pylock_toml.rs
@@ -13,7 +13,8 @@ use url::Url;
use uv_cache_key::RepositoryUrl;
use uv_configuration::{
- BuildOptions, DependencyGroupsWithDefaults, ExtrasSpecificationWithDefaults, InstallOptions,
+ BuildOptions, DependencyGroupsWithDefaults, EditableMode, ExtrasSpecificationWithDefaults,
+ InstallOptions,
};
use uv_distribution_filename::{
BuildTag, DistExtension, ExtensionError, SourceDistExtension, SourceDistFilename,
@@ -619,6 +620,7 @@ impl<'lock> PylockToml {
extras: &ExtrasSpecificationWithDefaults,
dev: &DependencyGroupsWithDefaults,
annotate: bool,
+ editable: EditableMode,
install_options: &'lock InstallOptions,
) -> Result {
// Extract the packages from the lock file.
@@ -733,7 +735,10 @@ impl<'lock> PylockToml {
.unwrap_or_else(|_| sdist.install_path.to_path_buf())
.into_boxed_path(),
),
- editable: Some(sdist.editable),
+ editable: match editable {
+ EditableMode::NonEditable => None,
+ EditableMode::Editable => Some(sdist.editable),
+ },
subdirectory: None,
}),
_ => None,
diff --git a/crates/uv/src/commands/project/export.rs b/crates/uv/src/commands/project/export.rs
index e33de8231..566f4af41 100644
--- a/crates/uv/src/commands/project/export.rs
+++ b/crates/uv/src/commands/project/export.rs
@@ -330,6 +330,7 @@ pub(crate) async fn export(
&extras,
&dev,
include_annotations,
+ editable,
&install_options,
)?;
diff --git a/crates/uv/tests/it/export.rs b/crates/uv/tests/it/export.rs
index 00a291779..b48536f2e 100644
--- a/crates/uv/tests/it/export.rs
+++ b/crates/uv/tests/it/export.rs
@@ -3550,6 +3550,69 @@ fn pep_751_export_no_header() -> Result<()> {
Ok(())
}
+#[test]
+fn pep_751_export_no_editable() -> Result<()> {
+ let context = TestContext::new("3.12");
+
+ let pyproject_toml = context.temp_dir.child("pyproject.toml");
+ pyproject_toml.write_str(
+ r#"
+ [project]
+ name = "project"
+ version = "0.1.0"
+ requires-python = ">=3.12"
+ dependencies = ["anyio==3.7.0"]
+
+ [build-system]
+ requires = ["setuptools>=42"]
+ build-backend = "setuptools.build_meta"
+ "#,
+ )?;
+
+ context.lock().assert().success();
+
+ uv_snapshot!(context.filters(), context.export().arg("--format").arg("pylock.toml").arg("--no-editable"), @r#"
+ success: true
+ exit_code: 0
+ ----- stdout -----
+ # This file was autogenerated by uv via the following command:
+ # uv export --cache-dir [CACHE_DIR] --format pylock.toml --no-editable
+ lock-version = "1.0"
+ created-by = "uv"
+ requires-python = ">=3.12"
+
+ [[packages]]
+ name = "anyio"
+ version = "3.7.0"
+ index = "https://pypi.org/simple"
+ sdist = { url = "https://files.pythonhosted.org/packages/c6/b3/fefbf7e78ab3b805dec67d698dc18dd505af7a18a8dd08868c9b4fa736b5/anyio-3.7.0.tar.gz", upload-time = 2023-05-27T11:12:46Z, size = 142737, hashes = { sha256 = "275d9973793619a5374e1c89a4f4ad3f4b0a5510a2b5b939444bee8f4c4d37ce" } }
+ wheels = [{ url = "https://files.pythonhosted.org/packages/68/fe/7ce1926952c8a403b35029e194555558514b365ad77d75125f521a2bec62/anyio-3.7.0-py3-none-any.whl", upload-time = 2023-05-27T11:12:44Z, size = 80873, hashes = { sha256 = "eddca883c4175f14df8aedce21054bfca3adb70ffe76a9f607aef9d7fa2ea7f0" } }]
+
+ [[packages]]
+ name = "idna"
+ version = "3.6"
+ index = "https://pypi.org/simple"
+ sdist = { url = "https://files.pythonhosted.org/packages/bf/3f/ea4b9117521a1e9c50344b909be7886dd00a519552724809bb1f486986c2/idna-3.6.tar.gz", upload-time = 2023-11-25T15:40:54Z, size = 175426, hashes = { sha256 = "9ecdbbd083b06798ae1e86adcbfe8ab1479cf864e4ee30fe4e46a003d12491ca" } }
+ wheels = [{ url = "https://files.pythonhosted.org/packages/c2/e7/a82b05cf63a603df6e68d59ae6a68bf5064484a0718ea5033660af4b54a9/idna-3.6-py3-none-any.whl", upload-time = 2023-11-25T15:40:52Z, size = 61567, hashes = { sha256 = "c05567e9c24a6b9faaa835c4821bad0590fbb9d5779e7caa6e1cc4978e7eb24f" } }]
+
+ [[packages]]
+ name = "project"
+ directory = { path = "." }
+
+ [[packages]]
+ name = "sniffio"
+ version = "1.3.1"
+ index = "https://pypi.org/simple"
+ sdist = { url = "https://files.pythonhosted.org/packages/a2/87/a6771e1546d97e7e041b6ae58d80074f81b7d5121207425c964ddf5cfdbd/sniffio-1.3.1.tar.gz", upload-time = 2024-02-25T23:20:04Z, size = 20372, hashes = { sha256 = "f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc" } }
+ wheels = [{ url = "https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl", upload-time = 2024-02-25T23:20:01Z, size = 10235, hashes = { sha256 = "2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2" } }]
+
+ ----- stderr -----
+ Resolved 4 packages in [TIME]
+ "#);
+
+ Ok(())
+}
+
#[test]
fn pep_751_dependency_extra() -> Result<()> {
let context = TestContext::new("3.12");
From b865f76b7825c38029c7782788cc602f5b5b354c Mon Sep 17 00:00:00 2001
From: Micha Reiser
Date: Fri, 6 Jun 2025 14:07:34 +0200
Subject: [PATCH 023/250] Change `GlobDirFilter` fallback to `true` (#13882)
## Summary
I think `GlobDirFilter::match_directory` should return `true` if it
failed to construct a DFA
to force a full directory traversal. Returning `false` means that the
build backend excludes all files which
is unlikely what we want in that situation.
---
crates/uv-globfilter/src/glob_dir_filter.rs | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/crates/uv-globfilter/src/glob_dir_filter.rs b/crates/uv-globfilter/src/glob_dir_filter.rs
index eaca7ee0e..e963ee86e 100644
--- a/crates/uv-globfilter/src/glob_dir_filter.rs
+++ b/crates/uv-globfilter/src/glob_dir_filter.rs
@@ -85,7 +85,7 @@ impl GlobDirFilter {
/// don't end up including any child.
pub fn match_directory(&self, path: &Path) -> bool {
let Some(dfa) = &self.dfa else {
- return false;
+ return true;
};
// Allow the root path
From bf96c60e3eb805ba9d66630e87cd639c75f81f0a Mon Sep 17 00:00:00 2001
From: konsti
Date: Fri, 6 Jun 2025 14:16:40 +0200
Subject: [PATCH 024/250] Lock during `uv sync`, `uv add` and `uv remove` to
avoid race conditions (#13869)
Surprisingly, we weren't locking during `uv sync` so far, so running `uv
sync` in parallel could cause errors in filesystem races.
I've also added locks to `uv add` and `uv remove` which concurrently
modify `pyproject.toml`. These locks only apply after we determined the
interpreter, so they don't actually prevent computing the same thing
twice when running `uv add` in parallel.
All other subcommands that I checked were already locking (with no claim
to exhaustiveness)
Fixes #12751
# Test Plan
I don't have CI-sized reproducer for this.
```toml
[project]
name = "debug"
version = "0.1.0"
requires-python = ">=3.12"
dependencies = [
"boto3>=1.38.30",
"fastapi>=0.115.12",
"numba>=0.61.2",
"polars>=1.30.0",
"protobuf>=6.31.1",
"pyarrow>=20.0.0",
"pydantic>=2.11.5",
"requests>=2.32.3",
"urllib3>=2.4.0",
"scikit-learn>=1.6.1",
"jupyter>=1.1.1",
]
[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"
```
```
rm -rf .venv && parallel -n0 "uv sync -q" ::: {1..10}
```
---
crates/uv-python/src/environment.rs | 20 +---------------
crates/uv-python/src/interpreter.rs | 29 ++++++++++++++++++++++--
crates/uv/src/commands/project/add.rs | 13 ++++++++++-
crates/uv/src/commands/project/remove.rs | 2 ++
crates/uv/src/commands/project/sync.rs | 2 ++
5 files changed, 44 insertions(+), 22 deletions(-)
diff --git a/crates/uv-python/src/environment.rs b/crates/uv-python/src/environment.rs
index de6cf59d8..34fa3eee9 100644
--- a/crates/uv-python/src/environment.rs
+++ b/crates/uv-python/src/environment.rs
@@ -1,5 +1,4 @@
use std::borrow::Cow;
-use std::env;
use std::fmt;
use std::path::{Path, PathBuf};
use std::sync::Arc;
@@ -8,7 +7,6 @@ use owo_colors::OwoColorize;
use tracing::debug;
use uv_cache::Cache;
-use uv_cache_key::cache_digest;
use uv_fs::{LockedFile, Simplified};
use uv_pep440::Version;
@@ -316,23 +314,7 @@ impl PythonEnvironment {
/// Grab a file lock for the environment to prevent concurrent writes across processes.
pub async fn lock(&self) -> Result {
- if let Some(target) = self.0.interpreter.target() {
- // If we're installing into a `--target`, use a target-specific lockfile.
- LockedFile::acquire(target.root().join(".lock"), target.root().user_display()).await
- } else if let Some(prefix) = self.0.interpreter.prefix() {
- // Likewise, if we're installing into a `--prefix`, use a prefix-specific lockfile.
- LockedFile::acquire(prefix.root().join(".lock"), prefix.root().user_display()).await
- } else if self.0.interpreter.is_virtualenv() {
- // If the environment a virtualenv, use a virtualenv-specific lockfile.
- LockedFile::acquire(self.0.root.join(".lock"), self.0.root.user_display()).await
- } else {
- // Otherwise, use a global lockfile.
- LockedFile::acquire(
- env::temp_dir().join(format!("uv-{}.lock", cache_digest(&self.0.root))),
- self.0.root.user_display(),
- )
- .await
- }
+ self.0.interpreter.lock().await
}
/// Return the [`Interpreter`] for this environment.
diff --git a/crates/uv-python/src/interpreter.rs b/crates/uv-python/src/interpreter.rs
index 4d6f1f81d..26d810db5 100644
--- a/crates/uv-python/src/interpreter.rs
+++ b/crates/uv-python/src/interpreter.rs
@@ -1,10 +1,10 @@
use std::borrow::Cow;
use std::env::consts::ARCH;
use std::fmt::{Display, Formatter};
-use std::io;
use std::path::{Path, PathBuf};
use std::process::{Command, ExitStatus};
use std::sync::OnceLock;
+use std::{env, io};
use configparser::ini::Ini;
use fs_err as fs;
@@ -17,7 +17,7 @@ use tracing::{debug, trace, warn};
use uv_cache::{Cache, CacheBucket, CachedByTimestamp, Freshness};
use uv_cache_info::Timestamp;
use uv_cache_key::cache_digest;
-use uv_fs::{PythonExt, Simplified, write_atomic_sync};
+use uv_fs::{LockedFile, PythonExt, Simplified, write_atomic_sync};
use uv_install_wheel::Layout;
use uv_pep440::Version;
use uv_pep508::{MarkerEnvironment, StringVersion};
@@ -581,6 +581,31 @@ impl Interpreter {
.into_iter()
.any(|default_name| name == default_name.to_string())
}
+
+ /// Grab a file lock for the environment to prevent concurrent writes across processes.
+ pub async fn lock(&self) -> Result {
+ if let Some(target) = self.target() {
+ // If we're installing into a `--target`, use a target-specific lockfile.
+ LockedFile::acquire(target.root().join(".lock"), target.root().user_display()).await
+ } else if let Some(prefix) = self.prefix() {
+ // Likewise, if we're installing into a `--prefix`, use a prefix-specific lockfile.
+ LockedFile::acquire(prefix.root().join(".lock"), prefix.root().user_display()).await
+ } else if self.is_virtualenv() {
+ // If the environment a virtualenv, use a virtualenv-specific lockfile.
+ LockedFile::acquire(
+ self.sys_prefix.join(".lock"),
+ self.sys_prefix.user_display(),
+ )
+ .await
+ } else {
+ // Otherwise, use a global lockfile.
+ LockedFile::acquire(
+ env::temp_dir().join(format!("uv-{}.lock", cache_digest(&self.sys_executable))),
+ self.sys_prefix.user_display(),
+ )
+ .await
+ }
+ }
}
/// The `EXTERNALLY-MANAGED` file in a Python installation.
diff --git a/crates/uv/src/commands/project/add.rs b/crates/uv/src/commands/project/add.rs
index 7e50ac76f..2c64d9dbb 100644
--- a/crates/uv/src/commands/project/add.rs
+++ b/crates/uv/src/commands/project/add.rs
@@ -26,7 +26,7 @@ use uv_distribution_types::{
Index, IndexName, IndexUrls, NameRequirementSpecification, Requirement, RequirementSource,
UnresolvedRequirement, VersionId,
};
-use uv_fs::Simplified;
+use uv_fs::{LockedFile, Simplified};
use uv_git::GIT_STORE;
use uv_git_types::GitReference;
use uv_normalize::{DEV_DEPENDENCIES, DefaultExtras, PackageName};
@@ -277,6 +277,8 @@ pub(crate) async fn add(
}
};
+ let _lock = target.acquire_lock().await?;
+
let client_builder = BaseClientBuilder::new()
.connectivity(network_settings.connectivity)
.native_tls(network_settings.native_tls)
@@ -1152,6 +1154,15 @@ impl<'lock> From<&'lock AddTarget> for LockTarget<'lock> {
}
impl AddTarget {
+ /// Acquire a file lock mapped to the underlying interpreter to prevent concurrent
+ /// modifications.
+ pub(super) async fn acquire_lock(&self) -> Result {
+ match self {
+ Self::Script(_, interpreter) => interpreter.lock().await,
+ Self::Project(_, python_target) => python_target.interpreter().lock().await,
+ }
+ }
+
/// Returns the [`Interpreter`] for the target.
pub(super) fn interpreter(&self) -> &Interpreter {
match self {
diff --git a/crates/uv/src/commands/project/remove.rs b/crates/uv/src/commands/project/remove.rs
index 336641fce..6dab60012 100644
--- a/crates/uv/src/commands/project/remove.rs
+++ b/crates/uv/src/commands/project/remove.rs
@@ -268,6 +268,8 @@ pub(crate) async fn remove(
}
};
+ let _lock = target.acquire_lock().await?;
+
// Determine the lock mode.
let mode = if locked {
LockMode::Locked(target.interpreter())
diff --git a/crates/uv/src/commands/project/sync.rs b/crates/uv/src/commands/project/sync.rs
index 8e78836b4..ed96795e5 100644
--- a/crates/uv/src/commands/project/sync.rs
+++ b/crates/uv/src/commands/project/sync.rs
@@ -166,6 +166,8 @@ pub(crate) async fn sync(
),
};
+ let _lock = environment.lock().await?;
+
// Notify the user of any environment changes.
match &environment {
SyncEnvironment::Project(ProjectEnvironment::Existing(environment))
From 8a88ab2c70692ec7eefb0f78d2bdb8207542309b Mon Sep 17 00:00:00 2001
From: Yury Fedotov <102987839+yury-fedotov@users.noreply.github.com>
Date: Fri, 6 Jun 2025 09:45:37 -0400
Subject: [PATCH 025/250] Minor internal README enhancement for Markdown list
in PEP440 (#13880)
- Define all list elements using `-`: it used to be a mix of `*` and
`-`. `-` is what Prettier linter formats it to by default.
- Removed unnecessary blank line between 2 list elements. Other elements
were stitched together without blank lines in between.
- Only the first list element started in sentence case (capital letter
first) - I made all start like so.
---
crates/uv-pep440/Readme.md | 15 +++++++--------
1 file changed, 7 insertions(+), 8 deletions(-)
diff --git a/crates/uv-pep440/Readme.md b/crates/uv-pep440/Readme.md
index b8fd4015f..cc9281738 100644
--- a/crates/uv-pep440/Readme.md
+++ b/crates/uv-pep440/Readme.md
@@ -26,20 +26,19 @@ PEP 440 has a lot of unintuitive features, including:
- An epoch that you can prefix the version with, e.g., `1!1.2.3`. Lower epoch always means lower
version (`1.0 <=2!0.1`)
-
-* post versions, which can be attached to both stable releases and pre-releases
-* dev versions, which can be attached to sbpth table releases and pre-releases. When attached to a
+- Post versions, which can be attached to both stable releases and pre-releases
+- Dev versions, which can be attached to sbpth table releases and pre-releases. When attached to a
pre-release the dev version is ordered just below the normal pre-release, however when attached to
a stable version, the dev version is sorted before a pre-releases
-* pre-release handling is a mess: "Pre-releases of any kind, including developmental releases, are
+- Pre-release handling is a mess: "Pre-releases of any kind, including developmental releases, are
implicitly excluded from all version specifiers, unless they are already present on the system,
explicitly requested by the user, or if the only available version that satisfies the version
specifier is a pre-release.". This means that we can't say whether a specifier matches without
also looking at the environment
-* pre-release vs. pre-release incl. dev is fuzzy
-* local versions on top of all the others, which are added with a + and have implicitly typed string
+- Pre-release vs. pre-release incl. dev is fuzzy
+- Local versions on top of all the others, which are added with a + and have implicitly typed string
and number segments
-* no semver-caret (`^`), but a pseudo-semver tilde (`~=`)
-* ordering contradicts matching: We have, e.g., `1.0+local > 1.0` when sorting, but `==1.0` matches
+- No semver-caret (`^`), but a pseudo-semver tilde (`~=`)
+- Ordering contradicts matching: We have, e.g., `1.0+local > 1.0` when sorting, but `==1.0` matches
`1.0+local`. While the ordering of versions itself is a total order the version matching needs to
catch all sorts of special cases
From 0109af1aa510bd4f0759b0d53d842c3716e5cc3f Mon Sep 17 00:00:00 2001
From: konsti
Date: Fri, 6 Jun 2025 16:17:52 +0200
Subject: [PATCH 026/250] Hint at `tool.uv.environments` on resolution error
(#13455)
Users are not (yet) properly familiar with the concept of universal
resolution and its implication that we need to resolve for all possible
platforms and Python versions. Some projects only target a specific
platform or Python version, and users experience resolution errors due
to failures for other platforms. Indicated by the number of questions we
get about it, `tool.uv.environments` for restricting environments is not
well discoverable.
We add a special hint when resolution failed on a fork disjoint with the
current environment, hinting the user to constrain `requires-python` and
`tool.uv.environments` respectively.
The hint has false positives for cases where the resolution failed on a
different platform, but equally fails on the current platform, in cases
where the non-current fork was tried earlier. Given that conflicts can
be based on `requires-python`, afaik we can't parse whether the current
platform would also be affected from the derivation tree.
Two cases not covered by this are build errors as well as install errors
that need `tool.uv.required-environments`.
---
crates/uv-bench/benches/uv.rs | 1 +
crates/uv-dispatch/src/lib.rs | 1 +
crates/uv-resolver/src/error.rs | 49 ++++++-
.../uv-resolver/src/resolver/environment.rs | 8 ++
crates/uv-resolver/src/resolver/mod.rs | 13 +-
crates/uv/src/commands/pip/compile.rs | 1 +
crates/uv/src/commands/pip/install.rs | 1 +
crates/uv/src/commands/pip/operations.rs | 3 +
crates/uv/src/commands/pip/sync.rs | 1 +
crates/uv/src/commands/project/lock.rs | 1 +
crates/uv/src/commands/project/mod.rs | 2 +
crates/uv/tests/it/lock.rs | 135 ++++++++++++++++++
crates/uv/tests/it/lock_scenarios.rs | 2 +
crates/uv/tests/it/pip_compile.rs | 6 +-
14 files changed, 220 insertions(+), 4 deletions(-)
diff --git a/crates/uv-bench/benches/uv.rs b/crates/uv-bench/benches/uv.rs
index 03a360ad5..36838b6de 100644
--- a/crates/uv-bench/benches/uv.rs
+++ b/crates/uv-bench/benches/uv.rs
@@ -206,6 +206,7 @@ mod resolver {
options,
&python_requirement,
markers,
+ interpreter.markers(),
conflicts,
Some(&TAGS),
&flat_index,
diff --git a/crates/uv-dispatch/src/lib.rs b/crates/uv-dispatch/src/lib.rs
index 891ca8a38..3b0ad5555 100644
--- a/crates/uv-dispatch/src/lib.rs
+++ b/crates/uv-dispatch/src/lib.rs
@@ -226,6 +226,7 @@ impl BuildContext for BuildDispatch<'_> {
.build(),
&python_requirement,
ResolverEnvironment::specific(marker_env),
+ self.interpreter.markers(),
// Conflicting groups only make sense when doing universal resolution.
Conflicts::empty(),
Some(tags),
diff --git a/crates/uv-resolver/src/error.rs b/crates/uv-resolver/src/error.rs
index e3bb9cf23..adbdc3cc7 100644
--- a/crates/uv-resolver/src/error.rs
+++ b/crates/uv-resolver/src/error.rs
@@ -3,6 +3,7 @@ use std::fmt::Formatter;
use std::sync::Arc;
use indexmap::IndexSet;
+use owo_colors::OwoColorize;
use pubgrub::{
DefaultStringReporter, DerivationTree, Derived, External, Range, Ranges, Reporter, Term,
};
@@ -13,7 +14,8 @@ use uv_distribution_types::{
DerivationChain, DistErrorKind, IndexCapabilities, IndexLocations, IndexUrl, RequestedDist,
};
use uv_normalize::{ExtraName, InvalidNameError, PackageName};
-use uv_pep440::{LocalVersionSlice, LowerBound, Version};
+use uv_pep440::{LocalVersionSlice, LowerBound, Version, VersionSpecifier};
+use uv_pep508::{MarkerEnvironment, MarkerExpression, MarkerTree, MarkerValueVersion};
use uv_platform_tags::Tags;
use uv_static::EnvVars;
@@ -163,6 +165,7 @@ pub struct NoSolutionError {
fork_urls: ForkUrls,
fork_indexes: ForkIndexes,
env: ResolverEnvironment,
+ current_environment: MarkerEnvironment,
tags: Option,
workspace_members: BTreeSet,
options: Options,
@@ -184,6 +187,7 @@ impl NoSolutionError {
fork_urls: ForkUrls,
fork_indexes: ForkIndexes,
env: ResolverEnvironment,
+ current_environment: MarkerEnvironment,
tags: Option,
workspace_members: BTreeSet,
options: Options,
@@ -202,6 +206,7 @@ impl NoSolutionError {
fork_urls,
fork_indexes,
env,
+ current_environment,
tags,
workspace_members,
options,
@@ -353,6 +358,44 @@ impl NoSolutionError {
pub fn header(&self) -> NoSolutionHeader {
NoSolutionHeader::new(self.env.clone())
}
+
+ /// Hint at limiting the resolver environment if universal resolution failed for a target
+ /// that is not the current platform or not the current Python version.
+ fn hint_disjoint_targets(&self, f: &mut Formatter) -> std::fmt::Result {
+ // Only applicable to universal resolution.
+ let Some(markers) = self.env.fork_markers() else {
+ return Ok(());
+ };
+
+ // TODO(konsti): This is a crude approximation to telling the user the difference
+ // between their Python version and the relevant Python version range from the marker.
+ let current_python_version = self.current_environment.python_version().version.clone();
+ let current_python_marker = MarkerTree::expression(MarkerExpression::Version {
+ key: MarkerValueVersion::PythonVersion,
+ specifier: VersionSpecifier::equals_version(current_python_version.clone()),
+ });
+ if markers.is_disjoint(current_python_marker) {
+ write!(
+ f,
+ "\n\n{}{} While the active Python version is {}, \
+ the resolution failed for other Python versions supported by your \
+ project. Consider limiting your project's supported Python versions \
+ using `requires-python`.",
+ "hint".bold().cyan(),
+ ":".bold(),
+ current_python_version,
+ )?;
+ } else if !markers.evaluate(&self.current_environment, &[]) {
+ write!(
+ f,
+ "\n\n{}{} The resolution failed for an environment that is not the current one, \
+ consider limiting the environments with `tool.uv.environments`.",
+ "hint".bold().cyan(),
+ ":".bold(),
+ )?;
+ }
+ Ok(())
+ }
}
impl std::fmt::Debug for NoSolutionError {
@@ -372,6 +415,7 @@ impl std::fmt::Debug for NoSolutionError {
fork_urls,
fork_indexes,
env,
+ current_environment,
tags,
workspace_members,
options,
@@ -389,6 +433,7 @@ impl std::fmt::Debug for NoSolutionError {
.field("fork_urls", fork_urls)
.field("fork_indexes", fork_indexes)
.field("env", env)
+ .field("current_environment", current_environment)
.field("tags", tags)
.field("workspace_members", workspace_members)
.field("options", options)
@@ -473,6 +518,8 @@ impl std::fmt::Display for NoSolutionError {
write!(f, "\n\n{hint}")?;
}
+ self.hint_disjoint_targets(f)?;
+
Ok(())
}
}
diff --git a/crates/uv-resolver/src/resolver/environment.rs b/crates/uv-resolver/src/resolver/environment.rs
index 2a87bac47..354941886 100644
--- a/crates/uv-resolver/src/resolver/environment.rs
+++ b/crates/uv-resolver/src/resolver/environment.rs
@@ -198,6 +198,14 @@ impl ResolverEnvironment {
crate::marker::requires_python(pep508_marker)
}
+ /// For a universal resolution, return the markers of the current fork.
+ pub(crate) fn fork_markers(&self) -> Option {
+ match self.kind {
+ Kind::Specific { .. } => None,
+ Kind::Universal { markers, .. } => Some(markers),
+ }
+ }
+
/// Narrow this environment given the forking markers.
///
/// This effectively intersects any markers in this environment with the
diff --git a/crates/uv-resolver/src/resolver/mod.rs b/crates/uv-resolver/src/resolver/mod.rs
index 0194611d4..43fcca24f 100644
--- a/crates/uv-resolver/src/resolver/mod.rs
+++ b/crates/uv-resolver/src/resolver/mod.rs
@@ -31,7 +31,9 @@ use uv_distribution_types::{
use uv_git::GitResolver;
use uv_normalize::{ExtraName, GroupName, PackageName};
use uv_pep440::{MIN_VERSION, Version, VersionSpecifiers, release_specifiers_to_ranges};
-use uv_pep508::{MarkerExpression, MarkerOperator, MarkerTree, MarkerValueString};
+use uv_pep508::{
+ MarkerEnvironment, MarkerExpression, MarkerOperator, MarkerTree, MarkerValueString,
+};
use uv_platform_tags::Tags;
use uv_pypi_types::{ConflictItem, ConflictItemRef, Conflicts, VerbatimParsedUrl};
use uv_types::{BuildContext, HashStrategy, InstalledPackagesProvider};
@@ -115,6 +117,8 @@ struct ResolverState {
dependency_mode: DependencyMode,
hasher: HashStrategy,
env: ResolverEnvironment,
+ // The environment of the current Python interpreter.
+ current_environment: MarkerEnvironment,
tags: Option,
python_requirement: PythonRequirement,
conflicts: Conflicts,
@@ -158,6 +162,7 @@ impl<'a, Context: BuildContext, InstalledPackages: InstalledPackagesProvider>
options: Options,
python_requirement: &'a PythonRequirement,
env: ResolverEnvironment,
+ current_environment: &MarkerEnvironment,
conflicts: Conflicts,
tags: Option<&'a Tags>,
flat_index: &'a FlatIndex,
@@ -184,6 +189,7 @@ impl<'a, Context: BuildContext, InstalledPackages: InstalledPackagesProvider>
options,
hasher,
env,
+ current_environment,
tags.cloned(),
python_requirement,
conflicts,
@@ -206,6 +212,7 @@ impl
options: Options,
hasher: &HashStrategy,
env: ResolverEnvironment,
+ current_environment: &MarkerEnvironment,
tags: Option,
python_requirement: &PythonRequirement,
conflicts: Conflicts,
@@ -234,6 +241,7 @@ impl
hasher: hasher.clone(),
locations: locations.clone(),
env,
+ current_environment: current_environment.clone(),
tags,
python_requirement: python_requirement.clone(),
conflicts,
@@ -354,6 +362,7 @@ impl ResolverState ResolverState,
) -> ResolveError {
err = NoSolutionError::collapse_local_version_segments(NoSolutionError::collapse_proxies(
@@ -2589,6 +2599,7 @@ impl ResolverState(
tags: Option<&Tags>,
resolver_env: ResolverEnvironment,
python_requirement: PythonRequirement,
+ current_environment: &MarkerEnvironment,
conflicts: Conflicts,
client: &RegistryClient,
flat_index: &FlatIndex,
@@ -303,6 +305,7 @@ pub(crate) async fn resolve(
options,
&python_requirement,
resolver_env,
+ current_environment,
conflicts,
tags,
flat_index,
diff --git a/crates/uv/src/commands/pip/sync.rs b/crates/uv/src/commands/pip/sync.rs
index 7831eee04..35cef5907 100644
--- a/crates/uv/src/commands/pip/sync.rs
+++ b/crates/uv/src/commands/pip/sync.rs
@@ -416,6 +416,7 @@ pub(crate) async fn pip_sync(
Some(&tags),
ResolverEnvironment::specific(marker_env.clone()),
python_requirement,
+ interpreter.markers(),
Conflicts::empty(),
&client,
&flat_index,
diff --git a/crates/uv/src/commands/project/lock.rs b/crates/uv/src/commands/project/lock.rs
index 93b51a60a..89b3713cc 100644
--- a/crates/uv/src/commands/project/lock.rs
+++ b/crates/uv/src/commands/project/lock.rs
@@ -822,6 +822,7 @@ async fn do_lock(
None,
resolver_env,
python_requirement,
+ interpreter.markers(),
conflicts.clone(),
&client,
&flat_index,
diff --git a/crates/uv/src/commands/project/mod.rs b/crates/uv/src/commands/project/mod.rs
index 2569b962f..d2efc3ccd 100644
--- a/crates/uv/src/commands/project/mod.rs
+++ b/crates/uv/src/commands/project/mod.rs
@@ -1924,6 +1924,7 @@ pub(crate) async fn resolve_environment(
Some(tags),
ResolverEnvironment::specific(marker_env),
python_requirement,
+ interpreter.markers(),
Conflicts::empty(),
&client,
&flat_index,
@@ -2296,6 +2297,7 @@ pub(crate) async fn update_environment(
Some(tags),
ResolverEnvironment::specific(marker_env.clone()),
python_requirement,
+ venv.interpreter().markers(),
Conflicts::empty(),
&client,
&flat_index,
diff --git a/crates/uv/tests/it/lock.rs b/crates/uv/tests/it/lock.rs
index 07d59d338..a1fa1721e 100644
--- a/crates/uv/tests/it/lock.rs
+++ b/crates/uv/tests/it/lock.rs
@@ -3688,6 +3688,8 @@ fn lock_requires_python() -> Result<()> {
hint: Pre-releases are available for `pygls` in the requested range (e.g., 2.0.0a4), but pre-releases weren't enabled (try: `--prerelease=allow`)
hint: The `requires-python` value (>=3.7) includes Python versions that are not supported by your dependencies (e.g., pygls>=1.1.0,<=1.2.1 only supports >=3.7.9, <4). Consider using a more restrictive `requires-python` value (like >=3.7.9, <4).
+
+ hint: While the active Python version is 3.12, the resolution failed for other Python versions supported by your project. Consider limiting your project's supported Python versions using `requires-python`.
");
// Require >=3.7, and allow locking to a version of `pygls` that is compatible (==1.0.1).
@@ -27393,3 +27395,136 @@ fn lock_omit_wheels_exclude_newer() -> Result<()> {
Ok(())
}
+
+/// Check that we hint if the resolution failed in a different Python version.
+#[test]
+fn lock_conflict_for_disjoint_python_version() -> Result<()> {
+ let context = TestContext::new("3.9");
+
+ let pyproject_toml = context.temp_dir.child("pyproject.toml");
+ pyproject_toml.write_str(
+ r#"
+ [project]
+ name = "foo"
+ version = "0.1.0"
+ requires-python = ">=3.9"
+ dependencies = [
+ "numpy==1.20.3",
+ "pandas==1.5.3",
+ ]
+ "#,
+ )?;
+
+ uv_snapshot!(context.filters(), context.lock(), @r"
+ success: false
+ exit_code: 1
+ ----- stdout -----
+
+ ----- stderr -----
+ × No solution found when resolving dependencies for split (python_full_version >= '3.11'):
+ ╰─▶ Because only numpy{python_full_version >= '3.10'}<=1.26.4 is available and pandas==1.5.3 depends on numpy{python_full_version >= '3.10'}>=1.21.0, we can conclude that pandas==1.5.3 depends on numpy>=1.21.0,<=1.26.4.
+ And because your project depends on numpy==1.20.3 and pandas==1.5.3, we can conclude that your project's requirements are unsatisfiable.
+
+ hint: Pre-releases are available for `numpy` in the requested range (e.g., 2.3.0rc1), but pre-releases weren't enabled (try: `--prerelease=allow`)
+
+ hint: While the active Python version is 3.9, the resolution failed for other Python versions supported by your project. Consider limiting your project's supported Python versions using `requires-python`.
+ ");
+
+ // Check that the resolution passes on the restricted Python environment.
+ pyproject_toml.write_str(
+ r#"
+ [project]
+ name = "foo"
+ version = "0.1.0"
+ requires-python = "==3.9.*"
+ dependencies = [
+ "numpy==1.20.3",
+ "pandas==1.5.3",
+ ]
+ "#,
+ )?;
+
+ uv_snapshot!(context.filters(), context.lock(), @r"
+ success: true
+ exit_code: 0
+ ----- stdout -----
+
+ ----- stderr -----
+ Resolved 6 packages in [TIME]
+ ");
+
+ Ok(())
+}
+
+/// Check that we hint if the resolution failed for a different platform.
+#[test]
+fn lock_conflict_for_disjoint_platform() -> Result<()> {
+ let context = TestContext::new("3.12");
+
+ let pyproject_toml = context.temp_dir.child("pyproject.toml");
+ pyproject_toml.write_str(
+ r#"
+ [project]
+ name = "foo"
+ version = "0.1.0"
+ requires-python = ">=3.9"
+ dependencies = [
+ "numpy>=1.24,<1.26; sys_platform == 'exotic'",
+ "numpy>=1.26",
+ ]
+ "#,
+ )?;
+
+ uv_snapshot!(context.filters(), context.lock(), @r"
+ success: false
+ exit_code: 1
+ ----- stdout -----
+
+ ----- stderr -----
+ × No solution found when resolving dependencies for split (sys_platform == 'exotic'):
+ ╰─▶ Because only the following versions of numpy{sys_platform == 'exotic'} are available:
+ numpy{sys_platform == 'exotic'}<=1.24.0
+ numpy{sys_platform == 'exotic'}==1.24.1
+ numpy{sys_platform == 'exotic'}==1.24.2
+ numpy{sys_platform == 'exotic'}==1.24.3
+ numpy{sys_platform == 'exotic'}==1.24.4
+ numpy{sys_platform == 'exotic'}==1.25.0
+ numpy{sys_platform == 'exotic'}==1.25.1
+ numpy{sys_platform == 'exotic'}==1.25.2
+ numpy{sys_platform == 'exotic'}>1.26
+ and your project depends on numpy{sys_platform == 'exotic'}>=1.24,<1.26, we can conclude that your project depends on numpy>=1.24.0,<=1.25.2.
+ And because your project depends on numpy>=1.26, we can conclude that your project's requirements are unsatisfiable.
+
+ hint: The resolution failed for an environment that is not the current one, consider limiting the environments with `tool.uv.environments`.
+ ");
+
+ // Check that the resolution passes on the restricted environment.
+ pyproject_toml.write_str(
+ r#"
+ [project]
+ name = "foo"
+ version = "0.1.0"
+ requires-python = ">=3.9"
+ dependencies = [
+ "numpy>=1.24,<1.26; sys_platform == 'exotic'",
+ "numpy>=1.26",
+ ]
+
+ [tool.uv]
+ environments = [
+ "sys_platform == 'linux' or sys_platform == 'win32' or sys_platform == 'darwin'"
+ ]
+ "#,
+ )?;
+
+ uv_snapshot!(context.filters(), context.lock(), @r"
+ success: true
+ exit_code: 0
+ ----- stdout -----
+
+ ----- stderr -----
+ Resolved 2 packages in [TIME]
+ ");
+
+ Ok(())
+}
diff --git a/crates/uv/tests/it/lock_scenarios.rs b/crates/uv/tests/it/lock_scenarios.rs
index bc49fa728..3be986ad1 100644
--- a/crates/uv/tests/it/lock_scenarios.rs
+++ b/crates/uv/tests/it/lock_scenarios.rs
@@ -826,6 +826,8 @@ fn conflict_in_fork() -> Result<()> {
package-a{sys_platform == 'os2'}==1.0.0
package-a{sys_platform == 'os2'}>2
and your project depends on package-a{sys_platform == 'os2'}<2, we can conclude that your project's requirements are unsatisfiable.
+
+ hint: The resolution failed for an environment that is not the current one, consider limiting the environments with `tool.uv.environments`.
"
);
diff --git a/crates/uv/tests/it/pip_compile.rs b/crates/uv/tests/it/pip_compile.rs
index b63a8b37c..17f336dc6 100644
--- a/crates/uv/tests/it/pip_compile.rs
+++ b/crates/uv/tests/it/pip_compile.rs
@@ -14497,7 +14497,7 @@ fn unsupported_requires_python_dynamic_metadata() -> Result<()> {
uv_snapshot!(context.filters(), context
.pip_compile()
.arg("--universal")
- .arg("requirements.in"), @r###"
+ .arg("requirements.in"), @r"
success: false
exit_code: 1
----- stdout -----
@@ -14507,7 +14507,9 @@ fn unsupported_requires_python_dynamic_metadata() -> Result<()> {
╰─▶ Because source-distribution==0.0.3 requires Python >=3.10 and you require source-distribution{python_full_version >= '3.10'}==0.0.3, we can conclude that your requirements are unsatisfiable.
hint: The source distribution for `source-distribution` (v0.0.3) does not include static metadata. Generating metadata for this package requires Python >=3.10, but Python 3.8.[X] is installed.
- "###);
+
+ hint: While the active Python version is 3.8, the resolution failed for other Python versions supported by your project. Consider limiting your project's supported Python versions using `requires-python`.
+ ");
Ok(())
}
From 7aefbe8dc55be0714ddf45c4dacdcdb0d7483c87 Mon Sep 17 00:00:00 2001
From: konsti
Date: Fri, 6 Jun 2025 20:35:18 +0200
Subject: [PATCH 027/250] Don't hint at versions removed by excluded-newer
(#13884)
General small hint false positives that shows up as CI failure in our
snapshots.
Fixes #13867
---
.../src/prioritized_distribution.rs | 16 ++++-
crates/uv-resolver/src/resolver/mod.rs | 30 +++++++--
crates/uv/tests/it/cache_prune.rs | 6 +-
crates/uv/tests/it/edit.rs | 23 +++----
crates/uv/tests/it/lock.rs | 61 ++++++++++++++-----
crates/uv/tests/it/pip_compile.rs | 31 +++++++---
crates/uv/tests/it/pip_install.rs | 6 +-
7 files changed, 125 insertions(+), 48 deletions(-)
diff --git a/crates/uv-distribution-types/src/prioritized_distribution.rs b/crates/uv-distribution-types/src/prioritized_distribution.rs
index b19061095..e3da41a67 100644
--- a/crates/uv-distribution-types/src/prioritized_distribution.rs
+++ b/crates/uv-distribution-types/src/prioritized_distribution.rs
@@ -11,7 +11,7 @@ use uv_platform_tags::{AbiTag, IncompatibleTag, LanguageTag, PlatformTag, TagPri
use uv_pypi_types::{HashDigest, Yanked};
use crate::{
- InstalledDist, KnownPlatform, RegistryBuiltDist, RegistryBuiltWheel, RegistrySourceDist,
+ File, InstalledDist, KnownPlatform, RegistryBuiltDist, RegistryBuiltWheel, RegistrySourceDist,
ResolvedDistRef,
};
@@ -557,6 +557,20 @@ impl PrioritizedDist {
self.0.best_wheel_index.map(|i| &self.0.wheels[i])
}
+ /// Returns an iterator of all wheels and the source distribution, if any.
+ pub fn files(&self) -> impl Iterator- {
+ self.0
+ .wheels
+ .iter()
+ .map(|(wheel, _)| wheel.file.as_ref())
+ .chain(
+ self.0
+ .source
+ .as_ref()
+ .map(|(source_dist, _)| source_dist.file.as_ref()),
+ )
+ }
+
/// Returns an iterator over all Python tags for the distribution.
pub fn python_tags(&self) -> impl Iterator
- + '_ {
self.0
diff --git a/crates/uv-resolver/src/resolver/mod.rs b/crates/uv-resolver/src/resolver/mod.rs
index 43fcca24f..1384ce4f7 100644
--- a/crates/uv-resolver/src/resolver/mod.rs
+++ b/crates/uv-resolver/src/resolver/mod.rs
@@ -76,7 +76,10 @@ use crate::resolver::system::SystemDependency;
pub(crate) use crate::resolver::urls::Urls;
use crate::universal_marker::{ConflictMarker, UniversalMarker};
use crate::yanks::AllowedYanks;
-use crate::{DependencyMode, Exclusions, FlatIndex, Options, ResolutionMode, VersionMap, marker};
+use crate::{
+ DependencyMode, ExcludeNewer, Exclusions, FlatIndex, Options, ResolutionMode, VersionMap,
+ marker,
+};
pub(crate) use provider::MetadataUnavailable;
use uv_torch::TorchStrategy;
@@ -363,6 +366,7 @@ impl
ResolverState ResolverState,
visited: &FxHashSet,
) -> ResolveError {
err = NoSolutionError::collapse_local_version_segments(NoSolutionError::collapse_proxies(
@@ -2566,10 +2571,27 @@ impl ResolverState= exclude_newer.timestamp_millis()
+ })
+ }) {
+ continue;
+ }
+ }
+
+ package_versions.insert(version.clone());
+ }
}
// Track the indexes in which the package is available.
diff --git a/crates/uv/tests/it/cache_prune.rs b/crates/uv/tests/it/cache_prune.rs
index d760786d7..a6ec48bd4 100644
--- a/crates/uv/tests/it/cache_prune.rs
+++ b/crates/uv/tests/it/cache_prune.rs
@@ -250,19 +250,19 @@ fn prune_unzipped() -> Result<()> {
requirements_txt.write_str(indoc! { r"
iniconfig
" })?;
- uv_snapshot!(&filters, context.pip_install().arg("-r").arg("requirements.txt").arg("--offline"), @r###"
+ uv_snapshot!(&filters, context.pip_install().arg("-r").arg("requirements.txt").arg("--offline"), @r"
success: false
exit_code: 1
----- stdout -----
----- stderr -----
× No solution found when resolving dependencies:
- ╰─▶ Because iniconfig<=2.0.0 needs to be downloaded from a registry and you require iniconfig, we can conclude that your requirements are unsatisfiable.
+ ╰─▶ Because all versions of iniconfig need to be downloaded from a registry and you require iniconfig, we can conclude that your requirements are unsatisfiable.
hint: Pre-releases are available for `iniconfig` in the requested range (e.g., 0.2.dev0), but pre-releases weren't enabled (try: `--prerelease=allow`)
hint: Packages were unavailable because the network was disabled. When the network is disabled, registry packages may only be read from the cache.
- "###);
+ ");
Ok(())
}
diff --git a/crates/uv/tests/it/edit.rs b/crates/uv/tests/it/edit.rs
index e620eb850..db47b27ef 100644
--- a/crates/uv/tests/it/edit.rs
+++ b/crates/uv/tests/it/edit.rs
@@ -7956,7 +7956,7 @@ fn add_shadowed_name() -> Result<()> {
"###);
// Constraint with several available versions, check for an indirect dependency loop.
- uv_snapshot!(context.filters(), context.add().arg("dagster-webserver>=1.6.11,<1.7.0"), @r###"
+ uv_snapshot!(context.filters(), context.add().arg("dagster-webserver>=1.6.11,<1.7.0"), @r"
success: false
exit_code: 1
----- stdout -----
@@ -7964,21 +7964,16 @@ fn add_shadowed_name() -> Result<()> {
----- stderr -----
× No solution found when resolving dependencies:
╰─▶ Because only the following versions of dagster-webserver are available:
- dagster-webserver<=1.6.13
- dagster-webserver>1.7.0
- and dagster-webserver==1.6.11 depends on your project, we can conclude that all of:
- dagster-webserver>=1.6.11,<1.6.12
- dagster-webserver>1.6.13,<1.7.0
- depend on your project.
- And because dagster-webserver==1.6.12 depends on your project, we can conclude that all of:
- dagster-webserver>=1.6.11,<1.6.13
- dagster-webserver>1.6.13,<1.7.0
- depend on your project.
- And because dagster-webserver==1.6.13 depends on your project and your project depends on dagster-webserver>=1.6.11,<1.7.0, we can conclude that your project's requirements are unsatisfiable.
+ dagster-webserver<=1.6.11
+ dagster-webserver==1.6.12
+ dagster-webserver==1.6.13
+ and dagster-webserver==1.6.11 depends on your project, we can conclude that dagster-webserver>=1.6.11,<1.6.12 depends on your project.
+ And because dagster-webserver==1.6.12 depends on your project, we can conclude that dagster-webserver>=1.6.11,<1.6.13 depends on your project.
+ And because dagster-webserver==1.6.13 depends on your project and your project depends on dagster-webserver>=1.6.11, we can conclude that your project's requirements are unsatisfiable.
hint: The package `dagster-webserver` depends on the package `dagster` but the name is shadowed by your project. Consider changing the name of the project.
help: If you want to add the package regardless of the failed resolution, provide the `--frozen` flag to skip locking and syncing.
- "###);
+ ");
Ok(())
}
@@ -8073,7 +8068,7 @@ fn add_warn_index_url() -> Result<()> {
----- stderr -----
warning: Indexes specified via `--extra-index-url` will not be persisted to the `pyproject.toml` file; use `--index` instead.
× No solution found when resolving dependencies:
- ╰─▶ Because only idna<3.6 is available and your project depends on idna>=3.6, we can conclude that your project's requirements are unsatisfiable.
+ ╰─▶ Because only idna==2.7 is available and your project depends on idna>=3.6, we can conclude that your project's requirements are unsatisfiable.
hint: `idna` was found on https://test.pypi.org/simple, but not at the requested version (idna>=3.6). A compatible version may be available on a subsequent index (e.g., https://pypi.org/simple). By default, uv will only consider versions that are published on the first index that contains a given package, to avoid dependency confusion attacks. If all indexes are equally trusted, use `--index-strategy unsafe-best-match` to consider all versions from all indexes, regardless of the order in which they were defined.
help: If you want to add the package regardless of the failed resolution, provide the `--frozen` flag to skip locking and syncing.
diff --git a/crates/uv/tests/it/lock.rs b/crates/uv/tests/it/lock.rs
index a1fa1721e..4387d348a 100644
--- a/crates/uv/tests/it/lock.rs
+++ b/crates/uv/tests/it/lock.rs
@@ -3673,20 +3673,19 @@ fn lock_requires_python() -> Result<()> {
----- stderr -----
× No solution found when resolving dependencies for split (python_full_version >= '3.7' and python_full_version < '3.7.9'):
╰─▶ Because the requested Python version (>=3.7) does not satisfy Python>=3.7.9 and pygls>=1.1.0,<=1.2.1 depends on Python>=3.7.9,<4, we can conclude that pygls>=1.1.0,<=1.2.1 cannot be used.
- And because only pygls<=1.3.0 is available, we can conclude that all of:
- pygls>=1.1.0,<1.3.0
- pygls>1.3.0
- cannot be used. (1)
+ And because only the following versions of pygls are available:
+ pygls<=1.1.0
+ pygls==1.1.1
+ pygls==1.1.2
+ pygls==1.2.0
+ pygls==1.2.1
+ pygls==1.3.0
+ we can conclude that pygls>=1.1.0,<1.3.0 cannot be used. (1)
Because the requested Python version (>=3.7) does not satisfy Python>=3.8 and pygls==1.3.0 depends on Python>=3.8, we can conclude that pygls==1.3.0 cannot be used.
- And because we know from (1) that all of:
- pygls>=1.1.0,<1.3.0
- pygls>1.3.0
- cannot be used, we can conclude that pygls>=1.1.0 cannot be used.
+ And because we know from (1) that pygls>=1.1.0,<1.3.0 cannot be used, we can conclude that pygls>=1.1.0 cannot be used.
And because your project depends on pygls>=1.1.0, we can conclude that your project's requirements are unsatisfiable.
- hint: Pre-releases are available for `pygls` in the requested range (e.g., 2.0.0a4), but pre-releases weren't enabled (try: `--prerelease=allow`)
-
hint: The `requires-python` value (>=3.7) includes Python versions that are not supported by your dependencies (e.g., pygls>=1.1.0,<=1.2.1 only supports >=3.7.9, <4). Consider using a more restrictive `requires-python` value (like >=3.7.9, <4).
hint: While the active Python version is 3.12, the resolution failed for other Python versions supported by your project. Consider limiting your project's supported Python versions using `requires-python`.
@@ -11734,15 +11733,15 @@ fn unconditional_overlapping_marker_disjoint_version_constraints() -> Result<()>
"#,
)?;
- uv_snapshot!(context.filters(), context.lock(), @r###"
+ uv_snapshot!(context.filters(), context.lock(), @r"
success: false
exit_code: 1
----- stdout -----
----- stderr -----
× No solution found when resolving dependencies:
- ╰─▶ Because only datasets<2.19 is available and your project depends on datasets>=2.19, we can conclude that your project's requirements are unsatisfiable.
- "###);
+ ╰─▶ Because only datasets<=2.18.0 is available and your project depends on datasets>=2.19, we can conclude that your project's requirements are unsatisfiable.
+ ");
Ok(())
}
@@ -27422,11 +27421,41 @@ fn lock_conflict_for_disjoint_python_version() -> Result<()> {
----- stderr -----
× No solution found when resolving dependencies for split (python_full_version >= '3.11'):
- ╰─▶ Because only numpy{python_full_version >= '3.10'}<=1.26.4 is available and pandas==1.5.3 depends on numpy{python_full_version >= '3.10'}>=1.21.0, we can conclude that pandas==1.5.3 depends on numpy>=1.21.0,<=1.26.4.
+ ╰─▶ Because only the following versions of numpy{python_full_version >= '3.10'} are available:
+ numpy{python_full_version >= '3.10'}<=1.21.0
+ numpy{python_full_version >= '3.10'}==1.21.1
+ numpy{python_full_version >= '3.10'}==1.21.2
+ numpy{python_full_version >= '3.10'}==1.21.3
+ numpy{python_full_version >= '3.10'}==1.21.4
+ numpy{python_full_version >= '3.10'}==1.21.5
+ numpy{python_full_version >= '3.10'}==1.21.6
+ numpy{python_full_version >= '3.10'}==1.22.0
+ numpy{python_full_version >= '3.10'}==1.22.1
+ numpy{python_full_version >= '3.10'}==1.22.2
+ numpy{python_full_version >= '3.10'}==1.22.3
+ numpy{python_full_version >= '3.10'}==1.22.4
+ numpy{python_full_version >= '3.10'}==1.23.0
+ numpy{python_full_version >= '3.10'}==1.23.1
+ numpy{python_full_version >= '3.10'}==1.23.2
+ numpy{python_full_version >= '3.10'}==1.23.3
+ numpy{python_full_version >= '3.10'}==1.23.4
+ numpy{python_full_version >= '3.10'}==1.23.5
+ numpy{python_full_version >= '3.10'}==1.24.0
+ numpy{python_full_version >= '3.10'}==1.24.1
+ numpy{python_full_version >= '3.10'}==1.24.2
+ numpy{python_full_version >= '3.10'}==1.24.3
+ numpy{python_full_version >= '3.10'}==1.24.4
+ numpy{python_full_version >= '3.10'}==1.25.0
+ numpy{python_full_version >= '3.10'}==1.25.1
+ numpy{python_full_version >= '3.10'}==1.25.2
+ numpy{python_full_version >= '3.10'}==1.26.0
+ numpy{python_full_version >= '3.10'}==1.26.1
+ numpy{python_full_version >= '3.10'}==1.26.2
+ numpy{python_full_version >= '3.10'}==1.26.3
+ numpy{python_full_version >= '3.10'}==1.26.4
+ and pandas==1.5.3 depends on numpy{python_full_version >= '3.10'}>=1.21.0, we can conclude that pandas==1.5.3 depends on numpy>=1.21.0.
And because your project depends on numpy==1.20.3 and pandas==1.5.3, we can conclude that your project's requirements are unsatisfiable.
- hint: Pre-releases are available for `numpy` in the requested range (e.g., 2.3.0rc1), but pre-releases weren't enabled (try: `--prerelease=allow`)
-
hint: While the active Python version is 3.9, the resolution failed for other Python versions supported by your project. Consider limiting your project's supported Python versions using `requires-python`.
");
diff --git a/crates/uv/tests/it/pip_compile.rs b/crates/uv/tests/it/pip_compile.rs
index 17f336dc6..efb51e47d 100644
--- a/crates/uv/tests/it/pip_compile.rs
+++ b/crates/uv/tests/it/pip_compile.rs
@@ -14048,16 +14048,16 @@ fn compile_enumerate_no_versions() -> Result<()> {
uv_snapshot!(context.filters(), context.pip_compile()
.arg("requirements.in"),
- @r###"
+ @r"
success: false
exit_code: 1
----- stdout -----
----- stderr -----
× No solution found when resolving dependencies:
- ╰─▶ Because the current Python version (3.10.[X]) does not satisfy Python>=3.11,<4.0 and rooster-blue<=0.0.8 depends on Python>=3.11,<4.0, we can conclude that rooster-blue<=0.0.8 cannot be used.
+ ╰─▶ Because the current Python version (3.10.[X]) does not satisfy Python>=3.11,<4.0 and all versions of rooster-blue depend on Python>=3.11,<4.0, we can conclude that all versions of rooster-blue cannot be used.
And because you require rooster-blue, we can conclude that your requirements are unsatisfiable.
- "###);
+ ");
Ok(())
}
@@ -14818,20 +14818,37 @@ fn invalid_platform() -> Result<()> {
.pip_compile()
.arg("--python-platform")
.arg("linux")
- .arg("requirements.in"), @r###"
+ .arg("requirements.in"), @r"
success: false
exit_code: 1
----- stdout -----
----- stderr -----
× No solution found when resolving dependencies:
- ╰─▶ Because only open3d<=0.18.0 is available and open3d<=0.15.2 has no wheels with a matching Python ABI tag (e.g., `cp310`), we can conclude that open3d<=0.15.2 cannot be used.
- And because open3d>=0.16.0,<=0.18.0 has no wheels with a matching platform tag (e.g., `manylinux_2_17_x86_64`) and you require open3d, we can conclude that your requirements are unsatisfiable.
+ ╰─▶ Because only the following versions of open3d are available:
+ open3d==0.8.0.0
+ open3d==0.9.0.0
+ open3d==0.10.0.0
+ open3d==0.10.0.1
+ open3d==0.11.0
+ open3d==0.11.1
+ open3d==0.11.2
+ open3d==0.12.0
+ open3d==0.13.0
+ open3d==0.14.1
+ open3d==0.15.1
+ open3d==0.15.2
+ open3d==0.16.0
+ open3d==0.16.1
+ open3d==0.17.0
+ open3d==0.18.0
+ and open3d<=0.15.2 has no wheels with a matching Python ABI tag (e.g., `cp310`), we can conclude that open3d<=0.15.2 cannot be used.
+ And because open3d>=0.16.0 has no wheels with a matching platform tag (e.g., `manylinux_2_17_x86_64`) and you require open3d, we can conclude that your requirements are unsatisfiable.
hint: You require CPython 3.10 (`cp310`), but we only found wheels for `open3d` (v0.15.2) with the following Python ABI tags: `cp36m`, `cp37m`, `cp38`, `cp39`
hint: Wheels are available for `open3d` (v0.18.0) on the following platforms: `manylinux_2_27_aarch64`, `manylinux_2_27_x86_64`, `macosx_11_0_x86_64`, `macosx_13_0_arm64`, `win_amd64`
- "###);
+ ");
Ok(())
}
diff --git a/crates/uv/tests/it/pip_install.rs b/crates/uv/tests/it/pip_install.rs
index d1f41d882..872db659f 100644
--- a/crates/uv/tests/it/pip_install.rs
+++ b/crates/uv/tests/it/pip_install.rs
@@ -2849,7 +2849,7 @@ fn no_prerelease_hint_source_builds() -> Result<()> {
build-backend = "setuptools.build_meta"
"#})?;
- uv_snapshot!(context.filters(), context.pip_install().arg("."), @r###"
+ uv_snapshot!(context.filters(), context.pip_install().arg("."), @r"
success: false
exit_code: 1
----- stdout -----
@@ -2859,8 +2859,8 @@ fn no_prerelease_hint_source_builds() -> Result<()> {
× Failed to build `project @ file://[TEMP_DIR]/`
├─▶ Failed to resolve requirements from `setup.py` build
├─▶ No solution found when resolving: `setuptools>=40.8.0`
- ╰─▶ Because only setuptools<40.8.0 is available and you require setuptools>=40.8.0, we can conclude that your requirements are unsatisfiable.
- "###
+ ╰─▶ Because only setuptools<=40.4.3 is available and you require setuptools>=40.8.0, we can conclude that your requirements are unsatisfiable.
+ "
);
Ok(())
From 5b0133c0ecedf71a23e5d9bf6fbefc91008e5101 Mon Sep 17 00:00:00 2001
From: konsti
Date: Fri, 6 Jun 2025 21:15:52 +0200
Subject: [PATCH 028/250] Hint at `tool.uv.required-environments` (#13575)
For the case where there was no matching wheel on sync, we previously
added a note about which wheels are available vs. on which platform you
are on. We extend this error message to link directly towards
`tool.uv.required-environments`, which otherwise has a discovery
problem.
On Linux (Setting `tool.uv.required-environments` doesn't help here
either, but it's a clear example):
```
[project]
name = "debug"
version = "0.1.0"
requires-python = "==3.10.*"
dependencies = ["tensorflow-macos>=2.13.1"]
```
```
Resolved 41 packages in 24ms
error: Distribution `tensorflow-macos==2.16.2 @ registry+https://pypi.org/simple` can't be installed because it doesn't have a source distribution or wheel for the current platform
hint: You're on Linux (`manylinux_2_39_x86_64`), but there are no wheels for the current platform, consider configuring `tool.uv.required-environments`.
hint: `tensorflow-macos` (v2.16.2) only has wheels for the following platform: `macosx_12_0_arm64`.
```

---------
Co-authored-by: Zanie Blue
---
crates/uv-resolver/src/lock/mod.rs | 41 +++++------
crates/uv/tests/it/sync.rs | 68 ++++++++++++++++++
...heel_tag_test-0.1.0-py3-none-win_amd64.whl | Bin 0 -> 1367 bytes
3 files changed, 84 insertions(+), 25 deletions(-)
create mode 100644 scripts/links/wheel_tag_test-0.1.0-py3-none-win_amd64.whl
diff --git a/crates/uv-resolver/src/lock/mod.rs b/crates/uv-resolver/src/lock/mod.rs
index fc79af00c..faacae736 100644
--- a/crates/uv-resolver/src/lock/mod.rs
+++ b/crates/uv-resolver/src/lock/mod.rs
@@ -5084,32 +5084,23 @@ impl std::fmt::Display for WheelTagHint {
} else {
format!("`{}`", best.cyan())
};
- if let Some(version) = version {
- write!(
- f,
- "{}{} You're on {}, but `{}` ({}) only has wheels for the following platform{s}: {}",
- "hint".bold().cyan(),
- ":".bold(),
- best,
- package.cyan(),
- format!("v{version}").cyan(),
- tags.iter()
- .map(|tag| format!("`{}`", tag.cyan()))
- .join(", "),
- )
+ let package_ref = if let Some(version) = version {
+ format!("`{}` ({})", package.cyan(), format!("v{version}").cyan())
} else {
- write!(
- f,
- "{}{} You're on {}, but `{}` only has wheels for the following platform{s}: {}",
- "hint".bold().cyan(),
- ":".bold(),
- best,
- package.cyan(),
- tags.iter()
- .map(|tag| format!("`{}`", tag.cyan()))
- .join(", "),
- )
- }
+ format!("`{}`", package.cyan())
+ };
+ writeln!(
+ f,
+ "{}{} You're on {}, but {} only has wheels for the following platform{s}: {}; consider adding your platform to `{}` to ensure uv resolves to a version with compatible wheels",
+ "hint".bold().cyan(),
+ ":".bold(),
+ best,
+ package_ref,
+ tags.iter()
+ .map(|tag| format!("`{}`", tag.cyan()))
+ .join(", "),
+ "tool.uv.required-environments".green()
+ )
} else {
if let Some(version) = version {
write!(
diff --git a/crates/uv/tests/it/sync.rs b/crates/uv/tests/it/sync.rs
index 1cd6a1b88..c2026d51c 100644
--- a/crates/uv/tests/it/sync.rs
+++ b/crates/uv/tests/it/sync.rs
@@ -9608,3 +9608,71 @@ fn direct_url_dependency_metadata() -> Result<()> {
Ok(())
}
+
+#[cfg(unix)]
+#[test]
+fn sync_required_environment_hint() -> Result<()> {
+ let context = TestContext::new("3.13");
+
+ let pyproject_toml = context.temp_dir.child("pyproject.toml");
+ pyproject_toml.write_str(
+ r#"
+ [project]
+ name = "example"
+ version = "0.1.0"
+ requires-python = ">=3.13.2"
+ dependencies = ["wheel_tag_test"]
+ "#,
+ )?;
+
+ // Populate the `--find-links` entries.
+ fs_err::create_dir_all(context.temp_dir.join("links"))?;
+
+ for entry in fs_err::read_dir(context.workspace_root.join("scripts/links"))? {
+ let entry = entry?;
+ let path = entry.path();
+ if path
+ .file_name()
+ .and_then(|file_name| file_name.to_str())
+ .is_some_and(|file_name| file_name.starts_with("wheel_tag_test-"))
+ {
+ let dest = context
+ .temp_dir
+ .join("links")
+ .join(path.file_name().unwrap());
+ fs_err::copy(&path, &dest)?;
+ }
+ }
+
+ uv_snapshot!(context.filters(), context.lock()
+ .arg("--no-index")
+ .arg("--find-links")
+ .arg(context.temp_dir.join("links")), @r"
+ success: true
+ exit_code: 0
+ ----- stdout -----
+
+ ----- stderr -----
+ Resolved 2 packages in [TIME]
+ ");
+
+ let mut filters = context.filters();
+ filters.push((r"(macOS|Linux) \(`.*`\)", "[PLATFORM] (`[TAG]`)"));
+
+ uv_snapshot!(filters, context.sync()
+ .arg("--no-index")
+ .arg("--find-links")
+ .arg(context.temp_dir.join("links")), @r"
+ success: false
+ exit_code: 2
+ ----- stdout -----
+
+ ----- stderr -----
+ Resolved 2 packages in [TIME]
+ error: Distribution `wheel-tag-test==0.1.0 @ registry+links` can't be installed because it doesn't have a source distribution or wheel for the current platform
+
+ hint: You're on [PLATFORM] (`[TAG]`), but `wheel-tag-test` (v0.1.0) only has wheels for the following platform: `win_amd64`; consider adding your platform to `tool.uv.required-environments` to ensure uv resolves to a version with compatible wheels
+ ");
+
+ Ok(())
+}
diff --git a/scripts/links/wheel_tag_test-0.1.0-py3-none-win_amd64.whl b/scripts/links/wheel_tag_test-0.1.0-py3-none-win_amd64.whl
new file mode 100644
index 0000000000000000000000000000000000000000..7a53b603bb9b998ba4305541f0bdf07d3d7713a0
GIT binary patch
literal 1367
zcmWIWW@Zs#U|`??VyA#5MrLnqfGiM}0^;(F)YP2#lEn1*lGNf7{rLFIyv&mLc)fy3
zZ%^Og6TWB8T)q%;VQcV*)91anJ_=%JYFcz=j}WhF|CKp&YFf7}`V-UosprZSnY)vY
zl-!+k<&lu9s;?eH0E(TyTcj1cfp#qcVs#8Vbq(|k^$heAWogTS%xznW`<_JzSw6A**{&nR>k+V9$=OG$
z@o&bK~_7>lMO)
z{s;$R6~g`r_i%Of;Xd!-d-fu)x31Q?Gv_x48C)@bP~?BsTh~kHr2eL$6COIA=T4kF
zFiuFn=O1k~do!35h-m_QVPw$kDhGySWEwH0?
zJ$H`&ZT!S2
z?Ie-z&~d@$DSCPQVzG>nox9H#=1!^3&J*6h)%xn>
z%PL>3coReGjvjZvY@=Joe(XYvUyN+N5Z}hxr+dUU>wewZ9BjUMe(e|Eiqd71`?uWH
z-u2{y|B_sZ_I3tk9r13nM*nT+rJi_OcgTy$WtH80w<}xdY0Me^HEXs=?-f4p()H<;
z(2Qf277AN_u?BcEGKnzb&ZEGv1cN1wAPRSmMK=dM-$6_P=0nC340CYiLUcpX6FL~;M9{gABpTq&$_CQL3WW24E?UG4
G;sF3MYSE+s
literal 0
HcmV?d00001
From dc3fd464728fe0456c26e79beb56017d8d56a08d Mon Sep 17 00:00:00 2001
From: Zanie Blue
Date: Fri, 6 Jun 2025 14:42:06 -0500
Subject: [PATCH 029/250] Bump version to 0.7.12 (#13892)
---
CHANGELOG.md | 73 ++++++++++++++++++---------
Cargo.lock | 6 +--
crates/uv-build/Cargo.toml | 2 +-
crates/uv-build/pyproject.toml | 2 +-
crates/uv-version/Cargo.toml | 2 +-
crates/uv/Cargo.toml | 2 +-
docs/concepts/build-backend.md | 2 +-
docs/getting-started/installation.md | 4 +-
docs/guides/integration/aws-lambda.md | 4 +-
docs/guides/integration/docker.md | 10 ++--
docs/guides/integration/github.md | 2 +-
docs/guides/integration/pre-commit.md | 10 ++--
pyproject.toml | 2 +-
13 files changed, 74 insertions(+), 47 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 34dd45596..f18b3e898 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -3,6 +3,33 @@
+## 0.7.12
+
+### Enhancements
+
+- Add `uv python pin --rm` to remove `.python-version` pins ([#13860](https://github.com/astral-sh/uv/pull/13860))
+- Don't hint at versions removed by `excluded-newer` ([#13884](https://github.com/astral-sh/uv/pull/13884))
+- Add hint to use `tool.uv.environments` on resolution error ([#13455](https://github.com/astral-sh/uv/pull/13455))
+- Add hint to use `tool.uv.required-environments` on resolution error ([#13575](https://github.com/astral-sh/uv/pull/13575))
+
+- Improve `python pin` error messages ([#13862](https://github.com/astral-sh/uv/pull/13862))
+
+### Bug fixes
+
+- Lock environments during `uv sync`, `uv add` and `uv remove` to prevent race conditions ([#13869](https://github.com/astral-sh/uv/pull/13869))
+- Add `--no-editable` to `uv export` for `pylock.toml` ([#13852](https://github.com/astral-sh/uv/pull/13852))
+
+### Documentation
+
+- List `.gitignore` in project init files ([#13855](https://github.com/astral-sh/uv/pull/13855))
+- Move the pip interface documentation into the concepts section ([#13841](https://github.com/astral-sh/uv/pull/13841))
+- Remove the configuration section in favor of concepts / reference ([#13842](https://github.com/astral-sh/uv/pull/13842))
+- Update Git and GitHub Actions docs to mention `gh auth login` ([#13850](https://github.com/astral-sh/uv/pull/13850))
+
+### Preview
+
+- Fix directory glob traversal fallback preventing exclusion of all files ([#13882](https://github.com/astral-sh/uv/pull/13882))
+
## 0.7.11
### Python
@@ -284,11 +311,11 @@ This release contains various changes that improve correctness and user experien
### Breaking changes
- **Update `uv version` to display and update project versions ([#12349](https://github.com/astral-sh/uv/pull/12349))**
-
+
Previously, `uv version` displayed uv's version. Now, `uv version` will display or update the project's version. This interface was [heavily requested](https://github.com/astral-sh/uv/issues/6298) and, after much consideration, we decided that transitioning the top-level command was the best option.
-
+
Here's a brief example:
-
+
```console
$ uv init example
Initialized project `example` at `./example`
@@ -300,72 +327,72 @@ This release contains various changes that improve correctness and user experien
$ uv version --short
1.0.0
```
-
+
If used outside of a project, uv will fallback to showing its own version still:
-
+
```console
$ uv version
warning: failed to read project: No `pyproject.toml` found in current directory or any parent directory
running `uv self version` for compatibility with old `uv version` command.
this fallback will be removed soon, pass `--preview` to make this an error.
-
+
uv 0.7.0 (4433f41c9 2025-04-29)
```
-
+
As described in the warning, `--preview` can be used to error instead:
-
+
```console
$ uv version --preview
error: No `pyproject.toml` found in current directory or any parent directory
```
-
+
The previous functionality of `uv version` was moved to `uv self version`.
- **Avoid fallback to subsequent indexes on authentication failure ([#12805](https://github.com/astral-sh/uv/pull/12805))**
-
+
When using the `first-index` strategy (the default), uv will stop searching indexes for a package once it is found on a single index. Previously, uv considered a package as "missing" from an index during authentication failures, such as an HTTP 401 or HTTP 403 (normally, missing packages are represented by an HTTP 404). This behavior was motivated by unusual responses from some package indexes, but reduces the safety of uv's index strategy when authentication fails. Now, uv will consider an authentication failure as a stop-point when searching for a package across indexes. The `index.ignore-error-codes` option can be used to recover the existing behavior, e.g.:
-
+
```toml
[[tool.uv.index]]
name = "pytorch"
url = "https://download.pytorch.org/whl/cpu"
ignore-error-codes = [401, 403]
```
-
+
Since PyTorch's indexes always return a HTTP 403 for missing packages, uv special-cases indexes on the `pytorch.org` domain to ignore that error code by default.
- **Require the command in `uvx ` to be available in the Python environment ([#11603](https://github.com/astral-sh/uv/pull/11603))**
-
+
Previously, `uvx` would attempt to execute a command even if it was not provided by a Python package. For example, if we presume `foo` is an empty Python package which provides no command, `uvx foo` would invoke the `foo` command on the `PATH` (if present). Now, uv will error early if the `foo` executable is not provided by the requested Python package. This check is not enforced when `--from` is used, so patterns like `uvx --from foo bash -c "..."` are still valid. uv also still allows `uvx foo` where the `foo` executable is provided by a dependency of `foo` instead of `foo` itself, as this is fairly common for packages which depend on a dedicated package for their command-line interface.
- **Use index URL instead of package URL for keyring credential lookups ([#12651](https://github.com/astral-sh/uv/pull/12651))**
-
+
When determining credentials for querying a package URL, uv previously sent the full URL to the `keyring` command. However, some keyring plugins expect to receive the *index URL* (which is usually a parent of the package URL). Now, uv requests credentials for the index URL instead. This behavior matches `pip`.
- **Remove `--version` from subcommands ([#13108](https://github.com/astral-sh/uv/pull/13108))**
-
+
Previously, uv allowed the `--version` flag on arbitrary subcommands, e.g., `uv run --version`. However, the `--version` flag is useful for other operations since uv is a package manager. Consequently, we've removed the `--version` flag from subcommands — it is only available as `uv --version`.
- **Omit Python 3.7 downloads from managed versions ([#13022](https://github.com/astral-sh/uv/pull/13022))**
-
+
Python 3.7 is EOL and not formally supported by uv; however, Python 3.7 was previously available for download on a subset of platforms.
- **Reject non-PEP 751 TOML files in install, compile, and export commands ([#13120](https://github.com/astral-sh/uv/pull/13120), [#13119](https://github.com/astral-sh/uv/pull/13119))**
-
+
Previously, uv treated arbitrary `.toml` files passed to commands (e.g., `uv pip install -r foo.toml` or `uv pip compile -o foo.toml`) as `requirements.txt`-formatted files. Now, uv will error instead. If using PEP 751 lockfiles, use the standardized format for custom names instead, e.g., `pylock.foo.toml`.
- **Ignore arbitrary Python requests in version files ([#12909](https://github.com/astral-sh/uv/pull/12909))**
-
+
uv allows arbitrary strings to be used for Python version requests, in which they are treated as an executable name to search for in the `PATH`. However, using this form of request in `.python-version` files is non-standard and conflicts with `pyenv-virtualenv` which writes environment names to `.python-version` files. In this release, uv will now ignore requests that are arbitrary strings when found in `.python-version` files.
- **Error on unknown dependency object specifiers ([12811](https://github.com/astral-sh/uv/pull/12811))**
-
+
The `[dependency-groups]` entries can include "object specifiers", e.g. `set-phasers-to = ...` in:
-
+
```toml
[dependency-groups]
foo = ["pyparsing"]
bar = [{set-phasers-to = "stun"}]
```
-
+
However, the only current spec-compliant object specifier is `include-group`. Previously, uv would ignore unknown object specifiers. Now, uv will error.
- **Make `--frozen` and `--no-sources` conflicting options ([#12671](https://github.com/astral-sh/uv/pull/12671))**
-
+
Using `--no-sources` always requires a new resolution and `--frozen` will always fail when used with it. Now, this conflict is encoded in the CLI options for clarity.
- **Treat empty `UV_PYTHON_INSTALL_DIR` and `UV_TOOL_DIR` as unset ([#12907](https://github.com/astral-sh/uv/pull/12907), [#12905](https://github.com/astral-sh/uv/pull/12905))**
-
+
Previously, these variables were treated as set to the current working directory when set to an empty string. Now, uv will ignore these variables when empty. This matches uv's behavior for other environment variables which configure directories.
### Enhancements
diff --git a/Cargo.lock b/Cargo.lock
index cc16be083..1a35fda33 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -4617,7 +4617,7 @@ dependencies = [
[[package]]
name = "uv"
-version = "0.7.11"
+version = "0.7.12"
dependencies = [
"anstream",
"anyhow",
@@ -4781,7 +4781,7 @@ dependencies = [
[[package]]
name = "uv-build"
-version = "0.7.11"
+version = "0.7.12"
dependencies = [
"anyhow",
"uv-build-backend",
@@ -5961,7 +5961,7 @@ dependencies = [
[[package]]
name = "uv-version"
-version = "0.7.11"
+version = "0.7.12"
[[package]]
name = "uv-virtualenv"
diff --git a/crates/uv-build/Cargo.toml b/crates/uv-build/Cargo.toml
index 174b39369..2c07354e9 100644
--- a/crates/uv-build/Cargo.toml
+++ b/crates/uv-build/Cargo.toml
@@ -1,6 +1,6 @@
[package]
name = "uv-build"
-version = "0.7.11"
+version = "0.7.12"
edition.workspace = true
rust-version.workspace = true
homepage.workspace = true
diff --git a/crates/uv-build/pyproject.toml b/crates/uv-build/pyproject.toml
index 3cc810e94..18eb1779f 100644
--- a/crates/uv-build/pyproject.toml
+++ b/crates/uv-build/pyproject.toml
@@ -1,6 +1,6 @@
[project]
name = "uv-build"
-version = "0.7.11"
+version = "0.7.12"
description = "The uv build backend"
authors = [{ name = "Astral Software Inc.", email = "hey@astral.sh" }]
requires-python = ">=3.8"
diff --git a/crates/uv-version/Cargo.toml b/crates/uv-version/Cargo.toml
index 9aaccbbbe..aee0b75d4 100644
--- a/crates/uv-version/Cargo.toml
+++ b/crates/uv-version/Cargo.toml
@@ -1,6 +1,6 @@
[package]
name = "uv-version"
-version = "0.7.11"
+version = "0.7.12"
edition = { workspace = true }
rust-version = { workspace = true }
homepage = { workspace = true }
diff --git a/crates/uv/Cargo.toml b/crates/uv/Cargo.toml
index 80b9141dd..ab2620925 100644
--- a/crates/uv/Cargo.toml
+++ b/crates/uv/Cargo.toml
@@ -1,6 +1,6 @@
[package]
name = "uv"
-version = "0.7.11"
+version = "0.7.12"
edition = { workspace = true }
rust-version = { workspace = true }
homepage = { workspace = true }
diff --git a/docs/concepts/build-backend.md b/docs/concepts/build-backend.md
index c0631aafc..2494c8ade 100644
--- a/docs/concepts/build-backend.md
+++ b/docs/concepts/build-backend.md
@@ -19,7 +19,7 @@ existing project, add it to the `[build-system]` section in your `pyproject.toml
```toml
[build-system]
-requires = ["uv_build>=0.7.11,<0.8.0"]
+requires = ["uv_build>=0.7.12,<0.8.0"]
build-backend = "uv_build"
```
diff --git a/docs/getting-started/installation.md b/docs/getting-started/installation.md
index 6edcafa28..f01b8964a 100644
--- a/docs/getting-started/installation.md
+++ b/docs/getting-started/installation.md
@@ -25,7 +25,7 @@ uv provides a standalone installer to download and install uv:
Request a specific version by including it in the URL:
```console
- $ curl -LsSf https://astral.sh/uv/0.7.11/install.sh | sh
+ $ curl -LsSf https://astral.sh/uv/0.7.12/install.sh | sh
```
=== "Windows"
@@ -41,7 +41,7 @@ uv provides a standalone installer to download and install uv:
Request a specific version by including it in the URL:
```pwsh-session
- PS> powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/0.7.11/install.ps1 | iex"
+ PS> powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/0.7.12/install.ps1 | iex"
```
!!! tip
diff --git a/docs/guides/integration/aws-lambda.md b/docs/guides/integration/aws-lambda.md
index b7e784879..0f07e9ca2 100644
--- a/docs/guides/integration/aws-lambda.md
+++ b/docs/guides/integration/aws-lambda.md
@@ -92,7 +92,7 @@ the second stage, we'll copy this directory over to the final image, omitting th
other unnecessary files.
```dockerfile title="Dockerfile"
-FROM ghcr.io/astral-sh/uv:0.7.11 AS uv
+FROM ghcr.io/astral-sh/uv:0.7.12 AS uv
# First, bundle the dependencies into the task root.
FROM public.ecr.aws/lambda/python:3.13 AS builder
@@ -334,7 +334,7 @@ And confirm that opening http://127.0.0.1:8000/ in a web browser displays, "Hell
Finally, we'll update the Dockerfile to include the local library in the deployment package:
```dockerfile title="Dockerfile"
-FROM ghcr.io/astral-sh/uv:0.7.11 AS uv
+FROM ghcr.io/astral-sh/uv:0.7.12 AS uv
# First, bundle the dependencies into the task root.
FROM public.ecr.aws/lambda/python:3.13 AS builder
diff --git a/docs/guides/integration/docker.md b/docs/guides/integration/docker.md
index a0d26ff55..ba004b3a0 100644
--- a/docs/guides/integration/docker.md
+++ b/docs/guides/integration/docker.md
@@ -31,7 +31,7 @@ $ docker run --rm -it ghcr.io/astral-sh/uv:debian uv --help
The following distroless images are available:
- `ghcr.io/astral-sh/uv:latest`
-- `ghcr.io/astral-sh/uv:{major}.{minor}.{patch}`, e.g., `ghcr.io/astral-sh/uv:0.7.11`
+- `ghcr.io/astral-sh/uv:{major}.{minor}.{patch}`, e.g., `ghcr.io/astral-sh/uv:0.7.12`
- `ghcr.io/astral-sh/uv:{major}.{minor}`, e.g., `ghcr.io/astral-sh/uv:0.7` (the latest patch
version)
@@ -75,7 +75,7 @@ And the following derived images are available:
As with the distroless image, each derived image is published with uv version tags as
`ghcr.io/astral-sh/uv:{major}.{minor}.{patch}-{base}` and
-`ghcr.io/astral-sh/uv:{major}.{minor}-{base}`, e.g., `ghcr.io/astral-sh/uv:0.7.11-alpine`.
+`ghcr.io/astral-sh/uv:{major}.{minor}-{base}`, e.g., `ghcr.io/astral-sh/uv:0.7.12-alpine`.
For more details, see the [GitHub Container](https://github.com/astral-sh/uv/pkgs/container/uv)
page.
@@ -113,7 +113,7 @@ Note this requires `curl` to be available.
In either case, it is best practice to pin to a specific uv version, e.g., with:
```dockerfile
-COPY --from=ghcr.io/astral-sh/uv:0.7.11 /uv /uvx /bin/
+COPY --from=ghcr.io/astral-sh/uv:0.7.12 /uv /uvx /bin/
```
!!! tip
@@ -131,7 +131,7 @@ COPY --from=ghcr.io/astral-sh/uv:0.7.11 /uv /uvx /bin/
Or, with the installer:
```dockerfile
-ADD https://astral.sh/uv/0.7.11/install.sh /uv-installer.sh
+ADD https://astral.sh/uv/0.7.12/install.sh /uv-installer.sh
```
### Installing a project
@@ -557,5 +557,5 @@ Verified OK
!!! tip
These examples use `latest`, but best practice is to verify the attestation for a specific
- version tag, e.g., `ghcr.io/astral-sh/uv:0.7.11`, or (even better) the specific image digest,
+ version tag, e.g., `ghcr.io/astral-sh/uv:0.7.12`, or (even better) the specific image digest,
such as `ghcr.io/astral-sh/uv:0.5.27@sha256:5adf09a5a526f380237408032a9308000d14d5947eafa687ad6c6a2476787b4f`.
diff --git a/docs/guides/integration/github.md b/docs/guides/integration/github.md
index 9dce72252..630dca03c 100644
--- a/docs/guides/integration/github.md
+++ b/docs/guides/integration/github.md
@@ -47,7 +47,7 @@ jobs:
uses: astral-sh/setup-uv@v5
with:
# Install a specific version of uv.
- version: "0.7.11"
+ version: "0.7.12"
```
## Setting up Python
diff --git a/docs/guides/integration/pre-commit.md b/docs/guides/integration/pre-commit.md
index d56a64770..eeee62cc0 100644
--- a/docs/guides/integration/pre-commit.md
+++ b/docs/guides/integration/pre-commit.md
@@ -19,7 +19,7 @@ To make sure your `uv.lock` file is up to date even if your `pyproject.toml` fil
repos:
- repo: https://github.com/astral-sh/uv-pre-commit
# uv version.
- rev: 0.7.11
+ rev: 0.7.12
hooks:
- id: uv-lock
```
@@ -30,7 +30,7 @@ To keep a `requirements.txt` file in sync with your `uv.lock` file:
repos:
- repo: https://github.com/astral-sh/uv-pre-commit
# uv version.
- rev: 0.7.11
+ rev: 0.7.12
hooks:
- id: uv-export
```
@@ -41,7 +41,7 @@ To compile requirements files:
repos:
- repo: https://github.com/astral-sh/uv-pre-commit
# uv version.
- rev: 0.7.11
+ rev: 0.7.12
hooks:
# Compile requirements
- id: pip-compile
@@ -54,7 +54,7 @@ To compile alternative requirements files, modify `args` and `files`:
repos:
- repo: https://github.com/astral-sh/uv-pre-commit
# uv version.
- rev: 0.7.11
+ rev: 0.7.12
hooks:
# Compile requirements
- id: pip-compile
@@ -68,7 +68,7 @@ To run the hook over multiple files at the same time, add additional entries:
repos:
- repo: https://github.com/astral-sh/uv-pre-commit
# uv version.
- rev: 0.7.11
+ rev: 0.7.12
hooks:
# Compile requirements
- id: pip-compile
diff --git a/pyproject.toml b/pyproject.toml
index 745081d7a..ccc157959 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -4,7 +4,7 @@ build-backend = "maturin"
[project]
name = "uv"
-version = "0.7.11"
+version = "0.7.12"
description = "An extremely fast Python package and project manager, written in Rust."
authors = [{ name = "Astral Software Inc.", email = "hey@astral.sh" }]
requires-python = ">=3.8"
From 5dae9ac5f26d14cddf433d016d5470d913d42013 Mon Sep 17 00:00:00 2001
From: Karim Abou Zeid <7303830+kabouzeid@users.noreply.github.com>
Date: Mon, 9 Jun 2025 02:21:07 +0200
Subject: [PATCH 030/250] Update referenced CUDA version in `pytorch.md`
(#13899)
## Summary
torch 2.7 by default targets CUDA 12.6
---
docs/guides/integration/pytorch.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/docs/guides/integration/pytorch.md b/docs/guides/integration/pytorch.md
index ca3d3e653..79b6f31e1 100644
--- a/docs/guides/integration/pytorch.md
+++ b/docs/guides/integration/pytorch.md
@@ -37,7 +37,7 @@ To start, consider the following (default) configuration, which would be generat
`uv init --python 3.12` followed by `uv add torch torchvision`.
In this case, PyTorch would be installed from PyPI, which hosts CPU-only wheels for Windows and
-macOS, and GPU-accelerated wheels on Linux (targeting CUDA 12.4):
+macOS, and GPU-accelerated wheels on Linux (targeting CUDA 12.6):
```toml
[project]
From ea45acaf4fc504e36f4827875e0261a9aa3f93b7 Mon Sep 17 00:00:00 2001
From: Zanie Blue
Date: Mon, 9 Jun 2025 11:48:59 -0500
Subject: [PATCH 031/250] Fix extra newline in changelog (#13918)
---
CHANGELOG.md | 1 -
1 file changed, 1 deletion(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index f18b3e898..5e911d9b6 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -11,7 +11,6 @@
- Don't hint at versions removed by `excluded-newer` ([#13884](https://github.com/astral-sh/uv/pull/13884))
- Add hint to use `tool.uv.environments` on resolution error ([#13455](https://github.com/astral-sh/uv/pull/13455))
- Add hint to use `tool.uv.required-environments` on resolution error ([#13575](https://github.com/astral-sh/uv/pull/13575))
-
- Improve `python pin` error messages ([#13862](https://github.com/astral-sh/uv/pull/13862))
### Bug fixes
From 619a0eafa1fe58ccffd1433818d6960b9860b380 Mon Sep 17 00:00:00 2001
From: Zanie Blue
Date: Mon, 9 Jun 2025 11:57:27 -0500
Subject: [PATCH 032/250] Fix use of deprecated `black_box` function (#13926)
---
crates/uv-bench/benches/uv.rs | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/crates/uv-bench/benches/uv.rs b/crates/uv-bench/benches/uv.rs
index 36838b6de..95106a52b 100644
--- a/crates/uv-bench/benches/uv.rs
+++ b/crates/uv-bench/benches/uv.rs
@@ -1,6 +1,6 @@
use std::str::FromStr;
-use uv_bench::criterion::black_box;
+use std::hint::black_box;
use uv_bench::criterion::{Criterion, criterion_group, criterion_main, measurement::WallTime};
use uv_cache::Cache;
use uv_client::RegistryClientBuilder;
From 2a66349e96ca25d15a6875a54f929c32b7d5757f Mon Sep 17 00:00:00 2001
From: John Mumm
Date: Mon, 9 Jun 2025 13:28:39 -0400
Subject: [PATCH 033/250] Check if relative URL is valid directory before
treating as index (#13917)
As per #13874, passing a relative URL like `test` to `--index` for `uv
add` causes unexpected behavior if the directory does not exist. The
non-existent index is effectively ignored and uv falls back to PyPI. If
a package is found there, the spurious index is then written to
`pyproject.toml`. This doesn't happen for `--default-index` since
resolution will fail without fallback to PyPI.
This PR adds a validation step for indexes provided on the command line.
If a directory does not exist, uv will fail with an error.
Closes #13874
---
crates/uv-pep508/src/verbatim_url.rs | 6 +-
crates/uv/src/commands/project/add.rs | 17 ++++-
crates/uv/tests/it/edit.rs | 95 +++++++++++++++++++++++++++
3 files changed, 112 insertions(+), 6 deletions(-)
diff --git a/crates/uv-pep508/src/verbatim_url.rs b/crates/uv-pep508/src/verbatim_url.rs
index a7633bdcb..988bebc5e 100644
--- a/crates/uv-pep508/src/verbatim_url.rs
+++ b/crates/uv-pep508/src/verbatim_url.rs
@@ -106,10 +106,8 @@ impl VerbatimUrl {
let (path, fragment) = split_fragment(&path);
// Convert to a URL.
- let mut url = DisplaySafeUrl::from(
- Url::from_file_path(path.clone())
- .unwrap_or_else(|()| panic!("path is absolute: {}", path.display())),
- );
+ let mut url = DisplaySafeUrl::from_file_path(path.clone())
+ .unwrap_or_else(|()| panic!("path is absolute: {}", path.display()));
// Set the fragment, if it exists.
if let Some(fragment) = fragment {
diff --git a/crates/uv/src/commands/project/add.rs b/crates/uv/src/commands/project/add.rs
index 2c64d9dbb..a4091504d 100644
--- a/crates/uv/src/commands/project/add.rs
+++ b/crates/uv/src/commands/project/add.rs
@@ -23,8 +23,8 @@ use uv_configuration::{
use uv_dispatch::BuildDispatch;
use uv_distribution::DistributionDatabase;
use uv_distribution_types::{
- Index, IndexName, IndexUrls, NameRequirementSpecification, Requirement, RequirementSource,
- UnresolvedRequirement, VersionId,
+ Index, IndexName, IndexUrl, IndexUrls, NameRequirementSpecification, Requirement,
+ RequirementSource, UnresolvedRequirement, VersionId,
};
use uv_fs::{LockedFile, Simplified};
use uv_git::GIT_STORE;
@@ -473,6 +473,19 @@ pub(crate) async fn add(
&mut toml,
)?;
+ // Validate any indexes that were provided on the command-line to ensure
+ // they point to existing directories when using path URLs.
+ for index in &indexes {
+ if let IndexUrl::Path(url) = &index.url {
+ let path = url
+ .to_file_path()
+ .map_err(|()| anyhow::anyhow!("Invalid file path in index URL: {url}"))?;
+ if !path.is_dir() {
+ bail!("Directory not found for index: {url}");
+ }
+ }
+ }
+
// Add any indexes that were provided on the command-line, in priority order.
if !raw {
let urls = IndexUrls::from_indexes(indexes);
diff --git a/crates/uv/tests/it/edit.rs b/crates/uv/tests/it/edit.rs
index db47b27ef..5ba64fca2 100644
--- a/crates/uv/tests/it/edit.rs
+++ b/crates/uv/tests/it/edit.rs
@@ -9303,6 +9303,101 @@ fn add_index_without_trailing_slash() -> Result<()> {
Ok(())
}
+/// Add an index with an existing relative path.
+#[test]
+fn add_index_with_existing_relative_path_index() -> Result<()> {
+ let context = TestContext::new("3.12");
+
+ let pyproject_toml = context.temp_dir.child("pyproject.toml");
+ pyproject_toml.write_str(indoc! {r#"
+ [project]
+ name = "project"
+ version = "0.1.0"
+ requires-python = ">=3.12"
+ dependencies = []
+ "#})?;
+
+ // Create test-index/ subdirectory and copy our "offline" tqdm wheel there
+ let packages = context.temp_dir.child("test-index");
+ packages.create_dir_all()?;
+
+ let wheel_src = context
+ .workspace_root
+ .join("scripts/links/ok-1.0.0-py3-none-any.whl");
+ let wheel_dst = packages.child("ok-1.0.0-py3-none-any.whl");
+ fs_err::copy(&wheel_src, &wheel_dst)?;
+
+ uv_snapshot!(context.filters(), context.add().arg("iniconfig").arg("--index").arg("test-index"), @r"
+ success: true
+ exit_code: 0
+ ----- stdout -----
+
+ ----- stderr -----
+ Resolved 2 packages in [TIME]
+ Prepared 1 package in [TIME]
+ Installed 1 package in [TIME]
+ + iniconfig==2.0.0
+ ");
+
+ Ok(())
+}
+
+/// Add an index with a non-existent relative path.
+#[test]
+fn add_index_with_non_existent_relative_path() -> Result<()> {
+ let context = TestContext::new("3.12");
+
+ let pyproject_toml = context.temp_dir.child("pyproject.toml");
+ pyproject_toml.write_str(indoc! {r#"
+ [project]
+ name = "project"
+ version = "0.1.0"
+ requires-python = ">=3.12"
+ dependencies = []
+ "#})?;
+
+ uv_snapshot!(context.filters(), context.add().arg("iniconfig").arg("--index").arg("test-index"), @r"
+ success: false
+ exit_code: 2
+ ----- stdout -----
+
+ ----- stderr -----
+ error: Directory not found for index: file://[TEMP_DIR]/test-index
+ ");
+
+ Ok(())
+}
+
+/// Add an index with a non-existent relative path with the same name as a defined index.
+#[test]
+fn add_index_with_non_existent_relative_path_with_same_name_as_index() -> Result<()> {
+ let context = TestContext::new("3.12");
+
+ let pyproject_toml = context.temp_dir.child("pyproject.toml");
+ pyproject_toml.write_str(indoc! {r#"
+ [project]
+ name = "project"
+ version = "0.1.0"
+ requires-python = ">=3.12"
+ dependencies = []
+
+ [[tool.uv.index]]
+ name = "test-index"
+ url = "https://pypi-proxy.fly.dev/simple"
+ "#})?;
+
+ uv_snapshot!(context.filters(), context.add().arg("iniconfig").arg("--index").arg("test-index"), @r"
+ success: false
+ exit_code: 2
+ ----- stdout -----
+
+ ----- stderr -----
+ error: Directory not found for index: file://[TEMP_DIR]/test-index
+ ");
+
+ Ok(())
+}
+
/// Add a PyPI requirement.
#[test]
fn add_group_comment() -> Result<()> {
From 00b517dbd148386af80e1756f1f11a0a91d5f7f5 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Mon, 9 Jun 2025 14:28:09 -0400
Subject: [PATCH 034/250] Update Rust crate anstream to v0.6.19 (#13908)
---
Cargo.lock | 22 +++++++++++-----------
1 file changed, 11 insertions(+), 11 deletions(-)
diff --git a/Cargo.lock b/Cargo.lock
index 1a35fda33..a23c320e5 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -40,9 +40,9 @@ checksum = "4b46cbb362ab8752921c97e041f5e366ee6297bd428a31275b9fcf1e380f7299"
[[package]]
name = "anstream"
-version = "0.6.18"
+version = "0.6.19"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8acc5369981196006228e28809f761875c0327210a891e941f4c683b3a99529b"
+checksum = "301af1932e46185686725e0fad2f8f2aa7da69dd70bf6ecc44d6b703844a3933"
dependencies = [
"anstyle",
"anstyle-parse",
@@ -738,7 +738,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "117725a109d387c937a1533ce01b450cbde6b88abceea8473c4d7a85853cda3c"
dependencies = [
"lazy_static",
- "windows-sys 0.59.0",
+ "windows-sys 0.48.0",
]
[[package]]
@@ -1115,7 +1115,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "33d852cb9b869c2a9b3df2f71a3074817f01e1844f839a144f5fcef059a4eb5d"
dependencies = [
"libc",
- "windows-sys 0.59.0",
+ "windows-sys 0.52.0",
]
[[package]]
@@ -1941,7 +1941,7 @@ checksum = "e19b23d53f35ce9f56aebc7d1bb4e6ac1e9c0db7ac85c8d1760c04379edced37"
dependencies = [
"hermit-abi 0.4.0",
"libc",
- "windows-sys 0.59.0",
+ "windows-sys 0.52.0",
]
[[package]]
@@ -2001,7 +2001,7 @@ dependencies = [
"portable-atomic",
"portable-atomic-util",
"serde",
- "windows-sys 0.59.0",
+ "windows-sys 0.52.0",
]
[[package]]
@@ -2885,7 +2885,7 @@ dependencies = [
"once_cell",
"socket2",
"tracing",
- "windows-sys 0.59.0",
+ "windows-sys 0.52.0",
]
[[package]]
@@ -3334,7 +3334,7 @@ dependencies = [
"errno",
"libc",
"linux-raw-sys 0.4.15",
- "windows-sys 0.59.0",
+ "windows-sys 0.52.0",
]
[[package]]
@@ -3347,7 +3347,7 @@ dependencies = [
"errno",
"libc",
"linux-raw-sys 0.9.2",
- "windows-sys 0.59.0",
+ "windows-sys 0.52.0",
]
[[package]]
@@ -3928,7 +3928,7 @@ dependencies = [
"getrandom 0.3.1",
"once_cell",
"rustix 1.0.7",
- "windows-sys 0.59.0",
+ "windows-sys 0.52.0",
]
[[package]]
@@ -6282,7 +6282,7 @@ version = "0.1.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb"
dependencies = [
- "windows-sys 0.59.0",
+ "windows-sys 0.48.0",
]
[[package]]
From 64dacab913625deaf008e0c2a57f05611d00e3b7 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Mon, 9 Jun 2025 14:28:16 -0400
Subject: [PATCH 035/250] Update pre-commit dependencies (#13907)
---
.pre-commit-config.yaml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 7f5de7389..982d8f296 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -12,7 +12,7 @@ repos:
- id: validate-pyproject
- repo: https://github.com/crate-ci/typos
- rev: v1.32.0
+ rev: v1.33.1
hooks:
- id: typos
@@ -42,7 +42,7 @@ repos:
types_or: [yaml, json5]
- repo: https://github.com/astral-sh/ruff-pre-commit
- rev: v0.11.12
+ rev: v0.11.13
hooks:
- id: ruff-format
- id: ruff
From 1f2bba9b3dc5ea0c04169df1aef55e3a2c61c80d Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Mon, 9 Jun 2025 14:28:26 -0400
Subject: [PATCH 036/250] Update Rust crate flate2 to v1.1.2 (#13909)
---
Cargo.lock | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/Cargo.lock b/Cargo.lock
index a23c320e5..23608511d 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -1185,9 +1185,9 @@ checksum = "1d674e81391d1e1ab681a28d99df07927c6d4aa5b027d7da16ba32d1d21ecd99"
[[package]]
name = "flate2"
-version = "1.1.1"
+version = "1.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7ced92e76e966ca2fd84c8f7aa01a4aea65b0eb6648d72f7c8f3e2764a67fece"
+checksum = "4a3d7db9596fecd151c5f638c0ee5d5bd487b6e0ea232e5dc96d5250f6f94b1d"
dependencies = [
"crc32fast",
"libz-rs-sys",
@@ -2118,9 +2118,9 @@ dependencies = [
[[package]]
name = "libz-rs-sys"
-version = "0.5.0"
+version = "0.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6489ca9bd760fe9642d7644e827b0c9add07df89857b0416ee15c1cc1a3b8c5a"
+checksum = "172a788537a2221661b480fee8dc5f96c580eb34fa88764d3205dc356c7e4221"
dependencies = [
"zlib-rs",
]
@@ -6931,9 +6931,9 @@ dependencies = [
[[package]]
name = "zlib-rs"
-version = "0.5.0"
+version = "0.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "868b928d7949e09af2f6086dfc1e01936064cc7a819253bce650d4e2a2d63ba8"
+checksum = "626bd9fa9734751fc50d6060752170984d7053f5a39061f524cda68023d4db8a"
[[package]]
name = "zopfli"
From 2940122e69b4f866ee40b51182c04891b67b29e5 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Mon, 9 Jun 2025 14:28:39 -0400
Subject: [PATCH 037/250] Update Rust crate hashbrown to v0.15.4 (#13911)
---
Cargo.lock | 14 +++++++-------
1 file changed, 7 insertions(+), 7 deletions(-)
diff --git a/Cargo.lock b/Cargo.lock
index 23608511d..fa5db02f3 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -1523,9 +1523,9 @@ checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1"
[[package]]
name = "hashbrown"
-version = "0.15.3"
+version = "0.15.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "84b26c544d002229e640969970a2e74021aadf6e2f96372b9c58eff97de08eb3"
+checksum = "5971ac85611da7067dbfcabef3c70ebb5606018acd9e2a3903a0da507521e0d5"
dependencies = [
"allocator-api2",
"equivalent",
@@ -1877,7 +1877,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cea70ddb795996207ad57735b50c5982d8844f38ba9ee5f1aedcfb708a2aa11e"
dependencies = [
"equivalent",
- "hashbrown 0.15.3",
+ "hashbrown 0.15.4",
"serde",
]
@@ -2619,7 +2619,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7a98c6720655620a521dcc722d0ad66cd8afd5d86e34a89ef691c50b7b24de06"
dependencies = [
"fixedbitset",
- "hashbrown 0.15.3",
+ "hashbrown 0.15.4",
"indexmap",
"serde",
]
@@ -3229,7 +3229,7 @@ checksum = "1e147371c75553e1e2fcdb483944a8540b8438c31426279553b9a8182a9b7b65"
dependencies = [
"bytecheck",
"bytes",
- "hashbrown 0.15.3",
+ "hashbrown 0.15.4",
"indexmap",
"munge",
"ptr_meta",
@@ -5561,7 +5561,7 @@ name = "uv-pypi-types"
version = "0.0.1"
dependencies = [
"anyhow",
- "hashbrown 0.15.3",
+ "hashbrown 0.15.4",
"indexmap",
"insta",
"itertools 0.14.0",
@@ -5734,7 +5734,7 @@ dependencies = [
"dashmap",
"either",
"futures",
- "hashbrown 0.15.3",
+ "hashbrown 0.15.4",
"indexmap",
"insta",
"itertools 0.14.0",
From dd46985e2771d83b17bab905961f82578e3c735a Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Mon, 9 Jun 2025 14:28:51 -0400
Subject: [PATCH 038/250] Update Rust crate petgraph to v0.8.2 (#13913)
---
Cargo.lock | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/Cargo.lock b/Cargo.lock
index fa5db02f3..fbfc41414 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -2614,9 +2614,9 @@ dependencies = [
[[package]]
name = "petgraph"
-version = "0.8.1"
+version = "0.8.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7a98c6720655620a521dcc722d0ad66cd8afd5d86e34a89ef691c50b7b24de06"
+checksum = "54acf3a685220b533e437e264e4d932cfbdc4cc7ec0cd232ed73c08d03b8a7ca"
dependencies = [
"fixedbitset",
"hashbrown 0.15.4",
From e67dff85ccb95e56b8c99713983475ee663fb226 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Mon, 9 Jun 2025 14:29:12 -0400
Subject: [PATCH 039/250] Update Rust crate fs-err to v3.1.1 (#13910)
---
Cargo.lock | 66 +++++++++++++++++++++++++++---------------------------
1 file changed, 33 insertions(+), 33 deletions(-)
diff --git a/Cargo.lock b/Cargo.lock
index fbfc41414..ecb69cc3a 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -1262,9 +1262,9 @@ dependencies = [
[[package]]
name = "fs-err"
-version = "3.1.0"
+version = "3.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1f89bda4c2a21204059a977ed3bfe746677dfd137b83c339e702b0ac91d482aa"
+checksum = "88d7be93788013f265201256d58f04936a8079ad5dc898743aa20525f503b683"
dependencies = [
"autocfg",
"tokio",
@@ -4633,7 +4633,7 @@ dependencies = [
"etcetera",
"filetime",
"flate2",
- "fs-err 3.1.0",
+ "fs-err 3.1.1",
"futures",
"http",
"ignore",
@@ -4794,7 +4794,7 @@ version = "0.1.0"
dependencies = [
"csv",
"flate2",
- "fs-err 3.1.0",
+ "fs-err 3.1.1",
"globset",
"indoc",
"insta",
@@ -4830,7 +4830,7 @@ name = "uv-build-frontend"
version = "0.0.1"
dependencies = [
"anstream",
- "fs-err 3.1.0",
+ "fs-err 3.1.1",
"indoc",
"insta",
"itertools 0.14.0",
@@ -4864,7 +4864,7 @@ name = "uv-cache"
version = "0.0.1"
dependencies = [
"clap",
- "fs-err 3.1.0",
+ "fs-err 3.1.1",
"nanoid",
"rmp-serde",
"rustc-hash",
@@ -4888,7 +4888,7 @@ dependencies = [
name = "uv-cache-info"
version = "0.0.1"
dependencies = [
- "fs-err 3.1.0",
+ "fs-err 3.1.1",
"globwalk",
"schemars",
"serde",
@@ -4918,7 +4918,7 @@ dependencies = [
"anyhow",
"clap",
"clap_complete_command",
- "fs-err 3.1.0",
+ "fs-err 3.1.1",
"insta",
"serde",
"url",
@@ -4949,7 +4949,7 @@ dependencies = [
"async_http_range_reader",
"async_zip",
"bytecheck",
- "fs-err 3.1.0",
+ "fs-err 3.1.1",
"futures",
"html-escape",
"http",
@@ -5003,7 +5003,7 @@ dependencies = [
"anyhow",
"clap",
"either",
- "fs-err 3.1.0",
+ "fs-err 3.1.1",
"rayon",
"rustc-hash",
"same-file",
@@ -5041,7 +5041,7 @@ dependencies = [
"anstream",
"anyhow",
"clap",
- "fs-err 3.1.0",
+ "fs-err 3.1.1",
"itertools 0.14.0",
"markdown",
"owo-colors",
@@ -5085,7 +5085,7 @@ version = "0.0.1"
dependencies = [
"assert_fs",
"etcetera",
- "fs-err 3.1.0",
+ "fs-err 3.1.1",
"indoc",
"tracing",
"uv-static",
@@ -5128,7 +5128,7 @@ version = "0.0.1"
dependencies = [
"anyhow",
"either",
- "fs-err 3.1.0",
+ "fs-err 3.1.1",
"futures",
"indoc",
"insta",
@@ -5194,7 +5194,7 @@ version = "0.0.1"
dependencies = [
"arcstr",
"bitflags 2.9.1",
- "fs-err 3.1.0",
+ "fs-err 3.1.1",
"http",
"itertools 0.14.0",
"jiff",
@@ -5234,7 +5234,7 @@ dependencies = [
"async-compression",
"async_zip",
"blake2",
- "fs-err 3.1.0",
+ "fs-err 3.1.1",
"futures",
"md-5",
"rayon",
@@ -5260,7 +5260,7 @@ dependencies = [
"dunce",
"either",
"encoding_rs_io",
- "fs-err 3.1.0",
+ "fs-err 3.1.1",
"fs2",
"junction",
"path-slash",
@@ -5283,7 +5283,7 @@ dependencies = [
"anyhow",
"cargo-util",
"dashmap",
- "fs-err 3.1.0",
+ "fs-err 3.1.1",
"reqwest",
"reqwest-middleware",
"thiserror 2.0.12",
@@ -5316,7 +5316,7 @@ name = "uv-globfilter"
version = "0.1.0"
dependencies = [
"anstream",
- "fs-err 3.1.0",
+ "fs-err 3.1.1",
"globset",
"insta",
"owo-colors",
@@ -5338,7 +5338,7 @@ dependencies = [
"configparser",
"csv",
"data-encoding",
- "fs-err 3.1.0",
+ "fs-err 3.1.1",
"indoc",
"mailparse",
"pathdiff",
@@ -5372,7 +5372,7 @@ version = "0.0.1"
dependencies = [
"anyhow",
"async-channel",
- "fs-err 3.1.0",
+ "fs-err 3.1.1",
"futures",
"rayon",
"rustc-hash",
@@ -5419,7 +5419,7 @@ name = "uv-metadata"
version = "0.1.0"
dependencies = [
"async_zip",
- "fs-err 3.1.0",
+ "fs-err 3.1.1",
"futures",
"thiserror 2.0.12",
"tokio",
@@ -5525,7 +5525,7 @@ dependencies = [
"astral-tokio-tar",
"async-compression",
"base64 0.22.1",
- "fs-err 3.1.0",
+ "fs-err 3.1.1",
"futures",
"glob",
"insta",
@@ -5595,7 +5595,7 @@ dependencies = [
"assert_fs",
"clap",
"configparser",
- "fs-err 3.1.0",
+ "fs-err 3.1.1",
"futures",
"goblin",
"indoc",
@@ -5665,7 +5665,7 @@ dependencies = [
"anyhow",
"configparser",
"console",
- "fs-err 3.1.0",
+ "fs-err 3.1.1",
"futures",
"rustc-hash",
"serde",
@@ -5699,7 +5699,7 @@ version = "0.0.1"
dependencies = [
"anyhow",
"assert_fs",
- "fs-err 3.1.0",
+ "fs-err 3.1.1",
"indoc",
"insta",
"itertools 0.14.0",
@@ -5787,7 +5787,7 @@ dependencies = [
name = "uv-scripts"
version = "0.0.1"
dependencies = [
- "fs-err 3.1.0",
+ "fs-err 3.1.1",
"indoc",
"memchr",
"serde",
@@ -5807,7 +5807,7 @@ name = "uv-settings"
version = "0.0.1"
dependencies = [
"clap",
- "fs-err 3.1.0",
+ "fs-err 3.1.1",
"schemars",
"serde",
"textwrap",
@@ -5864,7 +5864,7 @@ dependencies = [
name = "uv-state"
version = "0.0.1"
dependencies = [
- "fs-err 3.1.0",
+ "fs-err 3.1.1",
"tempfile",
"uv-dirs",
]
@@ -5880,7 +5880,7 @@ dependencies = [
name = "uv-tool"
version = "0.0.1"
dependencies = [
- "fs-err 3.1.0",
+ "fs-err 3.1.1",
"pathdiff",
"self-replace",
"serde",
@@ -5910,7 +5910,7 @@ version = "0.1.0"
dependencies = [
"clap",
"either",
- "fs-err 3.1.0",
+ "fs-err 3.1.1",
"schemars",
"serde",
"thiserror 2.0.12",
@@ -5930,7 +5930,7 @@ dependencies = [
"anyhow",
"assert_cmd",
"assert_fs",
- "fs-err 3.1.0",
+ "fs-err 3.1.1",
"thiserror 2.0.12",
"uv-fs",
"which",
@@ -5967,7 +5967,7 @@ version = "0.7.12"
name = "uv-virtualenv"
version = "0.0.4"
dependencies = [
- "fs-err 3.1.0",
+ "fs-err 3.1.1",
"itertools 0.14.0",
"pathdiff",
"self-replace",
@@ -5996,7 +5996,7 @@ dependencies = [
"anyhow",
"assert_fs",
"clap",
- "fs-err 3.1.0",
+ "fs-err 3.1.1",
"glob",
"insta",
"itertools 0.14.0",
From f5382c010b24471a6dd6e1ed2fed7c521cf6b87f Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Mon, 9 Jun 2025 18:06:31 -0500
Subject: [PATCH 040/250] Update acj/freebsd-firecracker-action action to
v0.4.2 (#13906)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
This PR contains the following updates:
| Package | Type | Update | Change |
|---|---|---|---|
|
[acj/freebsd-firecracker-action](https://redirect.github.com/acj/freebsd-firecracker-action)
| action | patch | `v0.4.1` -> `v0.4.2` |
---
> [!WARNING]
> Some dependencies could not be looked up. Check the Dependency
Dashboard for more information.
---
### Release Notes
acj/freebsd-firecracker-action
(acj/freebsd-firecracker-action)
###
[`v0.4.2`](https://redirect.github.com/acj/freebsd-firecracker-action/releases/tag/v0.4.2)
[Compare
Source](https://redirect.github.com/acj/freebsd-firecracker-action/compare/v0.4.1...v0.4.2)
[Firecracker
1.12.0](https://redirect.github.com/firecracker-microvm/firecracker/releases/tag/v1.12.0)
[FreeBSD 14.3-RELEASE](https://www.freebsd.org/releases/14.3R/relnotes/)
---
### Configuration
📅 **Schedule**: Branch creation - "before 4am on Monday" (UTC),
Automerge - At any time (no schedule defined).
🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.
♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.
🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.
---
- [ ] If you want to rebase/retry this PR, check
this box
---
This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/astral-sh/uv).
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
---
.github/workflows/ci.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 7e3caec55..e29d8743c 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -712,7 +712,7 @@ jobs:
cross build --target x86_64-unknown-freebsd
- name: Test in Firecracker VM
- uses: acj/freebsd-firecracker-action@5b4c9938e8b5ff1041c58e21515909a0e1500d59 # v0.4.1
+ uses: acj/freebsd-firecracker-action@d548632daa4f81a142a054c9829408e659350eb0 # v0.4.2
with:
verbose: false
checkout: false
From dc455bfc26a1487a02815a645810e07c86522891 Mon Sep 17 00:00:00 2001
From: Jack O'Connor
Date: Mon, 9 Jun 2025 14:44:43 -0700
Subject: [PATCH 041/250] add UV_NO_GITHUB_FAST_PATH
---
crates/uv-git/src/resolver.rs | 5 +++++
crates/uv-static/src/env_vars.rs | 3 +++
docs/reference/environment.md | 4 ++++
3 files changed, 12 insertions(+)
diff --git a/crates/uv-git/src/resolver.rs b/crates/uv-git/src/resolver.rs
index 9335aed4d..fd90ff587 100644
--- a/crates/uv-git/src/resolver.rs
+++ b/crates/uv-git/src/resolver.rs
@@ -12,6 +12,7 @@ use tracing::debug;
use uv_cache_key::{RepositoryUrl, cache_digest};
use uv_fs::LockedFile;
use uv_git_types::{GitHubRepository, GitOid, GitReference, GitUrl};
+use uv_static::EnvVars;
use uv_version::version;
use crate::{Fetch, GitSource, Reporter};
@@ -54,6 +55,10 @@ impl GitResolver {
url: &GitUrl,
client: ClientWithMiddleware,
) -> Result, GitResolverError> {
+ if std::env::var_os(EnvVars::UV_NO_GITHUB_FAST_PATH).is_some() {
+ return Ok(None);
+ }
+
let reference = RepositoryReference::from(url);
// If the URL is already precise, return it.
diff --git a/crates/uv-static/src/env_vars.rs b/crates/uv-static/src/env_vars.rs
index 58191fe64..aff56df45 100644
--- a/crates/uv-static/src/env_vars.rs
+++ b/crates/uv-static/src/env_vars.rs
@@ -727,4 +727,7 @@ impl EnvVars {
/// Equivalent to the `--project` command-line argument.
pub const UV_PROJECT: &'static str = "UV_PROJECT";
+
+ /// Disable GitHub-specific requests that allow uv to skip `git fetch` in some circumstances.
+ pub const UV_NO_GITHUB_FAST_PATH: &'static str = "UV_NO_GITHUB_FAST_PATH";
}
diff --git a/docs/reference/environment.md b/docs/reference/environment.md
index f86f52bca..61889ddb3 100644
--- a/docs/reference/environment.md
+++ b/docs/reference/environment.md
@@ -235,6 +235,10 @@ non-editable
Ignore `.env` files when executing `uv run` commands.
+### `UV_NO_GITHUB_FAST_PATH`
+
+Disable GitHub-specific requests that allow uv to skip `git fetch` in some circumstances.
+
### `UV_NO_INSTALLER_METADATA`
Skip writing `uv` installer metadata files (e.g., `INSTALLER`, `REQUESTED`, and `direct_url.json`) to site-packages `.dist-info` directories.
From 9ff07c113f7e1e4176538ce574457133e2a6cd3a Mon Sep 17 00:00:00 2001
From: Jack O'Connor
Date: Thu, 5 Jun 2025 17:57:39 -0700
Subject: [PATCH 042/250] add a snapshot test for `uv pip install` with an
exact Git commit
---
crates/uv/tests/it/pip_install.rs | 49 +++++++++++++++++++++++++++++++
1 file changed, 49 insertions(+)
diff --git a/crates/uv/tests/it/pip_install.rs b/crates/uv/tests/it/pip_install.rs
index 872db659f..2ef8851fe 100644
--- a/crates/uv/tests/it/pip_install.rs
+++ b/crates/uv/tests/it/pip_install.rs
@@ -2111,6 +2111,55 @@ fn install_git_public_https_missing_commit() {
"###);
}
+#[test]
+#[cfg(feature = "git")]
+fn install_git_public_https_exact_commit() {
+ let context = TestContext::new(DEFAULT_PYTHON_VERSION);
+
+ // `uv pip install` a Git dependency with an exact commit.
+ uv_snapshot!(context.filters(), context.pip_install()
+ // Normally Updating/Updated notifications are suppressed in tests (because their order can
+ // be nondeterministic), but here that's exactly what we want to test for.
+ .env_remove(EnvVars::UV_TEST_NO_CLI_PROGRESS)
+ // Whether fetching happens during resolution or later depends on whether the GitHub fast
+ // path is taken, which isn't reliable. Disable it, so that we get a stable order of events
+ // here.
+ .env(EnvVars::UV_NO_GITHUB_FAST_PATH, "true")
+ .arg("uv-public-pypackage @ git+https://github.com/astral-test/uv-public-pypackage@b270df1a2fb5d012294e9aaf05e7e0bab1e6a389")
+ , @r"
+ success: true
+ exit_code: 0
+ ----- stdout -----
+
+ ----- stderr -----
+ Updating https://github.com/astral-test/uv-public-pypackage (b270df1a2fb5d012294e9aaf05e7e0bab1e6a389)
+ Updated https://github.com/astral-test/uv-public-pypackage (b270df1a2fb5d012294e9aaf05e7e0bab1e6a389)
+ Resolved 1 package in [TIME]
+ Building uv-public-pypackage @ git+https://github.com/astral-test/uv-public-pypackage@b270df1a2fb5d012294e9aaf05e7e0bab1e6a389
+ Built uv-public-pypackage @ git+https://github.com/astral-test/uv-public-pypackage@b270df1a2fb5d012294e9aaf05e7e0bab1e6a389
+ Prepared 1 package in [TIME]
+ Installed 1 package in [TIME]
+ + uv-public-pypackage==0.1.0 (from git+https://github.com/astral-test/uv-public-pypackage@b270df1a2fb5d012294e9aaf05e7e0bab1e6a389)
+ ");
+
+ // Run the exact same command again, with that commit now in cache.
+ uv_snapshot!(context.filters(), context.pip_install()
+ .env_remove(EnvVars::UV_TEST_NO_CLI_PROGRESS)
+ .env(EnvVars::UV_NO_GITHUB_FAST_PATH, "true")
+ .arg("uv-public-pypackage @ git+https://github.com/astral-test/uv-public-pypackage@b270df1a2fb5d012294e9aaf05e7e0bab1e6a389")
+ , @r"
+ success: true
+ exit_code: 0
+ ----- stdout -----
+
+ ----- stderr -----
+ Updating https://github.com/astral-test/uv-public-pypackage (b270df1a2fb5d012294e9aaf05e7e0bab1e6a389)
+ Updated https://github.com/astral-test/uv-public-pypackage (b270df1a2fb5d012294e9aaf05e7e0bab1e6a389)
+ Resolved 1 package in [TIME]
+ Audited 1 package in [TIME]
+ ");
+}
+
/// Install a package from a private GitHub repository using a PAT
#[test]
#[cfg(all(not(windows), feature = "git"))]
From 619132bd8ad3f160c86d2628a5595c4b11b7cfa2 Mon Sep 17 00:00:00 2001
From: Jack O'Connor
Date: Fri, 6 Jun 2025 14:28:33 -0700
Subject: [PATCH 043/250] make GitOid strict about parsing exactly 40 hex
characters
---
crates/uv-git-types/src/oid.rs | 44 ++++++++++++++++++++++------------
1 file changed, 29 insertions(+), 15 deletions(-)
diff --git a/crates/uv-git-types/src/oid.rs b/crates/uv-git-types/src/oid.rs
index 2ccd376b7..9319f5e34 100644
--- a/crates/uv-git-types/src/oid.rs
+++ b/crates/uv-git-types/src/oid.rs
@@ -5,31 +5,36 @@ use thiserror::Error;
/// Unique identity of any Git object (commit, tree, blob, tag).
///
-/// Note this type does not validate whether the input is a valid hash.
+/// This type's `FromStr` implementation validates that it's exactly 40 hex characters, i.e. a
+/// full-length git commit.
+///
+/// If Git's SHA-256 support becomes more widespread in the future (in particular if GitHub ever
+/// adds support), we might need to make this an enum.
#[derive(Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub struct GitOid {
- len: usize,
bytes: [u8; 40],
}
impl GitOid {
/// Return the string representation of an object ID.
pub fn as_str(&self) -> &str {
- str::from_utf8(&self.bytes[..self.len]).unwrap()
+ str::from_utf8(&self.bytes).unwrap()
}
/// Return a truncated representation, i.e., the first 16 characters of the SHA.
pub fn as_short_str(&self) -> &str {
- self.as_str().get(..16).unwrap_or(self.as_str())
+ &self.as_str()[..16]
}
}
#[derive(Debug, Error, PartialEq)]
pub enum OidParseError {
- #[error("Object ID can be at most 40 hex characters")]
- TooLong,
#[error("Object ID cannot be parsed from empty string")]
Empty,
+ #[error("Object ID must be exactly 40 hex characters")]
+ WrongLength,
+ #[error("Object ID must be valid hex characters")]
+ NotHex,
}
impl FromStr for GitOid {
@@ -40,17 +45,17 @@ impl FromStr for GitOid {
return Err(OidParseError::Empty);
}
- if s.len() > 40 {
- return Err(OidParseError::TooLong);
+ if s.len() != 40 {
+ return Err(OidParseError::WrongLength);
}
- let mut out = [0; 40];
- out[..s.len()].copy_from_slice(s.as_bytes());
+ if !s.chars().all(|ch| ch.is_ascii_hexdigit()) {
+ return Err(OidParseError::NotHex);
+ }
- Ok(GitOid {
- len: s.len(),
- bytes: out,
- })
+ let mut bytes = [0; 40];
+ bytes.copy_from_slice(s.as_bytes());
+ Ok(GitOid { bytes })
}
}
@@ -101,11 +106,20 @@ mod tests {
#[test]
fn git_oid() {
GitOid::from_str("4a23745badf5bf5ef7928f1e346e9986bd696d82").unwrap();
+ GitOid::from_str("4A23745BADF5BF5EF7928F1E346E9986BD696D82").unwrap();
assert_eq!(GitOid::from_str(""), Err(OidParseError::Empty));
assert_eq!(
GitOid::from_str(&str::repeat("a", 41)),
- Err(OidParseError::TooLong)
+ Err(OidParseError::WrongLength)
+ );
+ assert_eq!(
+ GitOid::from_str(&str::repeat("a", 39)),
+ Err(OidParseError::WrongLength)
+ );
+ assert_eq!(
+ GitOid::from_str(&str::repeat("x", 40)),
+ Err(OidParseError::NotHex)
);
}
}
From 9129d2a9a3071e6025eadf1d768496e9023a707d Mon Sep 17 00:00:00 2001
From: Jack O'Connor
Date: Fri, 30 May 2025 18:55:44 -0700
Subject: [PATCH 044/250] avoid fetching an exact, cached commit, even if it
isn't locked
Fixes #13513 and #12746.
---
crates/uv-git/src/source.rs | 89 +++++++++++++++++++------------
crates/uv/tests/it/pip_install.rs | 2 -
2 files changed, 54 insertions(+), 37 deletions(-)
diff --git a/crates/uv-git/src/source.rs b/crates/uv-git/src/source.rs
index 2031c49e5..cb6d0a24f 100644
--- a/crates/uv-git/src/source.rs
+++ b/crates/uv-git/src/source.rs
@@ -11,11 +11,11 @@ use reqwest_middleware::ClientWithMiddleware;
use tracing::{debug, instrument};
use uv_cache_key::{RepositoryUrl, cache_digest};
-use uv_git_types::GitUrl;
+use uv_git_types::{GitOid, GitReference, GitUrl};
use uv_redacted::DisplaySafeUrl;
use crate::GIT_STORE;
-use crate::git::GitRemote;
+use crate::git::{GitDatabase, GitRemote};
/// A remote Git source that can be checked out locally.
pub struct GitSource {
@@ -86,40 +86,59 @@ impl GitSource {
Cow::Borrowed(self.git.repository())
};
- let remote = GitRemote::new(&remote);
- let (db, actual_rev, task) = match (self.git.precise(), remote.db_at(&db_path).ok()) {
- // If we have a locked revision, and we have a preexisting database
- // which has that revision, then no update needs to happen.
- (Some(rev), Some(db)) if db.contains(rev) => {
- debug!("Using existing Git source `{}`", self.git.repository());
- (db, rev, None)
+ // Fetch the commit, if we don't already have it. Wrapping this section in a closure makes
+ // it easier to short-circuit this in the cases where we do have the commit.
+ let (db, actual_rev, maybe_task) = || -> Result<(GitDatabase, GitOid, Option)> {
+ let git_remote = GitRemote::new(&remote);
+ let maybe_db = git_remote.db_at(&db_path).ok();
+
+ // If we have a locked revision, and we have a pre-existing database which has that
+ // revision, then no update needs to happen.
+ if let (Some(rev), Some(db)) = (self.git.precise(), &maybe_db) {
+ if db.contains(rev) {
+ debug!("Using existing Git source `{}`", self.git.repository());
+ return Ok((maybe_db.unwrap(), rev, None));
+ }
}
- // ... otherwise we use this state to update the git database. Note
- // that we still check for being offline here, for example in the
- // situation that we have a locked revision but the database
- // doesn't have it.
- (locked_rev, db) => {
- debug!("Updating Git source `{}`", self.git.repository());
-
- // Report the checkout operation to the reporter.
- let task = self.reporter.as_ref().map(|reporter| {
- reporter.on_checkout_start(remote.url(), self.git.reference().as_rev())
- });
-
- let (db, actual_rev) = remote.checkout(
- &db_path,
- db,
- self.git.reference(),
- locked_rev,
- &self.client,
- self.disable_ssl,
- self.offline,
- )?;
-
- (db, actual_rev, task)
+ // If the revision isn't locked, but it looks like it might be an exact commit hash,
+ // and we do have a pre-existing database, then check whether it is, in fact, a commit
+ // hash. If so, treat it like it's locked.
+ if let Some(db) = &maybe_db {
+ if let GitReference::BranchOrTagOrCommit(maybe_commit) = self.git.reference() {
+ if let Ok(oid) = maybe_commit.parse::() {
+ if db.contains(oid) {
+ // This reference is an exact commit. Treat it like it's
+ // locked.
+ debug!("Using existing Git source `{}`", self.git.repository());
+ return Ok((maybe_db.unwrap(), oid, None));
+ }
+ }
+ }
}
- };
+
+ // ... otherwise, we use this state to update the Git database. Note that we still check
+ // for being offline here, for example in the situation that we have a locked revision
+ // but the database doesn't have it.
+ debug!("Updating Git source `{}`", self.git.repository());
+
+ // Report the checkout operation to the reporter.
+ let task = self.reporter.as_ref().map(|reporter| {
+ reporter.on_checkout_start(git_remote.url(), self.git.reference().as_rev())
+ });
+
+ let (db, actual_rev) = git_remote.checkout(
+ &db_path,
+ maybe_db,
+ self.git.reference(),
+ self.git.precise(),
+ &self.client,
+ self.disable_ssl,
+ self.offline,
+ )?;
+
+ Ok((db, actual_rev, task))
+ }()?;
// Don’t use the full hash, in order to contribute less to reaching the
// path length limit on Windows.
@@ -137,9 +156,9 @@ impl GitSource {
db.copy_to(actual_rev, &checkout_path)?;
// Report the checkout operation to the reporter.
- if let Some(task) = task {
+ if let Some(task) = maybe_task {
if let Some(reporter) = self.reporter.as_ref() {
- reporter.on_checkout_complete(remote.url(), actual_rev.as_str(), task);
+ reporter.on_checkout_complete(remote.as_ref(), actual_rev.as_str(), task);
}
}
diff --git a/crates/uv/tests/it/pip_install.rs b/crates/uv/tests/it/pip_install.rs
index 2ef8851fe..fa823cce0 100644
--- a/crates/uv/tests/it/pip_install.rs
+++ b/crates/uv/tests/it/pip_install.rs
@@ -2153,8 +2153,6 @@ fn install_git_public_https_exact_commit() {
----- stdout -----
----- stderr -----
- Updating https://github.com/astral-test/uv-public-pypackage (b270df1a2fb5d012294e9aaf05e7e0bab1e6a389)
- Updated https://github.com/astral-test/uv-public-pypackage (b270df1a2fb5d012294e9aaf05e7e0bab1e6a389)
Resolved 1 package in [TIME]
Audited 1 package in [TIME]
");
From c54f131500c9bd33daf96146af46cd400d3b006c Mon Sep 17 00:00:00 2001
From: konsti
Date: Tue, 10 Jun 2025 12:00:04 +0200
Subject: [PATCH 045/250] Add basic network error tests (#13585)
Add basic tests for error messages on retryable network errors.
This test mod is intended to grow to ensure that we handle retryable
errors correctly and that we show the appropriate error message if we
failed after retrying.
The starter tests show some common cases we've seen download errors in:
simple and find links indexes, file downloads and Python installs.
For `io::Error` fault injection to test the reqwest `Err` path besides
the HTTP status code `Ok` path, see
https://github.com/LukeMathWalker/wiremock-rs/issues/149.
---
crates/uv/tests/it/main.rs | 4 +-
crates/uv/tests/it/network.rs | 154 ++++++++++++++++++++++++++++++++++
2 files changed, 157 insertions(+), 1 deletion(-)
create mode 100644 crates/uv/tests/it/network.rs
diff --git a/crates/uv/tests/it/main.rs b/crates/uv/tests/it/main.rs
index 5daa56a3a..7835fa461 100644
--- a/crates/uv/tests/it/main.rs
+++ b/crates/uv/tests/it/main.rs
@@ -39,7 +39,7 @@ mod lock_conflict;
mod lock_scenarios;
-mod version;
+mod network;
#[cfg(all(feature = "python", feature = "pypi"))]
mod pip_check;
@@ -120,6 +120,8 @@ mod tree;
#[cfg(feature = "python")]
mod venv;
+mod version;
+
#[cfg(all(feature = "python", feature = "pypi"))]
mod workflow;
diff --git a/crates/uv/tests/it/network.rs b/crates/uv/tests/it/network.rs
new file mode 100644
index 000000000..fba24afe1
--- /dev/null
+++ b/crates/uv/tests/it/network.rs
@@ -0,0 +1,154 @@
+use std::env;
+
+use assert_fs::fixture::{FileWriteStr, PathChild};
+use http::StatusCode;
+use serde_json::json;
+use wiremock::matchers::method;
+use wiremock::{Mock, MockServer, ResponseTemplate};
+
+use crate::common::{TestContext, uv_snapshot};
+
+/// Check the simple index error message when the server returns HTTP status 500, a retryable error.
+#[tokio::test]
+async fn simple_http_500() {
+ let context = TestContext::new("3.12");
+
+ let server = MockServer::start().await;
+ Mock::given(method("GET"))
+ .respond_with(ResponseTemplate::new(StatusCode::INTERNAL_SERVER_ERROR))
+ .mount(&server)
+ .await;
+ let mock_server_uri = server.uri();
+
+ let filters = vec![(mock_server_uri.as_str(), "[SERVER]")];
+ uv_snapshot!(filters, context
+ .pip_install()
+ .arg("tqdm")
+ .arg("--index-url")
+ .arg(server.uri()), @r"
+ success: false
+ exit_code: 2
+ ----- stdout -----
+
+ ----- stderr -----
+ error: Failed to fetch: `[SERVER]/tqdm/`
+ Caused by: HTTP status server error (500 Internal Server Error) for url ([SERVER]/tqdm/)
+ ");
+}
+
+/// Check the find links error message when the server returns HTTP status 500, a retryable error.
+#[tokio::test]
+async fn find_links_http_500() {
+ let context = TestContext::new("3.12");
+
+ let server = MockServer::start().await;
+ Mock::given(method("GET"))
+ .respond_with(ResponseTemplate::new(StatusCode::INTERNAL_SERVER_ERROR))
+ .mount(&server)
+ .await;
+ let mock_server_uri = server.uri();
+
+ let filters = vec![(mock_server_uri.as_str(), "[SERVER]")];
+ uv_snapshot!(filters, context
+ .pip_install()
+ .arg("tqdm")
+ .arg("--no-index")
+ .arg("--find-links")
+ .arg(server.uri()), @r"
+ success: false
+ exit_code: 2
+ ----- stdout -----
+
+ ----- stderr -----
+ error: Failed to read `--find-links` URL: [SERVER]/
+ Caused by: Failed to fetch: `[SERVER]/`
+ Caused by: HTTP status server error (500 Internal Server Error) for url ([SERVER]/)
+ ");
+}
+
+/// Check the direct package URL error message when the server returns HTTP status 500, a retryable
+/// error.
+#[tokio::test]
+async fn direct_url_http_500() {
+ let context = TestContext::new("3.12");
+
+ let server = MockServer::start().await;
+ Mock::given(method("GET"))
+ .respond_with(ResponseTemplate::new(StatusCode::INTERNAL_SERVER_ERROR))
+ .mount(&server)
+ .await;
+ let mock_server_uri = server.uri();
+
+ let tqdm_url = format!(
+ "{mock_server_uri}/packages/d0/30/dc54f88dd4a2b5dc8a0279bdd7270e735851848b762aeb1c1184ed1f6b14/tqdm-4.67.1-py3-none-any.whl"
+ );
+ let filters = vec![(mock_server_uri.as_str(), "[SERVER]")];
+ uv_snapshot!(filters, context
+ .pip_install()
+ .arg(format!("tqdm @ {tqdm_url}")), @r"
+ success: false
+ exit_code: 1
+ ----- stdout -----
+
+ ----- stderr -----
+ × Failed to download `tqdm @ [SERVER]/packages/d0/30/dc54f88dd4a2b5dc8a0279bdd7270e735851848b762aeb1c1184ed1f6b14/tqdm-4.67.1-py3-none-any.whl`
+ ├─▶ Failed to fetch: `[SERVER]/packages/d0/30/dc54f88dd4a2b5dc8a0279bdd7270e735851848b762aeb1c1184ed1f6b14/tqdm-4.67.1-py3-none-any.whl`
+ ╰─▶ HTTP status server error (500 Internal Server Error) for url ([SERVER]/packages/d0/30/dc54f88dd4a2b5dc8a0279bdd7270e735851848b762aeb1c1184ed1f6b14/tqdm-4.67.1-py3-none-any.whl)
+ ");
+}
+
+/// Check the Python install error message when the server returns HTTP status 500, a retryable
+/// error.
+#[tokio::test]
+async fn python_install_http_500() {
+ let context = TestContext::new("3.12")
+ .with_filtered_python_keys()
+ .with_filtered_exe_suffix()
+ .with_managed_python_dirs();
+
+ let server = MockServer::start().await;
+ Mock::given(method("GET"))
+ .respond_with(ResponseTemplate::new(StatusCode::INTERNAL_SERVER_ERROR))
+ .mount(&server)
+ .await;
+ let mock_server_uri = server.uri();
+
+ let python_downloads_json = context.temp_dir.child("python_downloads.json");
+ let interpreter = json!({
+ "cpython-3.10.0-darwin-aarch64-none": {
+ "arch": {
+ "family": "aarch64",
+ "variant": null
+ },
+ "libc": "none",
+ "major": 3,
+ "minor": 10,
+ "name": "cpython",
+ "os": "darwin",
+ "patch": 0,
+ "prerelease": "",
+ "sha256": null,
+ "url": format!("{mock_server_uri}/astral-sh/python-build-standalone/releases/download/20211017/cpython-3.10.0-aarch64-apple-darwin-pgo%2Blto-20211017T1616.tar.zst"),
+ "variant": null
+ }
+ });
+ python_downloads_json
+ .write_str(&serde_json::to_string(&interpreter).unwrap())
+ .unwrap();
+
+ let filters = vec![(mock_server_uri.as_str(), "[SERVER]")];
+ uv_snapshot!(filters, context
+ .python_install()
+ .arg("cpython-3.10.0-darwin-aarch64-none")
+ .arg("--python-downloads-json-url")
+ .arg(python_downloads_json.path()), @r"
+ success: false
+ exit_code: 1
+ ----- stdout -----
+
+ ----- stderr -----
+ error: Failed to install cpython-3.10.0-macos-aarch64-none
+ Caused by: Failed to download [SERVER]/astral-sh/python-build-standalone/releases/download/20211017/cpython-3.10.0-aarch64-apple-darwin-pgo%2Blto-20211017T1616.tar.zst
+ Caused by: HTTP status server error (500 Internal Server Error) for url ([SERVER]/astral-sh/python-build-standalone/releases/download/20211017/cpython-3.10.0-aarch64-apple-darwin-pgo%2Blto-20211017T1616.tar.zst)
+ ");
+}
From 28685633c01a0e989abe997e0378e8073d1fdad1 Mon Sep 17 00:00:00 2001
From: Charlie Marsh
Date: Tue, 10 Jun 2025 07:46:49 -0400
Subject: [PATCH 046/250] Add an `llms.txt` to uv (#13929)
## Summary
The generated file looks like:
```
# uv
> uv is an extremely fast Python package and project manager, written in Rust.
You can use uv to install Python dependencies, run scripts, manage virtual environments,
build and publish packages, and even install Python itself. uv is capable of replacing
`pip`, `pip-tools`, `pipx`, `poetry`, `pyenv`, `twine`, `virtualenv`, and more.
uv includes both a pip-compatible CLI (prepend `uv` to a pip command, e.g., `uv pip install ruff`)
and a first-class project interface (e.g., `uv add ruff`) complete with lockfiles and
workspace support.
## Getting started
- [Features](https://docs.astral.sh/uv/getting-started/features/index.md)
- [First steps](https://docs.astral.sh/uv/getting-started/first-steps/index.md)
- [Installation](https://docs.astral.sh/uv/getting-started/installation/index.md)
## Guides
- [Installing Python](https://docs.astral.sh/uv/guides/install-python/index.md)
- [Publishing packages](https://docs.astral.sh/uv/guides/package/index.md)
- [Working on projects](https://docs.astral.sh/uv/guides/projects/index.md)
- [Running scripts](https://docs.astral.sh/uv/guides/scripts/index.md)
- [Using tools](https://docs.astral.sh/uv/guides/tools/index.md)
## Integrations
- [Alternative indexes](https://docs.astral.sh/uv/guides/integration/alternative-indexes/index.md)
- [AWS Lambda](https://docs.astral.sh/uv/guides/integration/aws-lambda/index.md)
- [Dependency bots](https://docs.astral.sh/uv/guides/integration/dependency-bots/index.md)
- [Docker](https://docs.astral.sh/uv/guides/integration/docker/index.md)
- [FastAPI](https://docs.astral.sh/uv/guides/integration/fastapi/index.md)
- [GitHub Actions](https://docs.astral.sh/uv/guides/integration/github/index.md)
- [GitLab CI/CD](https://docs.astral.sh/uv/guides/integration/gitlab/index.md)
- [Jupyter](https://docs.astral.sh/uv/guides/integration/jupyter/index.md)
- [marimo](https://docs.astral.sh/uv/guides/integration/marimo/index.md)
- [Pre-commit](https://docs.astral.sh/uv/guides/integration/pre-commit/index.md)
- [PyTorch](https://docs.astral.sh/uv/guides/integration/pytorch/index.md)
## Projects
- [Building distributions](https://docs.astral.sh/uv/concepts/projects/build/index.md)
- [Configuring projects](https://docs.astral.sh/uv/concepts/projects/config/index.md)
- [Managing dependencies](https://docs.astral.sh/uv/concepts/projects/dependencies/index.md)
- [Creating projects](https://docs.astral.sh/uv/concepts/projects/init/index.md)
- [Structure and files](https://docs.astral.sh/uv/concepts/projects/layout/index.md)
- [Running commands](https://docs.astral.sh/uv/concepts/projects/run/index.md)
- [Locking and syncing](https://docs.astral.sh/uv/concepts/projects/sync/index.md)
- [Using workspaces](https://docs.astral.sh/uv/concepts/projects/workspaces/index.md)
## Features
- [Authentication](https://docs.astral.sh/uv/concepts/authentication/index.md)
- [Build backend](https://docs.astral.sh/uv/concepts/build-backend/index.md)
- [Caching](https://docs.astral.sh/uv/concepts/cache/index.md)
- [Configuration files](https://docs.astral.sh/uv/concepts/configuration-files/index.md)
- [Package indexes](https://docs.astral.sh/uv/concepts/indexes/index.md)
- [Python versions](https://docs.astral.sh/uv/concepts/python-versions/index.md)
- [Resolution](https://docs.astral.sh/uv/concepts/resolution/index.md)
- [Tools](https://docs.astral.sh/uv/concepts/tools/index.md)
## The pip interface
- [Compatibility with pip](https://docs.astral.sh/uv/pip/compatibility/index.md)
- [Locking environments](https://docs.astral.sh/uv/pip/compile/index.md)
- [Declaring dependencies](https://docs.astral.sh/uv/pip/dependencies/index.md)
- [Using environments](https://docs.astral.sh/uv/pip/environments/index.md)
- [Inspecting environments](https://docs.astral.sh/uv/pip/inspection/index.md)
- [Managing packages](https://docs.astral.sh/uv/pip/packages/index.md)
## Reference
- [Commands](https://docs.astral.sh/uv/reference/cli/index.md)
- [Environment variables](https://docs.astral.sh/uv/reference/environment/index.md)
- [Installer](https://docs.astral.sh/uv/reference/installer/index.md)
- [Settings](https://docs.astral.sh/uv/reference/settings/index.md)
```
Closes #13901.
---
docs/requirements-insiders.txt | 19 ++++++++--
docs/requirements.in | 1 +
docs/requirements.txt | 19 ++++++++--
mkdocs.template.yml | 63 ++++++++++++++++++++++++++++++++++
4 files changed, 98 insertions(+), 4 deletions(-)
diff --git a/docs/requirements-insiders.txt b/docs/requirements-insiders.txt
index c221efd4b..afdf050c1 100644
--- a/docs/requirements-insiders.txt
+++ b/docs/requirements-insiders.txt
@@ -4,6 +4,10 @@ babel==2.15.0
# via
# mkdocs-git-revision-date-localized-plugin
# mkdocs-material
+beautifulsoup4==4.13.4
+ # via
+ # markdownify
+ # mkdocs-llmstxt
black==23.10.0
# via -r docs/requirements.in
certifi==2024.7.4
@@ -43,17 +47,20 @@ markdown-it-py==3.0.0
# mdformat
# mdformat-gfm
# mdit-py-plugins
+markdownify==1.1.0
+ # via mkdocs-llmstxt
markupsafe==2.1.5
# via
# jinja2
# mkdocs
-mdformat==0.7.17
+mdformat==0.7.22
# via
# -r docs/requirements.in
# mdformat-admon
# mdformat-gfm
# mdformat-mkdocs
# mdformat-tables
+ # mkdocs-llmstxt
mdformat-admon==2.0.2
# via
# -r docs/requirements.in
@@ -82,6 +89,8 @@ mkdocs==1.5.0
# mkdocs-redirects
mkdocs-git-revision-date-localized-plugin==1.3.0
# via -r docs/requirements.in
+mkdocs-llmstxt==0.2.0
+ # via -r docs/requirements.in
mkdocs-material @ git+ssh://git@github.com/astral-sh/mkdocs-material-insiders.git@38c0b8187325c3bab386b666daf3518ac036f2f4
# via
# -r docs/requirements-insiders.in
@@ -128,9 +137,15 @@ regex==2022.10.31
requests==2.32.3
# via mkdocs-material
six==1.16.0
- # via python-dateutil
+ # via
+ # markdownify
+ # python-dateutil
smmap==5.0.2
# via gitdb
+soupsieve==2.7
+ # via beautifulsoup4
+typing-extensions==4.14.0
+ # via beautifulsoup4
uc-micro-py==1.0.3
# via linkify-it-py
urllib3==2.2.2
diff --git a/docs/requirements.in b/docs/requirements.in
index 5f504e015..3cc0f6a25 100644
--- a/docs/requirements.in
+++ b/docs/requirements.in
@@ -7,3 +7,4 @@ mdformat-mkdocs>=2.0.4
mdformat-admon>=2.0.2
mkdocs-redirects>=1.2.2
mkdocs-git-revision-date-localized-plugin>=1.3.0
+mkdocs-llmstxt>=0.2.0
diff --git a/docs/requirements.txt b/docs/requirements.txt
index 6392a30a5..41c93098a 100644
--- a/docs/requirements.txt
+++ b/docs/requirements.txt
@@ -4,6 +4,10 @@ babel==2.15.0
# via
# mkdocs-git-revision-date-localized-plugin
# mkdocs-material
+beautifulsoup4==4.13.4
+ # via
+ # markdownify
+ # mkdocs-llmstxt
black==24.4.2
# via -r docs/requirements.in
certifi==2024.7.4
@@ -43,17 +47,20 @@ markdown-it-py==3.0.0
# mdformat
# mdformat-gfm
# mdit-py-plugins
+markdownify==1.1.0
+ # via mkdocs-llmstxt
markupsafe==2.1.5
# via
# jinja2
# mkdocs
-mdformat==0.7.17
+mdformat==0.7.22
# via
# -r docs/requirements.in
# mdformat-admon
# mdformat-gfm
# mdformat-mkdocs
# mdformat-tables
+ # mkdocs-llmstxt
mdformat-admon==2.0.6
# via
# -r docs/requirements.in
@@ -85,6 +92,8 @@ mkdocs-get-deps==0.2.0
# via mkdocs
mkdocs-git-revision-date-localized-plugin==1.3.0
# via -r docs/requirements.in
+mkdocs-llmstxt==0.2.0
+ # via -r docs/requirements.in
mkdocs-material==9.5.29
# via -r docs/requirements.in
mkdocs-material-extensions==1.3.1
@@ -130,9 +139,15 @@ regex==2024.5.15
requests==2.32.3
# via mkdocs-material
six==1.16.0
- # via python-dateutil
+ # via
+ # markdownify
+ # python-dateutil
smmap==5.0.2
# via gitdb
+soupsieve==2.7
+ # via beautifulsoup4
+typing-extensions==4.14.0
+ # via beautifulsoup4
uc-micro-py==1.0.3
# via linkify-it-py
urllib3==2.2.2
diff --git a/mkdocs.template.yml b/mkdocs.template.yml
index 9a4d3b1cb..0b2ee6623 100644
--- a/mkdocs.template.yml
+++ b/mkdocs.template.yml
@@ -40,6 +40,7 @@ repo_name: uv
site_author: charliermarsh
site_url: https://docs.astral.sh/uv/
site_dir: site/uv
+site_description: uv is an extremely fast Python package and project manager, written in Rust.
markdown_extensions:
- admonition
- pymdownx.details
@@ -80,6 +81,68 @@ plugins:
"configuration/files.md": "concepts/configuration-files.md"
"configuration/indexes.md": "concepts/indexes.md"
"configuration/environment.md": "reference/environment.md"
+ - llmstxt:
+ markdown_description: |
+ You can use uv to install Python dependencies, run scripts, manage virtual environments,
+ build and publish packages, and even install Python itself. uv is capable of replacing
+ `pip`, `pip-tools`, `pipx`, `poetry`, `pyenv`, `twine`, `virtualenv`, and more.
+
+ uv includes both a pip-compatible CLI (prepend `uv` to a pip command, e.g., `uv pip install ruff`)
+ and a first-class project interface (e.g., `uv add ruff`) complete with lockfiles and
+ workspace support.
+ sections:
+ Getting started:
+ - getting-started/installation.md
+ - getting-started/first-steps.md
+ - getting-started/features.md
+ Guides:
+ - guides/install-python.md
+ - guides/scripts.md
+ - guides/tools.md
+ - guides/projects.md
+ - guides/package.md
+ Integrations:
+ - guides/integration/docker.md
+ - guides/integration/jupyter.md
+ - guides/integration/marimo.md
+ - guides/integration/github.md
+ - guides/integration/gitlab.md
+ - guides/integration/pre-commit.md
+ - guides/integration/pytorch.md
+ - guides/integration/fastapi.md
+ - guides/integration/alternative-indexes.md
+ - guides/integration/dependency-bots.md
+ - guides/integration/aws-lambda.md
+ Projects:
+ - concepts/projects/layout.md
+ - concepts/projects/init.md
+ - concepts/projects/dependencies.md
+ - concepts/projects/run.md
+ - concepts/projects/sync.md
+ - concepts/projects/config.md
+ - concepts/projects/build.md
+ - concepts/projects/workspaces.md
+ Features:
+ - concepts/tools.md
+ - concepts/python-versions.md
+ - concepts/configuration-files.md
+ - concepts/indexes.md
+ - concepts/resolution.md
+ - concepts/build-backend.md
+ - concepts/authentication.md
+ - concepts/cache.md
+ The pip interface:
+ - pip/environments.md
+ - pip/packages.md
+ - pip/inspection.md
+ - pip/dependencies.md
+ - pip/compile.md
+ - pip/compatibility.md
+ Reference:
+ - reference/cli.md
+ - reference/settings.md
+ - reference/environment.md
+ - reference/installer.md
extra_css:
- stylesheets/extra.css
extra_javascript:
From 1b82a3ac99df962a6a922e584b8cd0758cf08e9e Mon Sep 17 00:00:00 2001
From: Zanie Blue
Date: Tue, 10 Jun 2025 09:52:23 -0500
Subject: [PATCH 047/250] Ignore Python discovery errors during `uv python pin`
(#13944)
See https://github.com/astral-sh/uv/issues/13935#issuecomment-2957300516
where we fail to write a pin file because we encounter an unusable
interpreter. This is actually a special case where `MissingPython` is
not raised because we want to show why we failed to find a usable
interpreter, which is useful in commands where you _need_ an interpreter
to use, but here we don't actually need it. Here, we just log the
failure and move on.
Related https://github.com/astral-sh/uv/pull/13936
---
crates/uv/src/commands/python/pin.rs | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/crates/uv/src/commands/python/pin.rs b/crates/uv/src/commands/python/pin.rs
index 471f7461e..8ba2e698c 100644
--- a/crates/uv/src/commands/python/pin.rs
+++ b/crates/uv/src/commands/python/pin.rs
@@ -110,6 +110,12 @@ pub(crate) async fn pin(
warn_user_once!("{err}");
None
}
+ // If there was some other error, log it
+ Err(err) if !resolved => {
+ debug!("{err}");
+ None
+ }
+ // If `resolved` was requested, we must find an interpreter — fail otherwise
Err(err) => return Err(err.into()),
};
From 210b5791880ea60700e0fb6513783efb10c3b086 Mon Sep 17 00:00:00 2001
From: Xeonacid
Date: Tue, 10 Jun 2025 23:18:28 +0800
Subject: [PATCH 048/250] build-binaries for riscv64 (#12688)
## Summary
Build riscv64 binary so it can get released in the GitHub Releases,
which is used by many high-level apps.
A copy-paste from linux-s390x, with only target and arch changed.
maturin-action added riscv64 support in v1.48.0, this PR also bumps it
to the latest version, v1.48.1.
## Test Plan
Let CI test itself :P
Already tested in [my
fork](https://github.com/Xeonacid/uv/actions/runs/14289179697/job/40048172301)
---
.github/workflows/build-binaries.yml | 97 ++++++++++++++++++++++++++++
Cargo.toml | 2 +
2 files changed, 99 insertions(+)
diff --git a/.github/workflows/build-binaries.yml b/.github/workflows/build-binaries.yml
index 6569554e0..5f42bdf9c 100644
--- a/.github/workflows/build-binaries.yml
+++ b/.github/workflows/build-binaries.yml
@@ -691,6 +691,103 @@ jobs:
name: wheels_uv_build-${{ matrix.platform.target }}
path: crates/uv-build/dist
+ # Like `linux-arm`.
+ linux-riscv64:
+ if: ${{ !contains(github.event.pull_request.labels.*.name, 'no-build') }}
+ timeout-minutes: 30
+ runs-on: depot-ubuntu-latest-4
+ strategy:
+ matrix:
+ platform:
+ - target: riscv64gc-unknown-linux-gnu
+ arch: riscv64
+
+ steps:
+ - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
+ - uses: actions/setup-python@8d9ed9ac5c53483de85588cdf95a591a75ab9f55 # v5
+ with:
+ python-version: ${{ env.PYTHON_VERSION }}
+ - name: "Prep README.md"
+ run: python scripts/transform_readme.py --target pypi
+
+ # uv
+ - name: "Build wheels"
+ uses: PyO3/maturin-action@44479ae1b6b1a57f561e03add8832e62c185eb17 # v1.48.1
+ with:
+ target: ${{ matrix.platform.target }}
+ manylinux: auto
+ docker-options: ${{ matrix.platform.maturin_docker_options }}
+ args: --release --locked --out dist --features self-update
+ - uses: uraimo/run-on-arch-action@ac33288c3728ca72563c97b8b88dda5a65a84448 # v2
+ name: "Test wheel"
+ with:
+ arch: ${{ matrix.platform.arch }}
+ distro: ubuntu20.04
+ githubToken: ${{ github.token }}
+ install: |
+ apt-get update
+ apt-get install -y --no-install-recommends python3 python3-pip python-is-python3
+ pip3 install -U pip
+ run: |
+ pip install ${{ env.PACKAGE_NAME }} --no-index --find-links dist/ --force-reinstall
+ ${{ env.MODULE_NAME }} --help
+ # TODO(konsti): Enable this test on all platforms, currently `find_uv_bin` is failing to discover uv here.
+ # python -m ${{ env.MODULE_NAME }} --help
+ uvx --help
+ - name: "Upload wheels"
+ uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
+ with:
+ name: wheels_uv-${{ matrix.platform.target }}
+ path: dist
+ - name: "Archive binary"
+ shell: bash
+ run: |
+ TARGET=${{ matrix.platform.target }}
+ ARCHIVE_NAME=uv-$TARGET
+ ARCHIVE_FILE=$ARCHIVE_NAME.tar.gz
+
+ mkdir -p $ARCHIVE_NAME
+ cp target/$TARGET/release/uv $ARCHIVE_NAME/uv
+ cp target/$TARGET/release/uvx $ARCHIVE_NAME/uvx
+ tar czvf $ARCHIVE_FILE $ARCHIVE_NAME
+ shasum -a 256 $ARCHIVE_FILE > $ARCHIVE_FILE.sha256
+ - name: "Upload binary"
+ uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
+ with:
+ name: artifacts-${{ matrix.platform.target }}
+ path: |
+ *.tar.gz
+ *.sha256
+
+ # uv-build
+ - name: "Build wheels uv-build"
+ uses: PyO3/maturin-action@44479ae1b6b1a57f561e03add8832e62c185eb17 # v1.48.1
+ with:
+ target: ${{ matrix.platform.target }}
+ manylinux: auto
+ docker-options: ${{ matrix.platform.maturin_docker_options }}
+ args: --profile minimal-size --locked --out crates/uv-build/dist -m crates/uv-build/Cargo.toml
+ - uses: uraimo/run-on-arch-action@ac33288c3728ca72563c97b8b88dda5a65a84448 # v2
+ name: "Test wheel uv-build"
+ with:
+ arch: ${{ matrix.platform.arch }}
+ distro: ubuntu20.04
+ githubToken: ${{ github.token }}
+ install: |
+ apt-get update
+ apt-get install -y --no-install-recommends python3 python3-pip python-is-python3
+ pip3 install -U pip
+ run: |
+ pip install ${{ env.PACKAGE_NAME }}-build --no-index --find-links crates/uv-build/dist --force-reinstall
+ ${{ env.MODULE_NAME }}-build --help
+ # TODO(konsti): Enable this test on all platforms, currently `find_uv_bin` is failing to discover uv here.
+ # python -m ${{ env.MODULE_NAME }}-build --help
+ - name: "Upload wheels uv-build"
+ uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
+ with:
+ name: wheels_uv_build-${{ matrix.platform.target }}
+ path: crates/uv-build/dist
+
musllinux:
if: ${{ !contains(github.event.pull_request.labels.*.name, 'no-build') }}
runs-on: ubuntu-latest
diff --git a/Cargo.toml b/Cargo.toml
index 368dc0442..3e192a3d5 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -324,6 +324,7 @@ targets = [
"i686-unknown-linux-musl",
"powerpc64-unknown-linux-gnu",
"powerpc64le-unknown-linux-gnu",
+ "riscv64gc-unknown-linux-gnu",
"s390x-unknown-linux-gnu",
"x86_64-apple-darwin",
"x86_64-pc-windows-msvc",
@@ -361,6 +362,7 @@ global = "depot-ubuntu-latest-4"
[workspace.metadata.dist.min-glibc-version]
# Override glibc version for specific target triplets.
aarch64-unknown-linux-gnu = "2.28"
+riscv64gc-unknown-linux-gnu = "2.31"
# Override all remaining glibc versions.
"*" = "2.17"
From f20a25f91fe5bfe6f5e80f6ccfc68cc799031ab6 Mon Sep 17 00:00:00 2001
From: Zanie Blue
Date: Tue, 10 Jun 2025 10:56:22 -0500
Subject: [PATCH 049/250] Download versions in `uv python pin` if not found
(#13946)
As another follow-up in the vein of
https://github.com/astral-sh/uv/pull/13944, I noticed `uv python pin`
doesn't download Python versions, which is a bit weird because we'll
warn it's not found.
---
crates/uv/src/commands/python/pin.rs | 34 +++++++++++++++++++++++-----
crates/uv/src/lib.rs | 3 +++
crates/uv/src/settings.rs | 8 ++++++-
crates/uv/tests/it/python_pin.rs | 26 +++++++++++++++++++++
4 files changed, 64 insertions(+), 7 deletions(-)
diff --git a/crates/uv/src/commands/python/pin.rs b/crates/uv/src/commands/python/pin.rs
index 8ba2e698c..e0b241bcc 100644
--- a/crates/uv/src/commands/python/pin.rs
+++ b/crates/uv/src/commands/python/pin.rs
@@ -7,17 +7,22 @@ use owo_colors::OwoColorize;
use tracing::debug;
use uv_cache::Cache;
+use uv_client::BaseClientBuilder;
use uv_dirs::user_uv_config_dir;
use uv_fs::Simplified;
use uv_python::{
- EnvironmentPreference, PYTHON_VERSION_FILENAME, PythonInstallation, PythonPreference,
- PythonRequest, PythonVersionFile, VersionFileDiscoveryOptions,
+ EnvironmentPreference, PYTHON_VERSION_FILENAME, PythonDownloads, PythonInstallation,
+ PythonPreference, PythonRequest, PythonVersionFile, VersionFileDiscoveryOptions,
};
+use uv_settings::PythonInstallMirrors;
use uv_warnings::warn_user_once;
use uv_workspace::{DiscoveryOptions, VirtualProject, WorkspaceCache};
-use crate::commands::{ExitStatus, project::find_requires_python};
+use crate::commands::{
+ ExitStatus, project::find_requires_python, reporters::PythonDownloadReporter,
+};
use crate::printer::Printer;
+use crate::settings::NetworkSettings;
/// Pin to a specific Python version.
#[allow(clippy::fn_params_excessive_bools)]
@@ -26,9 +31,12 @@ pub(crate) async fn pin(
request: Option,
resolved: bool,
python_preference: PythonPreference,
+ python_downloads: PythonDownloads,
no_project: bool,
global: bool,
rm: bool,
+ install_mirrors: PythonInstallMirrors,
+ network_settings: NetworkSettings,
cache: &Cache,
printer: Printer,
) -> Result {
@@ -98,12 +106,26 @@ pub(crate) async fn pin(
bail!("Requests for arbitrary names (e.g., `{name}`) are not supported in version files");
}
- let python = match PythonInstallation::find(
- &request,
+ let client_builder = BaseClientBuilder::new()
+ .connectivity(network_settings.connectivity)
+ .native_tls(network_settings.native_tls)
+ .allow_insecure_host(network_settings.allow_insecure_host.clone());
+ let reporter = PythonDownloadReporter::single(printer);
+
+ let python = match PythonInstallation::find_or_download(
+ Some(&request),
EnvironmentPreference::OnlySystem,
python_preference,
+ python_downloads,
+ &client_builder,
cache,
- ) {
+ Some(&reporter),
+ install_mirrors.python_install_mirror.as_deref(),
+ install_mirrors.pypy_install_mirror.as_deref(),
+ install_mirrors.python_downloads_json_url.as_deref(),
+ )
+ .await
+ {
Ok(python) => Some(python),
// If no matching Python version is found, don't fail unless `resolved` was requested
Err(uv_python::Error::MissingPython(err)) if !resolved => {
diff --git a/crates/uv/src/lib.rs b/crates/uv/src/lib.rs
index 1d4aa932c..b7b1a7859 100644
--- a/crates/uv/src/lib.rs
+++ b/crates/uv/src/lib.rs
@@ -1464,9 +1464,12 @@ async fn run(mut cli: Cli) -> Result {
args.request,
args.resolved,
globals.python_preference,
+ globals.python_downloads,
args.no_project,
args.global,
args.rm,
+ args.install_mirrors,
+ globals.network_settings,
&cache,
printer,
)
diff --git a/crates/uv/src/settings.rs b/crates/uv/src/settings.rs
index 38d3d16fb..b5eb2f5d0 100644
--- a/crates/uv/src/settings.rs
+++ b/crates/uv/src/settings.rs
@@ -1057,12 +1057,13 @@ pub(crate) struct PythonPinSettings {
pub(crate) no_project: bool,
pub(crate) global: bool,
pub(crate) rm: bool,
+ pub(crate) install_mirrors: PythonInstallMirrors,
}
impl PythonPinSettings {
/// Resolve the [`PythonPinSettings`] from the CLI and workspace configuration.
#[allow(clippy::needless_pass_by_value)]
- pub(crate) fn resolve(args: PythonPinArgs, _filesystem: Option) -> Self {
+ pub(crate) fn resolve(args: PythonPinArgs, filesystem: Option) -> Self {
let PythonPinArgs {
request,
no_resolved,
@@ -1072,12 +1073,17 @@ impl PythonPinSettings {
rm,
} = args;
+ let install_mirrors = filesystem
+ .map(|fs| fs.install_mirrors.clone())
+ .unwrap_or_default();
+
Self {
request,
resolved: flag(resolved, no_resolved).unwrap_or(false),
no_project,
global,
rm,
+ install_mirrors,
}
}
}
diff --git a/crates/uv/tests/it/python_pin.rs b/crates/uv/tests/it/python_pin.rs
index cf220d6b1..4cbc98ab0 100644
--- a/crates/uv/tests/it/python_pin.rs
+++ b/crates/uv/tests/it/python_pin.rs
@@ -816,6 +816,32 @@ fn python_pin_with_comments() -> Result<()> {
Ok(())
}
+#[test]
+#[cfg(feature = "python-managed")]
+fn python_pin_install() {
+ let context: TestContext = TestContext::new_with_versions(&[]).with_filtered_python_sources();
+
+ // Should not install 3.12 when downloads are not automatic
+ uv_snapshot!(context.filters(), context.python_pin().arg("3.12"), @r"
+ success: true
+ exit_code: 0
+ ----- stdout -----
+ Pinned `.python-version` to `3.12`
+
+ ----- stderr -----
+ warning: No interpreter found for Python 3.12 in [PYTHON SOURCES]
+ ");
+
+ uv_snapshot!(context.filters(), context.python_pin().arg("3.12").env("UV_PYTHON_DOWNLOADS", "auto"), @r"
+ success: true
+ exit_code: 0
+ ----- stdout -----
+ Pinned `.python-version` to `3.12`
+
+ ----- stderr -----
+ ");
+}
+
#[test]
fn python_pin_rm() {
let context: TestContext = TestContext::new_with_versions(&["3.12"]);
From 90a7208a73a2050fe06ff37db11bbc60a7919ef9 Mon Sep 17 00:00:00 2001
From: "Lan, Jian"
Date: Wed, 11 Jun 2025 02:15:38 +0800
Subject: [PATCH 050/250] Fix and improve docs (#13620)
## Summary
I follow the advices from the IDE spell checker and grammar checker, fix
some typos, and improve the docs.
---
docs/concepts/projects/config.md | 2 +-
docs/concepts/projects/sync.md | 2 +-
docs/concepts/projects/workspaces.md | 2 +-
docs/concepts/python-versions.md | 12 ++++++------
docs/concepts/resolution.md | 2 +-
docs/guides/integration/aws-lambda.md | 2 +-
docs/guides/integration/docker.md | 2 +-
docs/guides/package.md | 2 +-
docs/guides/tools.md | 4 ++--
docs/pip/compatibility.md | 2 +-
docs/pip/inspection.md | 4 ++--
docs/reference/installer.md | 7 ++++---
docs/reference/settings.md | 2 +-
docs/reference/troubleshooting/build-failures.md | 2 +-
.../troubleshooting/reproducible-examples.md | 6 +++---
15 files changed, 27 insertions(+), 26 deletions(-)
diff --git a/docs/concepts/projects/config.md b/docs/concepts/projects/config.md
index de281bee3..f9d33ed90 100644
--- a/docs/concepts/projects/config.md
+++ b/docs/concepts/projects/config.md
@@ -124,7 +124,7 @@ with the default build system.
Build systems are used to power the following features:
- Including or excluding files from distributions
-- Editable install behavior
+- Editable installation behavior
- Dynamic project metadata
- Compilation of native code
- Vendoring shared libraries
diff --git a/docs/concepts/projects/sync.md b/docs/concepts/projects/sync.md
index a15549bd9..92cb24be8 100644
--- a/docs/concepts/projects/sync.md
+++ b/docs/concepts/projects/sync.md
@@ -202,7 +202,7 @@ while building a Docker image. `uv sync` has several flags for this purpose.
- `--no-install-workspace`: Do not install any workspace members, including the root project
- `--no-install-package `: Do not install the given package(s)
-When these options are used, all of the dependencies of the target are still installed. For example,
+When these options are used, all the dependencies of the target are still installed. For example,
`--no-install-project` will omit the _project_ but not any of its dependencies.
If used improperly, these flags can result in a broken environment since a package can be missing
diff --git a/docs/concepts/projects/workspaces.md b/docs/concepts/projects/workspaces.md
index 99031653b..942cea8c2 100644
--- a/docs/concepts/projects/workspaces.md
+++ b/docs/concepts/projects/workspaces.md
@@ -50,7 +50,7 @@ the workspace context.
Every workspace needs a root, which is _also_ a workspace member. In the above example, `albatross`
is the workspace root, and the workspace members include all projects under the `packages`
-directory, with the exception of `seeds`.
+directory, except `seeds`.
By default, `uv run` and `uv sync` operates on the workspace root. For example, in the above
example, `uv run` and `uv run --package albatross` would be equivalent, while
diff --git a/docs/concepts/python-versions.md b/docs/concepts/python-versions.md
index 016d9e00d..0d409ff50 100644
--- a/docs/concepts/python-versions.md
+++ b/docs/concepts/python-versions.md
@@ -64,8 +64,8 @@ A global `.python-version` file can be created in the user configuration directo
Discovery of `.python-version` files can be disabled with `--no-config`.
-uv will not search for `.python-version` files beyond project or workspace boundaries (with the
-exception of the user configuration directory).
+uv will not search for `.python-version` files beyond project or workspace boundaries (except the
+user configuration directory).
## Installing a Python version
@@ -106,13 +106,13 @@ To install a specific implementation:
$ uv python install pypy
```
-All of the [Python version request](#requesting-a-version) formats are supported except those that
-are used for requesting local interpreters such as a file path.
+All the [Python version request](#requesting-a-version) formats are supported except those that are
+used for requesting local interpreters such as a file path.
By default `uv python install` will verify that a managed Python version is installed or install the
latest version. If a `.python-version` file is present, uv will install the Python version listed in
the file. A project that requires multiple Python versions may define a `.python-versions` file. If
-present, uv will install all of the Python versions listed in the file.
+present, uv will install all the Python versions listed in the file.
!!! important
@@ -341,7 +341,7 @@ The implementations may be requested with either the long or short name:
- PyPy: `pypy`, `pp`
- GraalPy: `graalpy`, `gp`
-Implementation name requests are not case sensitive.
+Implementation name requests are not case-sensitive.
See the [Python version request](#requesting-a-version) documentation for more details on the
supported formats.
diff --git a/docs/concepts/resolution.md b/docs/concepts/resolution.md
index 3fad45adb..ec28d71a3 100644
--- a/docs/concepts/resolution.md
+++ b/docs/concepts/resolution.md
@@ -300,7 +300,7 @@ If dependency resolution fails due to a transitive pre-release, uv will prompt u
Alternatively, the transitive dependency can be added as a [constraint](#dependency-constraints) or
direct dependency (i.e. in `requirements.in` or `pyproject.toml`) with a pre-release version
-specifier (e.g., `flask>=2.0.0rc1`) to opt-in to pre-release support for that specific dependency.
+specifier (e.g., `flask>=2.0.0rc1`) to opt in to pre-release support for that specific dependency.
Pre-releases are
[notoriously difficult](https://pubgrub-rs-guide.netlify.app/limitations/prerelease_versions) to
diff --git a/docs/guides/integration/aws-lambda.md b/docs/guides/integration/aws-lambda.md
index 0f07e9ca2..2df48b1b9 100644
--- a/docs/guides/integration/aws-lambda.md
+++ b/docs/guides/integration/aws-lambda.md
@@ -256,7 +256,7 @@ For details, see the
### Workspace support
If a project includes local dependencies (e.g., via
-[Workspaces](../../concepts/projects/workspaces.md), those too must be included in the deployment
+[Workspaces](../../concepts/projects/workspaces.md)), those too must be included in the deployment
package.
We'll start by extending the above example to include a dependency on a locally-developed library
diff --git a/docs/guides/integration/docker.md b/docs/guides/integration/docker.md
index ba004b3a0..c825d6d7a 100644
--- a/docs/guides/integration/docker.md
+++ b/docs/guides/integration/docker.md
@@ -530,7 +530,7 @@ REPO PREDICATE_TYPE WORKFLOW
astral-sh/uv https://slsa.dev/provenance/v1 .github/workflows/build-docker.yml@refs/heads/main
```
-This tells you that the specific Docker image was built by the official uv Github release workflow
+This tells you that the specific Docker image was built by the official uv GitHub release workflow
and hasn't been tampered with since.
GitHub attestations build on the [sigstore.dev infrastructure](https://www.sigstore.dev/). As such
diff --git a/docs/guides/package.md b/docs/guides/package.md
index a5437769a..0914d5750 100644
--- a/docs/guides/package.md
+++ b/docs/guides/package.md
@@ -93,7 +93,7 @@ explicit = true
Even though `uv publish` retries failed uploads, it can happen that publishing fails in the middle,
with some files uploaded and some files still missing. With PyPI, you can retry the exact same
command, existing identical files will be ignored. With other registries, use
-`--check-url ` with the index URL (not the publish URL) the packages belong to. When
+`--check-url ` with the index URL (not the publishing URL) the packages belong to. When
using `--index`, the index URL is used as check URL. uv will skip uploading files that are identical
to files in the registry, and it will also handle raced parallel uploads. Note that existing files
need to match exactly with those previously uploaded to the registry, this avoids accidentally
diff --git a/docs/guides/tools.md b/docs/guides/tools.md
index 627038daf..b281b89b2 100644
--- a/docs/guides/tools.md
+++ b/docs/guides/tools.md
@@ -239,7 +239,7 @@ $ uv tool upgrade --all
## Requesting Python versions
-By default, uv will use your default Python interpreter (the first it finds) when when running,
+By default, uv will use your default Python interpreter (the first it finds) when running,
installing, or upgrading tools. You can specify the Python interpreter to use with the `--python`
option.
@@ -262,7 +262,7 @@ $ uv tool upgrade --python 3.10 ruff
```
For more details on requesting Python versions, see the
-[Python version](../concepts/python-versions.md#requesting-a-version) concept page..
+[Python version](../concepts/python-versions.md#requesting-a-version) concept page.
## Legacy Windows Scripts
diff --git a/docs/pip/compatibility.md b/docs/pip/compatibility.md
index 30c14827d..5719c2fcc 100644
--- a/docs/pip/compatibility.md
+++ b/docs/pip/compatibility.md
@@ -400,7 +400,7 @@ the `subprocess` option is supported.
Unlike `pip`, uv does not enable keyring authentication by default.
-Unlike `pip`, uv does not wait until a request returns a HTTP 401 before searching for
+Unlike `pip`, uv does not wait until a request returns an HTTP 401 before searching for
authentication. uv attaches authentication to all requests for hosts with credentials available.
## `egg` support
diff --git a/docs/pip/inspection.md b/docs/pip/inspection.md
index de2bea15b..af34097e8 100644
--- a/docs/pip/inspection.md
+++ b/docs/pip/inspection.md
@@ -2,7 +2,7 @@
## Listing installed packages
-To list all of the packages in the environment:
+To list all the packages in the environment:
```console
$ uv pip list
@@ -14,7 +14,7 @@ To list the packages in a JSON format:
$ uv pip list --format json
```
-To list all of the packages in the environment in a `requirements.txt` format:
+To list all the packages in the environment in a `requirements.txt` format:
```console
$ uv pip freeze
diff --git a/docs/reference/installer.md b/docs/reference/installer.md
index 8db77ba5d..b6bb34df9 100644
--- a/docs/reference/installer.md
+++ b/docs/reference/installer.md
@@ -1,6 +1,6 @@
# The uv installer
-## Changing the install path
+## Changing the installation path
By default, uv is installed to `~/.local/bin`. If `XDG_BIN_HOME` is set, it will be used instead.
Similarly, if `XDG_DATA_HOME` is set, the target directory will be inferred as
@@ -43,10 +43,11 @@ $ curl -LsSf https://astral.sh/uv/install.sh | env UV_UNMANAGED_INSTALL="/custom
The use of `UV_UNMANAGED_INSTALL` will also disable self-updates (via `uv self update`).
-## Passing options to the install script
+## Passing options to the installation script
Using environment variables is recommended because they are consistent across platforms. However,
-options can be passed directly to the install script. For example, to see the available options:
+options can be passed directly to the installation script. For example, to see the available
+options:
```console
$ curl -LsSf https://astral.sh/uv/install.sh | sh -s -- --help
diff --git a/docs/reference/settings.md b/docs/reference/settings.md
index b48396680..54fabe83b 100644
--- a/docs/reference/settings.md
+++ b/docs/reference/settings.md
@@ -3371,7 +3371,7 @@ must either be pinned to exact versions (e.g., `==1.0.0`), or be specified via d
Hash-checking mode introduces a number of additional constraints:
- Git dependencies are not supported.
-- Editable installs are not supported.
+- Editable installations are not supported.
- Local dependencies are not supported, unless they point to a specific wheel (`.whl`) or
source archive (`.zip`, `.tar.gz`), as opposed to a directory.
diff --git a/docs/reference/troubleshooting/build-failures.md b/docs/reference/troubleshooting/build-failures.md
index 6b93737f2..e83475606 100644
--- a/docs/reference/troubleshooting/build-failures.md
+++ b/docs/reference/troubleshooting/build-failures.md
@@ -105,7 +105,7 @@ wheel exists in the index, uv tries to build the source distribution.
You can check which wheels exist for a PyPI project under “Download Files”, e.g.
https://pypi.org/project/numpy/2.1.1.md#files. Wheels with `...-py3-none-any.whl` filenames work
everywhere, others have the operating system and platform in the filename. In the linked `numpy`
-example, you can see that there are pre-built distributions for Python 3.10 to 3.13 on MacOS, Linux
+example, you can see that there are pre-built distributions for Python 3.10 to 3.13 on macOS, Linux
and Windows.
## Common build failures
diff --git a/docs/reference/troubleshooting/reproducible-examples.md b/docs/reference/troubleshooting/reproducible-examples.md
index 0f2044305..5403ce2d5 100644
--- a/docs/reference/troubleshooting/reproducible-examples.md
+++ b/docs/reference/troubleshooting/reproducible-examples.md
@@ -9,7 +9,7 @@ a maintainer much longer to identify the root cause of the problem.
## How to write a reproducible example
-When writing a reproducible example, the goal is to provide all of the context necessary for someone
+When writing a reproducible example, the goal is to provide all the context necessary for someone
else to reproduce your example. This includes:
- The platform you're using (e.g., the operating system and architecture)
@@ -124,8 +124,8 @@ In addition to the script, include _verbose_ logs (i.e., with the `-v` flag) of
complete error message.
Whenever a script relies on external state, be sure to share that information. For example, if you
-wrote the script on Windows and it uses a Python version that you installed with `choco` and runs on
-PowerShell 6.2, please include that in the report.
+wrote the script on Windows, and it uses a Python version that you installed with `choco` and runs
+on PowerShell 6.2, please include that in the report.
### Git repository
From 21986c3fc9791cac0ad81ee87613e4dcdc72fd95 Mon Sep 17 00:00:00 2001
From: Zanie Blue
Date: Tue, 10 Jun 2025 16:54:42 -0500
Subject: [PATCH 051/250] Bump timeout on Python download release fetch
(#13955)
Failing with a 504 at
https://github.com/astral-sh/uv/actions/runs/15569590779
Successful at
https://github.com/astral-sh/uv/actions/runs/15570896150/job/43846260252
---
crates/uv-python/fetch-download-metadata.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/crates/uv-python/fetch-download-metadata.py b/crates/uv-python/fetch-download-metadata.py
index f3976ee5f..0b5d9caec 100755
--- a/crates/uv-python/fetch-download-metadata.py
+++ b/crates/uv-python/fetch-download-metadata.py
@@ -729,7 +729,7 @@ async def find() -> None:
}
if token:
headers["Authorization"] = "Bearer " + token
- client = httpx.AsyncClient(follow_redirects=True, headers=headers, timeout=15)
+ client = httpx.AsyncClient(follow_redirects=True, headers=headers, timeout=60)
finders = [
CPythonFinder(client),
From 4c877b7dc6f30d86bda383ffc6e67cab0e3bdafb Mon Sep 17 00:00:00 2001
From: Zanie Blue
Date: Tue, 10 Jun 2025 17:03:01 -0500
Subject: [PATCH 052/250] Fix generated file change (#13957)
Regressed in https://github.com/astral-sh/uv/pull/13620
ref failure at
https://github.com/astral-sh/uv/actions/runs/15570991822/job/43846587900?pr=13956
---
crates/uv-cli/src/lib.rs | 6 +++---
crates/uv-settings/src/settings.rs | 2 +-
docs/reference/cli.md | 6 +++---
uv.schema.json | 2 +-
4 files changed, 8 insertions(+), 8 deletions(-)
diff --git a/crates/uv-cli/src/lib.rs b/crates/uv-cli/src/lib.rs
index da4524aaa..63e87367c 100644
--- a/crates/uv-cli/src/lib.rs
+++ b/crates/uv-cli/src/lib.rs
@@ -1491,7 +1491,7 @@ pub struct PipSyncArgs {
/// Hash-checking mode introduces a number of additional constraints:
///
/// - Git dependencies are not supported.
- /// - Editable installs are not supported.
+ /// - Editable installations are not supported.
/// - Local dependencies are not supported, unless they point to a specific wheel (`.whl`) or
/// source archive (`.zip`, `.tar.gz`), as opposed to a directory.
#[arg(
@@ -1801,7 +1801,7 @@ pub struct PipInstallArgs {
/// Hash-checking mode introduces a number of additional constraints:
///
/// - Git dependencies are not supported.
- /// - Editable installs are not supported.
+ /// - Editable installations are not supported.
/// - Local dependencies are not supported, unless they point to a specific wheel (`.whl`) or
/// source archive (`.zip`, `.tar.gz`), as opposed to a directory.
#[arg(
@@ -2471,7 +2471,7 @@ pub struct BuildArgs {
/// Hash-checking mode introduces a number of additional constraints:
///
/// - Git dependencies are not supported.
- /// - Editable installs are not supported.
+ /// - Editable installations are not supported.
/// - Local dependencies are not supported, unless they point to a specific wheel (`.whl`) or
/// source archive (`.zip`, `.tar.gz`), as opposed to a directory.
#[arg(
diff --git a/crates/uv-settings/src/settings.rs b/crates/uv-settings/src/settings.rs
index 7c2406d0c..ff6d39995 100644
--- a/crates/uv-settings/src/settings.rs
+++ b/crates/uv-settings/src/settings.rs
@@ -1495,7 +1495,7 @@ pub struct PipOptions {
/// Hash-checking mode introduces a number of additional constraints:
///
/// - Git dependencies are not supported.
- /// - Editable installs are not supported.
+ /// - Editable installations are not supported.
/// - Local dependencies are not supported, unless they point to a specific wheel (`.whl`) or
/// source archive (`.zip`, `.tar.gz`), as opposed to a directory.
#[option(
diff --git a/docs/reference/cli.md b/docs/reference/cli.md
index d89d4498e..aef894368 100644
--- a/docs/reference/cli.md
+++ b/docs/reference/cli.md
@@ -3550,7 +3550,7 @@ be used with caution, as it can modify the system Python installation.
When --require-hashes
is enabled, all requirements must include a hash or set of hashes, and all requirements must either be pinned to exact versions (e.g., ==1.0.0
), or be specified via direct URL.
Hash-checking mode introduces a number of additional constraints:
-Git dependencies are not supported. - Editable installs are not supported. - Local dependencies are not supported, unless they point to a specific wheel (.whl
) or source archive (.zip
, .tar.gz
), as opposed to a directory.
+Git dependencies are not supported. - Editable installations are not supported. - Local dependencies are not supported, unless they point to a specific wheel (.whl
) or source archive (.zip
, .tar.gz
), as opposed to a directory.
May also be set with the UV_REQUIRE_HASHES
environment variable.
--strict
Validate the Python environment after completing the installation, to detect packages with missing dependencies or other issues
--system
Install packages into the system Python environment.
@@ -3814,7 +3814,7 @@ should be used with caution, as it can modify the system Python installation.When --require-hashes
is enabled, all requirements must include a hash or set of hashes, and all requirements must either be pinned to exact versions (e.g., ==1.0.0
), or be specified via direct URL.
Hash-checking mode introduces a number of additional constraints:
-Git dependencies are not supported. - Editable installs are not supported. - Local dependencies are not supported, unless they point to a specific wheel (.whl
) or source archive (.zip
, .tar.gz
), as opposed to a directory.
+Git dependencies are not supported. - Editable installations are not supported. - Local dependencies are not supported, unless they point to a specific wheel (.whl
) or source archive (.zip
, .tar.gz
), as opposed to a directory.
May also be set with the UV_REQUIRE_HASHES
environment variable.
--requirements
, --requirement
, -r
requirements Install all packages listed in the given requirements.txt
or pylock.toml
files.
If a pyproject.toml
, setup.py
, or setup.cfg
file is provided, uv will extract the requirements for the relevant project.
@@ -4676,7 +4676,7 @@ the platform.
When --require-hashes
is enabled, all requirements must include a hash or set of hashes, and all requirements must either be pinned to exact versions (e.g., ==1.0.0
), or be specified via direct URL.
Hash-checking mode introduces a number of additional constraints:
-Git dependencies are not supported. - Editable installs are not supported. - Local dependencies are not supported, unless they point to a specific wheel (.whl
) or source archive (.zip
, .tar.gz
), as opposed to a directory.
+Git dependencies are not supported. - Editable installations are not supported. - Local dependencies are not supported, unless they point to a specific wheel (.whl
) or source archive (.zip
, .tar.gz
), as opposed to a directory.
May also be set with the UV_REQUIRE_HASHES
environment variable.
--resolution
resolution The strategy to use when selecting between the different compatible versions for a given package requirement.
By default, uv will use the latest compatible version of each package (highest
).
diff --git a/uv.schema.json b/uv.schema.json
index 19a6bf4bd..d2ca69f20 100644
--- a/uv.schema.json
+++ b/uv.schema.json
@@ -1498,7 +1498,7 @@
}
},
"require-hashes": {
- "description": "Require a matching hash for each requirement.\n\nHash-checking mode is all or nothing. If enabled, _all_ requirements must be provided with a corresponding hash or set of hashes. Additionally, if enabled, _all_ requirements must either be pinned to exact versions (e.g., `==1.0.0`), or be specified via direct URL.\n\nHash-checking mode introduces a number of additional constraints:\n\n- Git dependencies are not supported. - Editable installs are not supported. - Local dependencies are not supported, unless they point to a specific wheel (`.whl`) or source archive (`.zip`, `.tar.gz`), as opposed to a directory.",
+ "description": "Require a matching hash for each requirement.\n\nHash-checking mode is all or nothing. If enabled, _all_ requirements must be provided with a corresponding hash or set of hashes. Additionally, if enabled, _all_ requirements must either be pinned to exact versions (e.g., `==1.0.0`), or be specified via direct URL.\n\nHash-checking mode introduces a number of additional constraints:\n\n- Git dependencies are not supported. - Editable installations are not supported. - Local dependencies are not supported, unless they point to a specific wheel (`.whl`) or source archive (`.zip`, `.tar.gz`), as opposed to a directory.",
"type": [
"boolean",
"null"
From 357fc91c3c6b2f3881ce0db2dc346055a6ae5696 Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
<41898282+github-actions[bot]@users.noreply.github.com>
Date: Tue, 10 Jun 2025 21:13:32 -0500
Subject: [PATCH 053/250] Sync latest Python releases (#13956)
Automated update for Python releases.
Co-authored-by: zanieb <2586601+zanieb@users.noreply.github.com>
---
.../uv-dev/src/generate_sysconfig_mappings.rs | 4 +-
crates/uv-python/download-metadata.json | 1512 +++++++++++++----
.../src/sysconfig/generated_mappings.rs | 2 +-
crates/uv/tests/it/python_install.rs | 10 +-
4 files changed, 1164 insertions(+), 364 deletions(-)
diff --git a/crates/uv-dev/src/generate_sysconfig_mappings.rs b/crates/uv-dev/src/generate_sysconfig_mappings.rs
index a44b8ee86..275c8aa5e 100644
--- a/crates/uv-dev/src/generate_sysconfig_mappings.rs
+++ b/crates/uv-dev/src/generate_sysconfig_mappings.rs
@@ -11,7 +11,7 @@ use crate::ROOT_DIR;
use crate::generate_all::Mode;
/// Contains current supported targets
-const TARGETS_YML_URL: &str = "https://raw.githubusercontent.com/astral-sh/python-build-standalone/refs/tags/20250604/cpython-unix/targets.yml";
+const TARGETS_YML_URL: &str = "https://raw.githubusercontent.com/astral-sh/python-build-standalone/refs/tags/20250610/cpython-unix/targets.yml";
#[derive(clap::Args)]
pub(crate) struct Args {
@@ -130,7 +130,7 @@ async fn generate() -> Result {
output.push_str("//! DO NOT EDIT\n");
output.push_str("//!\n");
output.push_str("//! Generated with `cargo run dev generate-sysconfig-metadata`\n");
- output.push_str("//! Targets from \n");
+ output.push_str("//! Targets from \n");
output.push_str("//!\n");
// Disable clippy/fmt
diff --git a/crates/uv-python/download-metadata.json b/crates/uv-python/download-metadata.json
index 345fe23fb..e38079e7c 100644
--- a/crates/uv-python/download-metadata.json
+++ b/crates/uv-python/download-metadata.json
@@ -1,4 +1,804 @@
{
+ "cpython-3.14.0b2-darwin-aarch64-none": {
+ "name": "cpython",
+ "arch": {
+ "family": "aarch64",
+ "variant": null
+ },
+ "os": "darwin",
+ "libc": "none",
+ "major": 3,
+ "minor": 14,
+ "patch": 0,
+ "prerelease": "b2",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.14.0b2%2B20250610-aarch64-apple-darwin-install_only_stripped.tar.gz",
+ "sha256": "a8c33866ec30f1be85a7a6e8c544d2a093163b78505a9a66c8a1ca153cffe3c4",
+ "variant": null
+ },
+ "cpython-3.14.0b2-darwin-x86_64-none": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": null
+ },
+ "os": "darwin",
+ "libc": "none",
+ "major": 3,
+ "minor": 14,
+ "patch": 0,
+ "prerelease": "b2",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.14.0b2%2B20250610-x86_64-apple-darwin-install_only_stripped.tar.gz",
+ "sha256": "d15e3d85ab6a313da3584eff6965629020c6e3f66e54f0b938363a9282d73404",
+ "variant": null
+ },
+ "cpython-3.14.0b2-linux-aarch64-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "aarch64",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 14,
+ "patch": 0,
+ "prerelease": "b2",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.14.0b2%2B20250610-aarch64-unknown-linux-gnu-install_only_stripped.tar.gz",
+ "sha256": "416c51fc07c44fd426f585c3fbffb0dc8231e4bb69817249d25cdcc9a5eab0c4",
+ "variant": null
+ },
+ "cpython-3.14.0b2-linux-armv7-gnueabi": {
+ "name": "cpython",
+ "arch": {
+ "family": "armv7",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "gnueabi",
+ "major": 3,
+ "minor": 14,
+ "patch": 0,
+ "prerelease": "b2",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.14.0b2%2B20250610-armv7-unknown-linux-gnueabi-install_only_stripped.tar.gz",
+ "sha256": "3280a2368269494de4e3ef995a79440cb071294bc8c36db725da94175aaf5acd",
+ "variant": null
+ },
+ "cpython-3.14.0b2-linux-armv7-gnueabihf": {
+ "name": "cpython",
+ "arch": {
+ "family": "armv7",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "gnueabihf",
+ "major": 3,
+ "minor": 14,
+ "patch": 0,
+ "prerelease": "b2",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.14.0b2%2B20250610-armv7-unknown-linux-gnueabihf-install_only_stripped.tar.gz",
+ "sha256": "5ac10721018963027824b65eae594751a726bc587dc429f4e8e341101782c5e4",
+ "variant": null
+ },
+ "cpython-3.14.0b2-linux-powerpc64le-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "powerpc64le",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 14,
+ "patch": 0,
+ "prerelease": "b2",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.14.0b2%2B20250610-ppc64le-unknown-linux-gnu-install_only_stripped.tar.gz",
+ "sha256": "988a72361f6fbc1158e7b4946d76f734ca41dbe5c8dda1bfd93fee526cf57aa5",
+ "variant": null
+ },
+ "cpython-3.14.0b2-linux-riscv64-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "riscv64",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 14,
+ "patch": 0,
+ "prerelease": "b2",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.14.0b2%2B20250610-riscv64-unknown-linux-gnu-install_only_stripped.tar.gz",
+ "sha256": "a4dacf32e4988be1a211aa0b50b3b03fb449f7ace4d79f7247526aa051d495fa",
+ "variant": null
+ },
+ "cpython-3.14.0b2-linux-s390x-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "s390x",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 14,
+ "patch": 0,
+ "prerelease": "b2",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.14.0b2%2B20250610-s390x-unknown-linux-gnu-install_only_stripped.tar.gz",
+ "sha256": "5d2f125769c8d5ab8a6d54bdb61cc5a03fe0cb95e62a278bfa14d131d338282b",
+ "variant": null
+ },
+ "cpython-3.14.0b2-linux-x86_64-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 14,
+ "patch": 0,
+ "prerelease": "b2",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.14.0b2%2B20250610-x86_64-unknown-linux-gnu-install_only_stripped.tar.gz",
+ "sha256": "6dfb3f4106f810daefc0476f90edf3a810c21ca03fdaf13bf795e65b52db14b0",
+ "variant": null
+ },
+ "cpython-3.14.0b2-linux-x86_64-musl": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "musl",
+ "major": 3,
+ "minor": 14,
+ "patch": 0,
+ "prerelease": "b2",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.14.0b2%2B20250610-x86_64-unknown-linux-musl-install_only_stripped.tar.gz",
+ "sha256": "3643a3abf4b22c7c57057e6117f72825c43f12d733415c128e06d6d0b4464b4a",
+ "variant": null
+ },
+ "cpython-3.14.0b2-linux-x86_64_v2-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": "v2"
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 14,
+ "patch": 0,
+ "prerelease": "b2",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.14.0b2%2B20250610-x86_64_v2-unknown-linux-gnu-install_only_stripped.tar.gz",
+ "sha256": "fd1511644fc9213360c301846c7957a4dd514eb254b84642e8d09b6a4f02a833",
+ "variant": null
+ },
+ "cpython-3.14.0b2-linux-x86_64_v2-musl": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": "v2"
+ },
+ "os": "linux",
+ "libc": "musl",
+ "major": 3,
+ "minor": 14,
+ "patch": 0,
+ "prerelease": "b2",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.14.0b2%2B20250610-x86_64_v2-unknown-linux-musl-install_only_stripped.tar.gz",
+ "sha256": "9f9aafa46a3c745cebca7180809542b823c30821da7edbb19b4cebb357544f52",
+ "variant": null
+ },
+ "cpython-3.14.0b2-linux-x86_64_v3-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": "v3"
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 14,
+ "patch": 0,
+ "prerelease": "b2",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.14.0b2%2B20250610-x86_64_v3-unknown-linux-gnu-install_only_stripped.tar.gz",
+ "sha256": "80e0e5fa4c0efb747680b2a23a694bbea3990d9ff0d9aa74ccbac1c7ad7106b8",
+ "variant": null
+ },
+ "cpython-3.14.0b2-linux-x86_64_v3-musl": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": "v3"
+ },
+ "os": "linux",
+ "libc": "musl",
+ "major": 3,
+ "minor": 14,
+ "patch": 0,
+ "prerelease": "b2",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.14.0b2%2B20250610-x86_64_v3-unknown-linux-musl-install_only_stripped.tar.gz",
+ "sha256": "12b3ba1ea38c24fb7bde38af04cb2cf854b94f93e868a8ebb5b0282342cd6bc2",
+ "variant": null
+ },
+ "cpython-3.14.0b2-linux-x86_64_v4-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": "v4"
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 14,
+ "patch": 0,
+ "prerelease": "b2",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.14.0b2%2B20250610-x86_64_v4-unknown-linux-gnu-install_only_stripped.tar.gz",
+ "sha256": "b5be73f5a9cb7020add163a740708e0a0225e1d6aabdea15486de9572f03c891",
+ "variant": null
+ },
+ "cpython-3.14.0b2-linux-x86_64_v4-musl": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": "v4"
+ },
+ "os": "linux",
+ "libc": "musl",
+ "major": 3,
+ "minor": 14,
+ "patch": 0,
+ "prerelease": "b2",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.14.0b2%2B20250610-x86_64_v4-unknown-linux-musl-install_only_stripped.tar.gz",
+ "sha256": "16ed53c7a2336a4f61ce7f239dd6b0a70009fb7f58ae881002290489f4eae041",
+ "variant": null
+ },
+ "cpython-3.14.0b2-windows-i686-none": {
+ "name": "cpython",
+ "arch": {
+ "family": "i686",
+ "variant": null
+ },
+ "os": "windows",
+ "libc": "none",
+ "major": 3,
+ "minor": 14,
+ "patch": 0,
+ "prerelease": "b2",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.14.0b2%2B20250610-i686-pc-windows-msvc-install_only_stripped.tar.gz",
+ "sha256": "84ca22b84c5680a410420a80ac7b964c0132cc23756a6f1fff09e8643fd51e93",
+ "variant": null
+ },
+ "cpython-3.14.0b2-windows-x86_64-none": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": null
+ },
+ "os": "windows",
+ "libc": "none",
+ "major": 3,
+ "minor": 14,
+ "patch": 0,
+ "prerelease": "b2",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.14.0b2%2B20250610-x86_64-pc-windows-msvc-install_only_stripped.tar.gz",
+ "sha256": "619ad112472f4366bfd8183d53cf0fabb7f3e7b3d87bded0291c874e1cebb50f",
+ "variant": null
+ },
+ "cpython-3.14.0b2+freethreaded-darwin-aarch64-none": {
+ "name": "cpython",
+ "arch": {
+ "family": "aarch64",
+ "variant": null
+ },
+ "os": "darwin",
+ "libc": "none",
+ "major": 3,
+ "minor": 14,
+ "patch": 0,
+ "prerelease": "b2",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.14.0b2%2B20250610-aarch64-apple-darwin-freethreaded%2Bpgo%2Blto-full.tar.zst",
+ "sha256": "af0f34aa0dcd02bd3d960a1572a1ed8a17d55b373a22866f05041aaf16f8607d",
+ "variant": "freethreaded"
+ },
+ "cpython-3.14.0b2+freethreaded-darwin-x86_64-none": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": null
+ },
+ "os": "darwin",
+ "libc": "none",
+ "major": 3,
+ "minor": 14,
+ "patch": 0,
+ "prerelease": "b2",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.14.0b2%2B20250610-x86_64-apple-darwin-freethreaded%2Bpgo%2Blto-full.tar.zst",
+ "sha256": "dd27d519cf2a04917cb566366d6539477791d1b2f1fb42037d9179f469ff55a9",
+ "variant": "freethreaded"
+ },
+ "cpython-3.14.0b2+freethreaded-linux-aarch64-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "aarch64",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 14,
+ "patch": 0,
+ "prerelease": "b2",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.14.0b2%2B20250610-aarch64-unknown-linux-gnu-freethreaded%2Blto-full.tar.zst",
+ "sha256": "e76c7ab98e1c0f86a6996d1ec775ba8497bf46aa8ffa8c7b0f2e761f37305329",
+ "variant": "freethreaded"
+ },
+ "cpython-3.14.0b2+freethreaded-linux-armv7-gnueabi": {
+ "name": "cpython",
+ "arch": {
+ "family": "armv7",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "gnueabi",
+ "major": 3,
+ "minor": 14,
+ "patch": 0,
+ "prerelease": "b2",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.14.0b2%2B20250610-armv7-unknown-linux-gnueabi-freethreaded%2Blto-full.tar.zst",
+ "sha256": "388cdd7955905ab2b5692a17d241f574807fab3b3816bedacf4e46dc66bae4ed",
+ "variant": "freethreaded"
+ },
+ "cpython-3.14.0b2+freethreaded-linux-armv7-gnueabihf": {
+ "name": "cpython",
+ "arch": {
+ "family": "armv7",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "gnueabihf",
+ "major": 3,
+ "minor": 14,
+ "patch": 0,
+ "prerelease": "b2",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.14.0b2%2B20250610-armv7-unknown-linux-gnueabihf-freethreaded%2Blto-full.tar.zst",
+ "sha256": "ef99dc727e810a2ae0629993e5c48c3b58bc13fded9c28ee896b83b71ea14daa",
+ "variant": "freethreaded"
+ },
+ "cpython-3.14.0b2+freethreaded-linux-powerpc64le-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "powerpc64le",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 14,
+ "patch": 0,
+ "prerelease": "b2",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.14.0b2%2B20250610-ppc64le-unknown-linux-gnu-freethreaded%2Blto-full.tar.zst",
+ "sha256": "df2ae00827406e247f1aaaec76ffc7963b909c81075fc9940eee1ea9f753dd16",
+ "variant": "freethreaded"
+ },
+ "cpython-3.14.0b2+freethreaded-linux-riscv64-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "riscv64",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 14,
+ "patch": 0,
+ "prerelease": "b2",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.14.0b2%2B20250610-riscv64-unknown-linux-gnu-freethreaded%2Blto-full.tar.zst",
+ "sha256": "09e347cb5f29e0eafd1eba73105ea9d853184b55fbaf4746cebec217430d6db5",
+ "variant": "freethreaded"
+ },
+ "cpython-3.14.0b2+freethreaded-linux-s390x-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "s390x",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 14,
+ "patch": 0,
+ "prerelease": "b2",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.14.0b2%2B20250610-s390x-unknown-linux-gnu-freethreaded%2Blto-full.tar.zst",
+ "sha256": "f911605eee0eb7845a69acaf8bfb2e1811c76e9a5e3980d97fae93135df4b773",
+ "variant": "freethreaded"
+ },
+ "cpython-3.14.0b2+freethreaded-linux-x86_64-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 14,
+ "patch": 0,
+ "prerelease": "b2",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.14.0b2%2B20250610-x86_64-unknown-linux-gnu-freethreaded%2Bpgo%2Blto-full.tar.zst",
+ "sha256": "abd60d3a302e9d9c32ec78581fb3a9903079c56ec7a949ce658a7950423f350a",
+ "variant": "freethreaded"
+ },
+ "cpython-3.14.0b2+freethreaded-linux-x86_64-musl": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "musl",
+ "major": 3,
+ "minor": 14,
+ "patch": 0,
+ "prerelease": "b2",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.14.0b2%2B20250610-x86_64-unknown-linux-musl-freethreaded%2Blto-full.tar.zst",
+ "sha256": "583c07b86df5084a58a07c8c51b03e63e8547410cee974317f7328f9529cd3c7",
+ "variant": "freethreaded"
+ },
+ "cpython-3.14.0b2+freethreaded-linux-x86_64_v2-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": "v2"
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 14,
+ "patch": 0,
+ "prerelease": "b2",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.14.0b2%2B20250610-x86_64_v2-unknown-linux-gnu-freethreaded%2Bpgo%2Blto-full.tar.zst",
+ "sha256": "ef93e98a7136d402c44596c8a3709148e3de980bb8d3d7d233aef70afc25c099",
+ "variant": "freethreaded"
+ },
+ "cpython-3.14.0b2+freethreaded-linux-x86_64_v2-musl": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": "v2"
+ },
+ "os": "linux",
+ "libc": "musl",
+ "major": 3,
+ "minor": 14,
+ "patch": 0,
+ "prerelease": "b2",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.14.0b2%2B20250610-x86_64_v2-unknown-linux-musl-freethreaded%2Blto-full.tar.zst",
+ "sha256": "c372f4c5074af46c1c07ab320ba33865934c2fd4b16c4c20b9828da1a6de230d",
+ "variant": "freethreaded"
+ },
+ "cpython-3.14.0b2+freethreaded-linux-x86_64_v3-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": "v3"
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 14,
+ "patch": 0,
+ "prerelease": "b2",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.14.0b2%2B20250610-x86_64_v3-unknown-linux-gnu-freethreaded%2Bpgo%2Blto-full.tar.zst",
+ "sha256": "ae09251a238cc9ad35b570df95e5e341e6caed5b7bb18fb4db35bb4bb4bc304c",
+ "variant": "freethreaded"
+ },
+ "cpython-3.14.0b2+freethreaded-linux-x86_64_v3-musl": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": "v3"
+ },
+ "os": "linux",
+ "libc": "musl",
+ "major": 3,
+ "minor": 14,
+ "patch": 0,
+ "prerelease": "b2",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.14.0b2%2B20250610-x86_64_v3-unknown-linux-musl-freethreaded%2Blto-full.tar.zst",
+ "sha256": "e27177b32ba20f394f995f357ed7ff50fbf10e86bf9a0feced03bc7cff4d00c0",
+ "variant": "freethreaded"
+ },
+ "cpython-3.14.0b2+freethreaded-linux-x86_64_v4-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": "v4"
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 14,
+ "patch": 0,
+ "prerelease": "b2",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.14.0b2%2B20250610-x86_64_v4-unknown-linux-gnu-freethreaded%2Bpgo%2Blto-full.tar.zst",
+ "sha256": "230c20b62891cf3bd2bc129b644dcfab44ce6d6983d76a4344d25ee67a789d3e",
+ "variant": "freethreaded"
+ },
+ "cpython-3.14.0b2+freethreaded-linux-x86_64_v4-musl": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": "v4"
+ },
+ "os": "linux",
+ "libc": "musl",
+ "major": 3,
+ "minor": 14,
+ "patch": 0,
+ "prerelease": "b2",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.14.0b2%2B20250610-x86_64_v4-unknown-linux-musl-freethreaded%2Blto-full.tar.zst",
+ "sha256": "c32c33090f73a7eb7adbc9d7005e8638a9c91c1a454addaf1ebb470c074ed61c",
+ "variant": "freethreaded"
+ },
+ "cpython-3.14.0b2+freethreaded-windows-i686-none": {
+ "name": "cpython",
+ "arch": {
+ "family": "i686",
+ "variant": null
+ },
+ "os": "windows",
+ "libc": "none",
+ "major": 3,
+ "minor": 14,
+ "patch": 0,
+ "prerelease": "b2",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.14.0b2%2B20250610-i686-pc-windows-msvc-freethreaded%2Bpgo-full.tar.zst",
+ "sha256": "0a6aa0bba4a2911b1bfcc845255b919e002029d8a65eda176285fdcc995a58f6",
+ "variant": "freethreaded"
+ },
+ "cpython-3.14.0b2+freethreaded-windows-x86_64-none": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": null
+ },
+ "os": "windows",
+ "libc": "none",
+ "major": 3,
+ "minor": 14,
+ "patch": 0,
+ "prerelease": "b2",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.14.0b2%2B20250610-x86_64-pc-windows-msvc-freethreaded%2Bpgo-full.tar.zst",
+ "sha256": "da966a17e434094d8f10b719d93c782d82eaf5207f2843cbaa58c3d91a8f0e32",
+ "variant": "freethreaded"
+ },
+ "cpython-3.14.0b2+debug-linux-aarch64-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "aarch64",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 14,
+ "patch": 0,
+ "prerelease": "b2",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.14.0b2%2B20250610-aarch64-unknown-linux-gnu-debug-full.tar.zst",
+ "sha256": "ac87b828aaec264e298a2a30c36dd712a69b88f7f961b82173ab94aee76c63df",
+ "variant": "debug"
+ },
+ "cpython-3.14.0b2+debug-linux-armv7-gnueabi": {
+ "name": "cpython",
+ "arch": {
+ "family": "armv7",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "gnueabi",
+ "major": 3,
+ "minor": 14,
+ "patch": 0,
+ "prerelease": "b2",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.14.0b2%2B20250610-armv7-unknown-linux-gnueabi-debug-full.tar.zst",
+ "sha256": "9fade8ee6350af9c8e26281b1b3b25291b4c8365308224c14f2c083a0c69000d",
+ "variant": "debug"
+ },
+ "cpython-3.14.0b2+debug-linux-armv7-gnueabihf": {
+ "name": "cpython",
+ "arch": {
+ "family": "armv7",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "gnueabihf",
+ "major": 3,
+ "minor": 14,
+ "patch": 0,
+ "prerelease": "b2",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.14.0b2%2B20250610-armv7-unknown-linux-gnueabihf-debug-full.tar.zst",
+ "sha256": "99bb72405f181eda7d2fedce7c03de91fc963f940f379009cb5189ab98fae5f6",
+ "variant": "debug"
+ },
+ "cpython-3.14.0b2+debug-linux-powerpc64le-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "powerpc64le",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 14,
+ "patch": 0,
+ "prerelease": "b2",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.14.0b2%2B20250610-ppc64le-unknown-linux-gnu-debug-full.tar.zst",
+ "sha256": "1217bd75def08059fa38e5e0751b24e538831acc3a2acc527c4b25ba0fba5c1f",
+ "variant": "debug"
+ },
+ "cpython-3.14.0b2+debug-linux-riscv64-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "riscv64",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 14,
+ "patch": 0,
+ "prerelease": "b2",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.14.0b2%2B20250610-riscv64-unknown-linux-gnu-debug-full.tar.zst",
+ "sha256": "f6ee5e186cd47f5eb8f6f57503cf67255f89e3f027dda2a029ccc74dec79ce9e",
+ "variant": "debug"
+ },
+ "cpython-3.14.0b2+debug-linux-s390x-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "s390x",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 14,
+ "patch": 0,
+ "prerelease": "b2",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.14.0b2%2B20250610-s390x-unknown-linux-gnu-debug-full.tar.zst",
+ "sha256": "9bcde85e8e71fe3a5d6daa40901e3f62afda224c4f5d26126911c13f4dcfd85c",
+ "variant": "debug"
+ },
+ "cpython-3.14.0b2+debug-linux-x86_64-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 14,
+ "patch": 0,
+ "prerelease": "b2",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.14.0b2%2B20250610-x86_64-unknown-linux-gnu-debug-full.tar.zst",
+ "sha256": "8a431c6ee8e6f40c0640010e4bd0c3c5d96250d0dbba71e160869edeb5bbd66e",
+ "variant": "debug"
+ },
+ "cpython-3.14.0b2+debug-linux-x86_64-musl": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": null
+ },
+ "os": "linux",
+ "libc": "musl",
+ "major": 3,
+ "minor": 14,
+ "patch": 0,
+ "prerelease": "b2",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.14.0b2%2B20250610-x86_64-unknown-linux-musl-debug-full.tar.zst",
+ "sha256": "06a3d89725c373f3d463658e75b01fe98f475ffee05d035c3518536820a400e8",
+ "variant": "debug"
+ },
+ "cpython-3.14.0b2+debug-linux-x86_64_v2-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": "v2"
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 14,
+ "patch": 0,
+ "prerelease": "b2",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.14.0b2%2B20250610-x86_64_v2-unknown-linux-gnu-debug-full.tar.zst",
+ "sha256": "5e990ea07a3869671d60381c4f8c955207e8c8ae6b5e3df28a2455429b65e408",
+ "variant": "debug"
+ },
+ "cpython-3.14.0b2+debug-linux-x86_64_v2-musl": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": "v2"
+ },
+ "os": "linux",
+ "libc": "musl",
+ "major": 3,
+ "minor": 14,
+ "patch": 0,
+ "prerelease": "b2",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.14.0b2%2B20250610-x86_64_v2-unknown-linux-musl-debug-full.tar.zst",
+ "sha256": "78ec83b100a6edb9b71a4b240be54b13b493df4ab450202bad6323638f77354b",
+ "variant": "debug"
+ },
+ "cpython-3.14.0b2+debug-linux-x86_64_v3-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": "v3"
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 14,
+ "patch": 0,
+ "prerelease": "b2",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.14.0b2%2B20250610-x86_64_v3-unknown-linux-gnu-debug-full.tar.zst",
+ "sha256": "348c933483d18baf43daa7780b07c36a22f243c0705240069392a92dba1901c0",
+ "variant": "debug"
+ },
+ "cpython-3.14.0b2+debug-linux-x86_64_v3-musl": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": "v3"
+ },
+ "os": "linux",
+ "libc": "musl",
+ "major": 3,
+ "minor": 14,
+ "patch": 0,
+ "prerelease": "b2",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.14.0b2%2B20250610-x86_64_v3-unknown-linux-musl-debug-full.tar.zst",
+ "sha256": "1c9eb2cd8603bef9187d66c6bce44a41915ca0315fa281db001f642e27d8ddcf",
+ "variant": "debug"
+ },
+ "cpython-3.14.0b2+debug-linux-x86_64_v4-gnu": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": "v4"
+ },
+ "os": "linux",
+ "libc": "gnu",
+ "major": 3,
+ "minor": 14,
+ "patch": 0,
+ "prerelease": "b2",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.14.0b2%2B20250610-x86_64_v4-unknown-linux-gnu-debug-full.tar.zst",
+ "sha256": "f6353386844720105ec8253caf07af6ec5ad0b027c9a96cba1327031ca2cc412",
+ "variant": "debug"
+ },
+ "cpython-3.14.0b2+debug-linux-x86_64_v4-musl": {
+ "name": "cpython",
+ "arch": {
+ "family": "x86_64",
+ "variant": "v4"
+ },
+ "os": "linux",
+ "libc": "musl",
+ "major": 3,
+ "minor": 14,
+ "patch": 0,
+ "prerelease": "b2",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.14.0b2%2B20250610-x86_64_v4-unknown-linux-musl-debug-full.tar.zst",
+ "sha256": "fa318a9b9c56a9c19a1bb0c85b91e5b7f40ac8e530e29211321df71f7bd3d1ca",
+ "variant": "debug"
+ },
"cpython-3.14.0b1-darwin-aarch64-none": {
"name": "cpython",
"arch": {
@@ -3931,8 +4731,8 @@
"minor": 13,
"patch": 4,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.13.4%2B20250604-aarch64-apple-darwin-install_only_stripped.tar.gz",
- "sha256": "15c7d478f3e167840ca1a6e0851c19edafc75786ff954bc7b405e9aaca05a6e9",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.13.4%2B20250610-aarch64-apple-darwin-install_only_stripped.tar.gz",
+ "sha256": "59183bd70b0facb184fc5e7bd18488595d90ac5eb010ac1ee63eea7db4e230a1",
"variant": null
},
"cpython-3.13.4-darwin-x86_64-none": {
@@ -3947,8 +4747,8 @@
"minor": 13,
"patch": 4,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.13.4%2B20250604-x86_64-apple-darwin-install_only_stripped.tar.gz",
- "sha256": "e998a79b99d329a3e868b56d69976c8de45a290d0580e6e3325d0422fe158e49",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.13.4%2B20250610-x86_64-apple-darwin-install_only_stripped.tar.gz",
+ "sha256": "b219b93c37ffefe46495feff6d996048706832307de454efa60a09b392f887db",
"variant": null
},
"cpython-3.13.4-linux-aarch64-gnu": {
@@ -3963,8 +4763,8 @@
"minor": 13,
"patch": 4,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.13.4%2B20250604-aarch64-unknown-linux-gnu-install_only_stripped.tar.gz",
- "sha256": "c1bf8b9a2df80831ebcd52bb5ee17b60306b95a5b1832278f3644758db2c48e6",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.13.4%2B20250610-aarch64-unknown-linux-gnu-install_only_stripped.tar.gz",
+ "sha256": "fef6c8c96260eff9258aeb38bbfc90a9d662e683f8fe6946a941c954053bdb71",
"variant": null
},
"cpython-3.13.4-linux-armv7-gnueabi": {
@@ -3979,8 +4779,8 @@
"minor": 13,
"patch": 4,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.13.4%2B20250604-armv7-unknown-linux-gnueabi-install_only_stripped.tar.gz",
- "sha256": "267e8ce32918a6faf5e7b534f1a6c292b64b451b645bbd9c2d5e9f1ff75722da",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.13.4%2B20250610-armv7-unknown-linux-gnueabi-install_only_stripped.tar.gz",
+ "sha256": "8cd822d146401242df2c056f4cff5febc116b7f36ce22dc798c8f3d2a2fd222c",
"variant": null
},
"cpython-3.13.4-linux-armv7-gnueabihf": {
@@ -3995,8 +4795,8 @@
"minor": 13,
"patch": 4,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.13.4%2B20250604-armv7-unknown-linux-gnueabihf-install_only_stripped.tar.gz",
- "sha256": "943defb8d2754f5e18228966ac5a217773a58c437b683fc97a6f80f2264c509e",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.13.4%2B20250610-armv7-unknown-linux-gnueabihf-install_only_stripped.tar.gz",
+ "sha256": "1ad613b25e5a695eb820ddd430114d6b52c5f4591ad9ef94f909528b7bdcc68f",
"variant": null
},
"cpython-3.13.4-linux-powerpc64le-gnu": {
@@ -4011,8 +4811,8 @@
"minor": 13,
"patch": 4,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.13.4%2B20250604-ppc64le-unknown-linux-gnu-install_only_stripped.tar.gz",
- "sha256": "587709c1a3274678c76696e7cabb9f8b3835ef1de8e3ccf3659067982aea10ea",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.13.4%2B20250610-ppc64le-unknown-linux-gnu-install_only_stripped.tar.gz",
+ "sha256": "cb02c98ba48d7bd1d70176ed615e8aa026c913f4db6fda5077f42547b0e0bd75",
"variant": null
},
"cpython-3.13.4-linux-riscv64-gnu": {
@@ -4027,8 +4827,8 @@
"minor": 13,
"patch": 4,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.13.4%2B20250604-riscv64-unknown-linux-gnu-install_only_stripped.tar.gz",
- "sha256": "61b001ea3b5625704aa4114c9f352d9859ff3f1e6100a441874031841f7d7c8b",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.13.4%2B20250610-riscv64-unknown-linux-gnu-install_only_stripped.tar.gz",
+ "sha256": "608d17e3bd00af8d3a9c85b7d1938348181471575774ea2d8ee866733a36ca76",
"variant": null
},
"cpython-3.13.4-linux-s390x-gnu": {
@@ -4043,8 +4843,8 @@
"minor": 13,
"patch": 4,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.13.4%2B20250604-s390x-unknown-linux-gnu-install_only_stripped.tar.gz",
- "sha256": "fc31c9b40a576cf071c9f2b0e9a2ee47a65f1707218986fba5aac32bbc534de2",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.13.4%2B20250610-s390x-unknown-linux-gnu-install_only_stripped.tar.gz",
+ "sha256": "97b632b31628123a65b89543091cf26c48b8f6785baca41f76dcae08e6821e63",
"variant": null
},
"cpython-3.13.4-linux-x86_64-gnu": {
@@ -4059,8 +4859,8 @@
"minor": 13,
"patch": 4,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.13.4%2B20250604-x86_64-unknown-linux-gnu-install_only_stripped.tar.gz",
- "sha256": "0d5139af9c77c8ea3937b907d9694adb7442be0211df869bee0495004a3cb18d",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.13.4%2B20250610-x86_64-unknown-linux-gnu-install_only_stripped.tar.gz",
+ "sha256": "ffd0b484e40e4fffdfcac265560e109456f802485f1f27e3cd314763b2b1587c",
"variant": null
},
"cpython-3.13.4-linux-x86_64-musl": {
@@ -4075,8 +4875,8 @@
"minor": 13,
"patch": 4,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.13.4%2B20250604-x86_64-unknown-linux-musl-install_only_stripped.tar.gz",
- "sha256": "00610ee98af5e600f1be1b636223375801e944461858d8b4a5015da6005cdeba",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.13.4%2B20250610-x86_64-unknown-linux-musl-install_only_stripped.tar.gz",
+ "sha256": "8d60e688b5dc3b5a2676fde68546316af10cbd31b0632867b385dbbd7353c3bf",
"variant": null
},
"cpython-3.13.4-linux-x86_64_v2-gnu": {
@@ -4091,8 +4891,8 @@
"minor": 13,
"patch": 4,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.13.4%2B20250604-x86_64_v2-unknown-linux-gnu-install_only_stripped.tar.gz",
- "sha256": "801743f9858f2f37a0eed966e54538280dffc1f2ad98b9f78e875bba371fffe2",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.13.4%2B20250610-x86_64_v2-unknown-linux-gnu-install_only_stripped.tar.gz",
+ "sha256": "de338569a53d35b75503c52c4e74a91d246475eebb33681be665880bfd61ce3d",
"variant": null
},
"cpython-3.13.4-linux-x86_64_v2-musl": {
@@ -4107,8 +4907,8 @@
"minor": 13,
"patch": 4,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.13.4%2B20250604-x86_64_v2-unknown-linux-musl-install_only_stripped.tar.gz",
- "sha256": "9e265c02b9b17483ace13f6214fdd45bf5a74e0dbd88ac0a75c1a83d30a4843e",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.13.4%2B20250610-x86_64_v2-unknown-linux-musl-install_only_stripped.tar.gz",
+ "sha256": "26491581911355ac39fa8322f0a55e56a225be80a913786c3c30ad076445a083",
"variant": null
},
"cpython-3.13.4-linux-x86_64_v3-gnu": {
@@ -4123,8 +4923,8 @@
"minor": 13,
"patch": 4,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.13.4%2B20250604-x86_64_v3-unknown-linux-gnu-install_only_stripped.tar.gz",
- "sha256": "b9c2a51abffd8c61414a1078c85492b96dda78aa6a89b08533b2cdc7b7420eca",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.13.4%2B20250610-x86_64_v3-unknown-linux-gnu-install_only_stripped.tar.gz",
+ "sha256": "0a6eaa2778f6b2bedd6e3c3d763c2f379f0ea99f87ae2fbf01483ab9b2e17925",
"variant": null
},
"cpython-3.13.4-linux-x86_64_v3-musl": {
@@ -4139,8 +4939,8 @@
"minor": 13,
"patch": 4,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.13.4%2B20250604-x86_64_v3-unknown-linux-musl-install_only_stripped.tar.gz",
- "sha256": "d75a9d288725440d03bc6a896efc18b7d51145ae5506a0119aae92088f523592",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.13.4%2B20250610-x86_64_v3-unknown-linux-musl-install_only_stripped.tar.gz",
+ "sha256": "df24b661532df4d6c3c0de66a7f25d317d494a658f95d0aa1c6755dc4e536f49",
"variant": null
},
"cpython-3.13.4-linux-x86_64_v4-gnu": {
@@ -4155,8 +4955,8 @@
"minor": 13,
"patch": 4,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.13.4%2B20250604-x86_64_v4-unknown-linux-gnu-install_only_stripped.tar.gz",
- "sha256": "e4e5a56dbbd4407445ba68fcafb3344ce1ee73dd4cd1eb0d44af1f173742f902",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.13.4%2B20250610-x86_64_v4-unknown-linux-gnu-install_only_stripped.tar.gz",
+ "sha256": "7fb2e42a9922cee1533ceba19590a779970333f068b519bb94df33e8be7917ad",
"variant": null
},
"cpython-3.13.4-linux-x86_64_v4-musl": {
@@ -4171,8 +4971,8 @@
"minor": 13,
"patch": 4,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.13.4%2B20250604-x86_64_v4-unknown-linux-musl-install_only_stripped.tar.gz",
- "sha256": "9e29e5bceb4ead44b25e234440629891967472cea89709df5d00d0832757e852",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.13.4%2B20250610-x86_64_v4-unknown-linux-musl-install_only_stripped.tar.gz",
+ "sha256": "01b7b4ec668da9ea13f1b2583b357c7cd709ac124b45e29b76fd0a8e54c4984f",
"variant": null
},
"cpython-3.13.4-windows-i686-none": {
@@ -4187,8 +4987,8 @@
"minor": 13,
"patch": 4,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.13.4%2B20250604-i686-pc-windows-msvc-install_only_stripped.tar.gz",
- "sha256": "d7438d8646c60cb25a986138ee2d6e515096ea570e651aed665e314b457c284e",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.13.4%2B20250610-i686-pc-windows-msvc-install_only_stripped.tar.gz",
+ "sha256": "d5100077b9753db01714e2ff1e95c628df023bb2da35adc9b9116eb56e45f27f",
"variant": null
},
"cpython-3.13.4-windows-x86_64-none": {
@@ -4203,8 +5003,8 @@
"minor": 13,
"patch": 4,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.13.4%2B20250604-x86_64-pc-windows-msvc-install_only_stripped.tar.gz",
- "sha256": "24af2e541783037f81a247c9adabf0ab56d5766009bb94e4559d409cbcab9b56",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.13.4%2B20250610-x86_64-pc-windows-msvc-install_only_stripped.tar.gz",
+ "sha256": "1e6348c237d4665c5327683030594b4f93405ae19ad7dabfb1951d12bb266944",
"variant": null
},
"cpython-3.13.4+freethreaded-darwin-aarch64-none": {
@@ -4219,8 +5019,8 @@
"minor": 13,
"patch": 4,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.13.4%2B20250604-aarch64-apple-darwin-freethreaded%2Bpgo%2Blto-full.tar.zst",
- "sha256": "9a0a8de4b015f8fd355fda4fb5ae8ed708af5ae801b7565cfbf909d75da82cfd",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.13.4%2B20250610-aarch64-apple-darwin-freethreaded%2Bpgo%2Blto-full.tar.zst",
+ "sha256": "278dccade56b4bbeecb9a613b77012cf5c1433a5e9b8ef99230d5e61f31d9e02",
"variant": "freethreaded"
},
"cpython-3.13.4+freethreaded-darwin-x86_64-none": {
@@ -4235,8 +5035,8 @@
"minor": 13,
"patch": 4,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.13.4%2B20250604-x86_64-apple-darwin-freethreaded%2Bpgo%2Blto-full.tar.zst",
- "sha256": "db4198487680cfd9ad2fa1171771b949a22232ad34fd61b3604a25826995b9d8",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.13.4%2B20250610-x86_64-apple-darwin-freethreaded%2Bpgo%2Blto-full.tar.zst",
+ "sha256": "64ab7ac8c88002d9ba20a92f72945bfa350268e944a7922500af75d20330574d",
"variant": "freethreaded"
},
"cpython-3.13.4+freethreaded-linux-aarch64-gnu": {
@@ -4251,8 +5051,8 @@
"minor": 13,
"patch": 4,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.13.4%2B20250604-aarch64-unknown-linux-gnu-freethreaded%2Blto-full.tar.zst",
- "sha256": "db29f03366bbc2db6ecfbb06cbb9b97546fe5b2907ee7b7a7d32462d52fc05a1",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.13.4%2B20250610-aarch64-unknown-linux-gnu-freethreaded%2Blto-full.tar.zst",
+ "sha256": "b1c1bd6ab9ef95b464d92a6a911cef1a8d9f0b0f6a192f694ef18ed15d882edf",
"variant": "freethreaded"
},
"cpython-3.13.4+freethreaded-linux-armv7-gnueabi": {
@@ -4267,8 +5067,8 @@
"minor": 13,
"patch": 4,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.13.4%2B20250604-armv7-unknown-linux-gnueabi-freethreaded%2Blto-full.tar.zst",
- "sha256": "069d929fc9fadbada263d68bc891230d22c55126c66eb1092d81cce28fc4c325",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.13.4%2B20250610-armv7-unknown-linux-gnueabi-freethreaded%2Blto-full.tar.zst",
+ "sha256": "5eeaf5b2cd44b51647ae66b1b75fb078d39b890f9f73752ea3eec50b5901bbff",
"variant": "freethreaded"
},
"cpython-3.13.4+freethreaded-linux-armv7-gnueabihf": {
@@ -4283,8 +5083,8 @@
"minor": 13,
"patch": 4,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.13.4%2B20250604-armv7-unknown-linux-gnueabihf-freethreaded%2Blto-full.tar.zst",
- "sha256": "13bff9e59896b433a3729c4c48c4e00e02876077f350bd149e4c2d1823565784",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.13.4%2B20250610-armv7-unknown-linux-gnueabihf-freethreaded%2Blto-full.tar.zst",
+ "sha256": "1bfcd7636c9a5d66b3fc72e4ecdddaac92a305a3239edc526bfbe4f83bdd16ca",
"variant": "freethreaded"
},
"cpython-3.13.4+freethreaded-linux-powerpc64le-gnu": {
@@ -4299,8 +5099,8 @@
"minor": 13,
"patch": 4,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.13.4%2B20250604-ppc64le-unknown-linux-gnu-freethreaded%2Blto-full.tar.zst",
- "sha256": "a7f9fd66185ead073ad8f75d811d82492e9e920c59af73eb53ddcdea03a50be9",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.13.4%2B20250610-ppc64le-unknown-linux-gnu-freethreaded%2Blto-full.tar.zst",
+ "sha256": "ed66ae213a62b286b9b7338b816ccd2815f5248b7a28a185dc8159fe004149ae",
"variant": "freethreaded"
},
"cpython-3.13.4+freethreaded-linux-riscv64-gnu": {
@@ -4315,8 +5115,8 @@
"minor": 13,
"patch": 4,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.13.4%2B20250604-riscv64-unknown-linux-gnu-freethreaded%2Blto-full.tar.zst",
- "sha256": "ceb9be68c4a7533661af21fd571fdd2bb98f97ea3fe3a367a28444c19ad8022b",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.13.4%2B20250610-riscv64-unknown-linux-gnu-freethreaded%2Blto-full.tar.zst",
+ "sha256": "913264545215236660e4178bc3e5b57a20a444a8deb5c11680c95afc960b4016",
"variant": "freethreaded"
},
"cpython-3.13.4+freethreaded-linux-s390x-gnu": {
@@ -4331,8 +5131,8 @@
"minor": 13,
"patch": 4,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.13.4%2B20250604-s390x-unknown-linux-gnu-freethreaded%2Blto-full.tar.zst",
- "sha256": "0a2c2a8135c3bc6b99c986c68362e41957412a1b15158cacc764b94c40160908",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.13.4%2B20250610-s390x-unknown-linux-gnu-freethreaded%2Blto-full.tar.zst",
+ "sha256": "7556a38ab5e507c1ec22bc38f9859982bc956cab7f4de05a2faac114feb306db",
"variant": "freethreaded"
},
"cpython-3.13.4+freethreaded-linux-x86_64-gnu": {
@@ -4347,8 +5147,8 @@
"minor": 13,
"patch": 4,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.13.4%2B20250604-x86_64-unknown-linux-gnu-freethreaded%2Bpgo%2Blto-full.tar.zst",
- "sha256": "7371e135046d22d1943259e01a93813f314de781661665a2a9ce7735740a1004",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.13.4%2B20250610-x86_64-unknown-linux-gnu-freethreaded%2Bpgo%2Blto-full.tar.zst",
+ "sha256": "864df6e6819e8f8e855ce30f34410fdc5867d0616e904daeb9a40e5806e970d7",
"variant": "freethreaded"
},
"cpython-3.13.4+freethreaded-linux-x86_64-musl": {
@@ -4363,8 +5163,8 @@
"minor": 13,
"patch": 4,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.13.4%2B20250604-x86_64-unknown-linux-musl-freethreaded%2Blto-full.tar.zst",
- "sha256": "49bea5e8ec13902adb25c47f4d5892df66099f715f3553f246e615b63f74a730",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.13.4%2B20250610-x86_64-unknown-linux-musl-freethreaded%2Blto-full.tar.zst",
+ "sha256": "1001cce26923d89fa72a52ad3bbda5cfaee7bff11291d921dec4151846ef0c3c",
"variant": "freethreaded"
},
"cpython-3.13.4+freethreaded-linux-x86_64_v2-gnu": {
@@ -4379,8 +5179,8 @@
"minor": 13,
"patch": 4,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.13.4%2B20250604-x86_64_v2-unknown-linux-gnu-freethreaded%2Bpgo%2Blto-full.tar.zst",
- "sha256": "8dadecc39553224923481b1242dcc7399b5682a4918708367c82c2c5daf22ac0",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.13.4%2B20250610-x86_64_v2-unknown-linux-gnu-freethreaded%2Bpgo%2Blto-full.tar.zst",
+ "sha256": "50f1fcf56521d5751272071b698594960616f7be3ccffee5c071aa0115d6791a",
"variant": "freethreaded"
},
"cpython-3.13.4+freethreaded-linux-x86_64_v2-musl": {
@@ -4395,8 +5195,8 @@
"minor": 13,
"patch": 4,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.13.4%2B20250604-x86_64_v2-unknown-linux-musl-freethreaded%2Blto-full.tar.zst",
- "sha256": "e7af1e644b032a26d0009ebc5ff0cd4c81b5f42b49fff8466cfec33aaf4541f6",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.13.4%2B20250610-x86_64_v2-unknown-linux-musl-freethreaded%2Blto-full.tar.zst",
+ "sha256": "976dc818dcc468c760fbd6fb2553318a49eec6aad8dcc4c4b1a44b0be3359783",
"variant": "freethreaded"
},
"cpython-3.13.4+freethreaded-linux-x86_64_v3-gnu": {
@@ -4411,8 +5211,8 @@
"minor": 13,
"patch": 4,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.13.4%2B20250604-x86_64_v3-unknown-linux-gnu-freethreaded%2Bpgo%2Blto-full.tar.zst",
- "sha256": "44c05857659f014c2cb102d7fa6bbdf9694e5d452ec59ec73b178857d3c5a4fe",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.13.4%2B20250610-x86_64_v3-unknown-linux-gnu-freethreaded%2Bpgo%2Blto-full.tar.zst",
+ "sha256": "1525c19758e4b08ca03fc6650815107561e396c8905cfb3bbc9adccdbe5a5af5",
"variant": "freethreaded"
},
"cpython-3.13.4+freethreaded-linux-x86_64_v3-musl": {
@@ -4427,8 +5227,8 @@
"minor": 13,
"patch": 4,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.13.4%2B20250604-x86_64_v3-unknown-linux-musl-freethreaded%2Blto-full.tar.zst",
- "sha256": "b01c288164de9b90b051f4234211391292ba17b29fb37814306e5ad973c92285",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.13.4%2B20250610-x86_64_v3-unknown-linux-musl-freethreaded%2Blto-full.tar.zst",
+ "sha256": "7965bd6354f2db624e904b9f58bb27883f2e6ad7ecb65612c328462fb65d6ce0",
"variant": "freethreaded"
},
"cpython-3.13.4+freethreaded-linux-x86_64_v4-gnu": {
@@ -4443,8 +5243,8 @@
"minor": 13,
"patch": 4,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.13.4%2B20250604-x86_64_v4-unknown-linux-gnu-freethreaded%2Bpgo%2Blto-full.tar.zst",
- "sha256": "8b4481389875b69c3b7666926a7fd92ba31d05e6ba16350dce48c48f19f12618",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.13.4%2B20250610-x86_64_v4-unknown-linux-gnu-freethreaded%2Bpgo%2Blto-full.tar.zst",
+ "sha256": "9244c970b5eba41b2ef20eb1f6ffb992d2cf9a2a2e0611d62c2ec5070047577b",
"variant": "freethreaded"
},
"cpython-3.13.4+freethreaded-linux-x86_64_v4-musl": {
@@ -4459,8 +5259,8 @@
"minor": 13,
"patch": 4,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.13.4%2B20250604-x86_64_v4-unknown-linux-musl-freethreaded%2Blto-full.tar.zst",
- "sha256": "abc49f5df6d8f5d7661094f4db59a703eb561a618cba906eb78c5f420fdb4151",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.13.4%2B20250610-x86_64_v4-unknown-linux-musl-freethreaded%2Blto-full.tar.zst",
+ "sha256": "720ed989b925c5be3919dcb8738addcd1ce68444d5e081b041229d88ed743e19",
"variant": "freethreaded"
},
"cpython-3.13.4+freethreaded-windows-i686-none": {
@@ -4475,8 +5275,8 @@
"minor": 13,
"patch": 4,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.13.4%2B20250604-i686-pc-windows-msvc-freethreaded%2Bpgo-full.tar.zst",
- "sha256": "5b80318e2e4911f7f8dcfd2f0fe3bfa65c2810199ba9c57d281330c6a86c50f8",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.13.4%2B20250610-i686-pc-windows-msvc-freethreaded%2Bpgo-full.tar.zst",
+ "sha256": "595786a6613306b74118c56e29ab430ed0eb08d82c4103b7778e827c5e43f8cf",
"variant": "freethreaded"
},
"cpython-3.13.4+freethreaded-windows-x86_64-none": {
@@ -4491,8 +5291,8 @@
"minor": 13,
"patch": 4,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.13.4%2B20250604-x86_64-pc-windows-msvc-freethreaded%2Bpgo-full.tar.zst",
- "sha256": "597b9eaa75914a21819ef8a7c8aec0fbe34a6e6e393a7c40c5d7f53633172d41",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.13.4%2B20250610-x86_64-pc-windows-msvc-freethreaded%2Bpgo-full.tar.zst",
+ "sha256": "9457504547edb2e0156bf76b53c7e4941c7f61c0eff9fd5f4d816d3df51c58e3",
"variant": "freethreaded"
},
"cpython-3.13.4+debug-linux-aarch64-gnu": {
@@ -4507,8 +5307,8 @@
"minor": 13,
"patch": 4,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.13.4%2B20250604-aarch64-unknown-linux-gnu-debug-full.tar.zst",
- "sha256": "3c2701522cc05954999f3effb4e0aa6b18e2346c89692ff2b7a812196eb43088",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.13.4%2B20250610-aarch64-unknown-linux-gnu-debug-full.tar.zst",
+ "sha256": "979fae2f42587a9b91dc4628786798c61410e24c26209d3666dde94531137f1f",
"variant": "debug"
},
"cpython-3.13.4+debug-linux-armv7-gnueabi": {
@@ -4523,8 +5323,8 @@
"minor": 13,
"patch": 4,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.13.4%2B20250604-armv7-unknown-linux-gnueabi-debug-full.tar.zst",
- "sha256": "0a4ad399350ccc8faf2557db5b8ab58ed4c9a40a427603e74d9eb277b4d9f7ab",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.13.4%2B20250610-armv7-unknown-linux-gnueabi-debug-full.tar.zst",
+ "sha256": "e7ef86f07ce18805efdf9b21a7e7b9d9c06e44157991aaa72f71cdecb53183e4",
"variant": "debug"
},
"cpython-3.13.4+debug-linux-armv7-gnueabihf": {
@@ -4539,8 +5339,8 @@
"minor": 13,
"patch": 4,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.13.4%2B20250604-armv7-unknown-linux-gnueabihf-debug-full.tar.zst",
- "sha256": "82d81489a9ffc48d64e4594c3fc191c41cb68113cc02bf8bc962abac970c7dc1",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.13.4%2B20250610-armv7-unknown-linux-gnueabihf-debug-full.tar.zst",
+ "sha256": "e40b3fdfab879973e45363f159856a8c81570b16505f8862d17dc2d6749d4515",
"variant": "debug"
},
"cpython-3.13.4+debug-linux-powerpc64le-gnu": {
@@ -4555,8 +5355,8 @@
"minor": 13,
"patch": 4,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.13.4%2B20250604-ppc64le-unknown-linux-gnu-debug-full.tar.zst",
- "sha256": "458c5c5ce1395602d06ea7c4c4e83e6fb7d10636076d42f8700f1de4ed442ad7",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.13.4%2B20250610-ppc64le-unknown-linux-gnu-debug-full.tar.zst",
+ "sha256": "2c4b8c4a451466770fa81e23647109b8c0446a56f056db955fc0fe8e3bb9dfc0",
"variant": "debug"
},
"cpython-3.13.4+debug-linux-riscv64-gnu": {
@@ -4571,8 +5371,8 @@
"minor": 13,
"patch": 4,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.13.4%2B20250604-riscv64-unknown-linux-gnu-debug-full.tar.zst",
- "sha256": "df654d622c6d8dea5b52fc2162528c24c9d002aa31573d67497c8df10b052c83",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.13.4%2B20250610-riscv64-unknown-linux-gnu-debug-full.tar.zst",
+ "sha256": "e40baeae33d0cab3437d2c39c8dbef959b62c289a2c2a17426cf4e6a1f11629f",
"variant": "debug"
},
"cpython-3.13.4+debug-linux-s390x-gnu": {
@@ -4587,8 +5387,8 @@
"minor": 13,
"patch": 4,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.13.4%2B20250604-s390x-unknown-linux-gnu-debug-full.tar.zst",
- "sha256": "f9d0fa69cb1ff2f7d6807e86c34244661d0997b75269e3d789a53252a8ce9722",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.13.4%2B20250610-s390x-unknown-linux-gnu-debug-full.tar.zst",
+ "sha256": "e2a403cf6a923253a3b330c6ed827f12832bf087964aece3c71cee61cf4f4570",
"variant": "debug"
},
"cpython-3.13.4+debug-linux-x86_64-gnu": {
@@ -4603,8 +5403,8 @@
"minor": 13,
"patch": 4,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.13.4%2B20250604-x86_64-unknown-linux-gnu-debug-full.tar.zst",
- "sha256": "a249d97f487f7cd0ea6ac7be4c26ac9fdcb9ac40fea6870718dce78342481b39",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.13.4%2B20250610-x86_64-unknown-linux-gnu-debug-full.tar.zst",
+ "sha256": "d5c95731b75dd789b137ad30dd71904b89781735142fc31c9f72949c46a57ffe",
"variant": "debug"
},
"cpython-3.13.4+debug-linux-x86_64-musl": {
@@ -4619,8 +5419,8 @@
"minor": 13,
"patch": 4,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.13.4%2B20250604-x86_64-unknown-linux-musl-debug-full.tar.zst",
- "sha256": "21c622ff3ec6f59a325e22bc7a11543d44fe180852fc37f97188d0e4d7c1eaaf",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.13.4%2B20250610-x86_64-unknown-linux-musl-debug-full.tar.zst",
+ "sha256": "3d8f42bfe6033e16c60e06151d27dece67974560c392f13f0598d4641bb0470b",
"variant": "debug"
},
"cpython-3.13.4+debug-linux-x86_64_v2-gnu": {
@@ -4635,8 +5435,8 @@
"minor": 13,
"patch": 4,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.13.4%2B20250604-x86_64_v2-unknown-linux-gnu-debug-full.tar.zst",
- "sha256": "4861ab2725c68b3c7112e774cd747580483310ffdeed757be1d9d0a5018d83a2",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.13.4%2B20250610-x86_64_v2-unknown-linux-gnu-debug-full.tar.zst",
+ "sha256": "84a6287669650bbd09cf4b86e01075f8ad38cda2c8580e0c8c568074f452feb5",
"variant": "debug"
},
"cpython-3.13.4+debug-linux-x86_64_v2-musl": {
@@ -4651,8 +5451,8 @@
"minor": 13,
"patch": 4,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.13.4%2B20250604-x86_64_v2-unknown-linux-musl-debug-full.tar.zst",
- "sha256": "3c5935e84cabfeccca2383e4bf1729bb805a00bc72f16dc1b4c52d264e126ebb",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.13.4%2B20250610-x86_64_v2-unknown-linux-musl-debug-full.tar.zst",
+ "sha256": "99b1306dad6d0be44d8fd0ba556473b385259030cf0c27349342f072f2822890",
"variant": "debug"
},
"cpython-3.13.4+debug-linux-x86_64_v3-gnu": {
@@ -4667,8 +5467,8 @@
"minor": 13,
"patch": 4,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.13.4%2B20250604-x86_64_v3-unknown-linux-gnu-debug-full.tar.zst",
- "sha256": "f21207cc19f78f23ed9b5d7d0371df5a306427122978953ab6945aa79694dd24",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.13.4%2B20250610-x86_64_v3-unknown-linux-gnu-debug-full.tar.zst",
+ "sha256": "44f62c784f32b456a5719ad11ed8ba8a97890f8e9dc9c9764f178c64ad30a6ba",
"variant": "debug"
},
"cpython-3.13.4+debug-linux-x86_64_v3-musl": {
@@ -4683,8 +5483,8 @@
"minor": 13,
"patch": 4,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.13.4%2B20250604-x86_64_v3-unknown-linux-musl-debug-full.tar.zst",
- "sha256": "1cdc33eefa6b4efe1bfffae5f6c583813fe27c2f6600fbd6b966e68690da32c0",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.13.4%2B20250610-x86_64_v3-unknown-linux-musl-debug-full.tar.zst",
+ "sha256": "a9a87fb2789b6dfbcd7d1a79c846d208f0c0a7969759ad84742786c24da78047",
"variant": "debug"
},
"cpython-3.13.4+debug-linux-x86_64_v4-gnu": {
@@ -4699,8 +5499,8 @@
"minor": 13,
"patch": 4,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.13.4%2B20250604-x86_64_v4-unknown-linux-gnu-debug-full.tar.zst",
- "sha256": "67da23f1c517573013742828920cf982aad3c14e3fe3166022b9506d164eeb8d",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.13.4%2B20250610-x86_64_v4-unknown-linux-gnu-debug-full.tar.zst",
+ "sha256": "377c8b6d6da681959abd464fac093564b55fe63231fe27b6327d18bbbe13f843",
"variant": "debug"
},
"cpython-3.13.4+debug-linux-x86_64_v4-musl": {
@@ -4715,8 +5515,8 @@
"minor": 13,
"patch": 4,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.13.4%2B20250604-x86_64_v4-unknown-linux-musl-debug-full.tar.zst",
- "sha256": "c39cc0375ea2bb44d79d4b4cf6fe7bd0d337712b930431aaf16d3b07d4288e3a",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.13.4%2B20250610-x86_64_v4-unknown-linux-musl-debug-full.tar.zst",
+ "sha256": "f00a51117fabcfac19b9db628db64c8afe549d19c4a5b5c78bf9848f79536d15",
"variant": "debug"
},
"cpython-3.13.3-darwin-aarch64-none": {
@@ -8139,8 +8939,8 @@
"minor": 12,
"patch": 11,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.12.11%2B20250604-aarch64-apple-darwin-install_only_stripped.tar.gz",
- "sha256": "f831e8feacdb0408b965133caa6178ad296eceb61ec8aafafe6bb4f387ff426f",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.12.11%2B20250610-aarch64-apple-darwin-install_only_stripped.tar.gz",
+ "sha256": "15b3f6023ba426afc9dd4a0aad2449919804eac0f2b4531bf5965d1a3655c6f8",
"variant": null
},
"cpython-3.12.11-darwin-x86_64-none": {
@@ -8155,8 +8955,8 @@
"minor": 12,
"patch": 11,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.12.11%2B20250604-x86_64-apple-darwin-install_only_stripped.tar.gz",
- "sha256": "7ed52279e20414555a8b36ed1c3aa60d73396a618a88a93123b52720d890db62",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.12.11%2B20250610-x86_64-apple-darwin-install_only_stripped.tar.gz",
+ "sha256": "9f8c405ec638eac5637c0505467921413803a25904a29dc1b298d9cd3b885e27",
"variant": null
},
"cpython-3.12.11-linux-aarch64-gnu": {
@@ -8171,8 +8971,8 @@
"minor": 12,
"patch": 11,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.12.11%2B20250604-aarch64-unknown-linux-gnu-install_only_stripped.tar.gz",
- "sha256": "674473a70be6b6bfc028fc1dfc3d08cad63c09409e1e7ad6927fa23d388a201a",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.12.11%2B20250610-aarch64-unknown-linux-gnu-install_only_stripped.tar.gz",
+ "sha256": "37eb67261f2b2b3af7883b79142bbae9e7676194080b780a25ee06901dff8442",
"variant": null
},
"cpython-3.12.11-linux-armv7-gnueabi": {
@@ -8187,8 +8987,8 @@
"minor": 12,
"patch": 11,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.12.11%2B20250604-armv7-unknown-linux-gnueabi-install_only_stripped.tar.gz",
- "sha256": "8a6e054cbdf4e0b05adbfca778db6aee8efc7ba64b055edfc77ca973a3611132",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.12.11%2B20250610-armv7-unknown-linux-gnueabi-install_only_stripped.tar.gz",
+ "sha256": "5ee56cf8a53b9a5e9d0a72287fe5f2b045fec7843efa4d0acacedc11b718f485",
"variant": null
},
"cpython-3.12.11-linux-armv7-gnueabihf": {
@@ -8203,8 +9003,8 @@
"minor": 12,
"patch": 11,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.12.11%2B20250604-armv7-unknown-linux-gnueabihf-install_only_stripped.tar.gz",
- "sha256": "20f34f97b29adda58f875e8c08bf57ea8b4a4c844482d6f77c36917e2c505703",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.12.11%2B20250610-armv7-unknown-linux-gnueabihf-install_only_stripped.tar.gz",
+ "sha256": "ba20ec81abed272f9ecc46aadea1e4312a1eecd6dbc6c9d7d59fbb79a28c611a",
"variant": null
},
"cpython-3.12.11-linux-powerpc64le-gnu": {
@@ -8219,8 +9019,8 @@
"minor": 12,
"patch": 11,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.12.11%2B20250604-ppc64le-unknown-linux-gnu-install_only_stripped.tar.gz",
- "sha256": "22ad4c6b518ce9ca3090ea90ac0b356456136fd9c3f37558b315d1d8554d6bb6",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.12.11%2B20250610-ppc64le-unknown-linux-gnu-install_only_stripped.tar.gz",
+ "sha256": "8458057a81e87230f1694dbf846b4e8e79483d31d3cf6be6a243b3e3140a67dc",
"variant": null
},
"cpython-3.12.11-linux-riscv64-gnu": {
@@ -8235,8 +9035,8 @@
"minor": 12,
"patch": 11,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.12.11%2B20250604-riscv64-unknown-linux-gnu-install_only_stripped.tar.gz",
- "sha256": "56ec06974667a36ae536bcd51caa42b7121e210734582753eb03002777841a47",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.12.11%2B20250610-riscv64-unknown-linux-gnu-install_only_stripped.tar.gz",
+ "sha256": "d84af40dea87fed07ea6cce8f239d438dbf2af1fb6cd303ecb074d83017135ce",
"variant": null
},
"cpython-3.12.11-linux-s390x-gnu": {
@@ -8251,8 +9051,8 @@
"minor": 12,
"patch": 11,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.12.11%2B20250604-s390x-unknown-linux-gnu-install_only_stripped.tar.gz",
- "sha256": "8c8cf7fa680a01a1e75b0878cc8c5785d7c074c0750bd714bdc38feb60b538fb",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.12.11%2B20250610-s390x-unknown-linux-gnu-install_only_stripped.tar.gz",
+ "sha256": "dedd7ad301e08bf37973b60ec41be7c900d3d4020c33f3ce72a144fe6ef3a2dd",
"variant": null
},
"cpython-3.12.11-linux-x86_64-gnu": {
@@ -8267,8 +9067,8 @@
"minor": 12,
"patch": 11,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.12.11%2B20250604-x86_64-unknown-linux-gnu-install_only_stripped.tar.gz",
- "sha256": "71bd7685d6ae26dfad23ddaa9712dc4713db608a273c2e50974ad0c3748de691",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.12.11%2B20250610-x86_64-unknown-linux-gnu-install_only_stripped.tar.gz",
+ "sha256": "20e9721d8b453191ba5688108eb609bd7ef4451d3c4c080682bc3fa25f306a15",
"variant": null
},
"cpython-3.12.11-linux-x86_64-musl": {
@@ -8283,8 +9083,8 @@
"minor": 12,
"patch": 11,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.12.11%2B20250604-x86_64-unknown-linux-musl-install_only_stripped.tar.gz",
- "sha256": "530f33db3dbadcf9abb37fa92dee7f9419a8e4ca50a2606ac4afddeb5548f262",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.12.11%2B20250610-x86_64-unknown-linux-musl-install_only_stripped.tar.gz",
+ "sha256": "67dfa6abc781e3803f8c5d874fb42f6283bce34e6c719806b47d069244998baf",
"variant": null
},
"cpython-3.12.11-linux-x86_64_v2-gnu": {
@@ -8299,8 +9099,8 @@
"minor": 12,
"patch": 11,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.12.11%2B20250604-x86_64_v2-unknown-linux-gnu-install_only_stripped.tar.gz",
- "sha256": "96287411eec81af2ef5451ffcb3ba60f50438b8a27ccc6a4a881c9cb638c8e34",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.12.11%2B20250610-x86_64_v2-unknown-linux-gnu-install_only_stripped.tar.gz",
+ "sha256": "d15250881450fa40826fe472ad869eee60b9b4952bb495d1be545358993df325",
"variant": null
},
"cpython-3.12.11-linux-x86_64_v2-musl": {
@@ -8315,8 +9115,8 @@
"minor": 12,
"patch": 11,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.12.11%2B20250604-x86_64_v2-unknown-linux-musl-install_only_stripped.tar.gz",
- "sha256": "32a14e868e3f399142e79a0918d2b7ab08644386ca92b3b0f869f10f8fa1f047",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.12.11%2B20250610-x86_64_v2-unknown-linux-musl-install_only_stripped.tar.gz",
+ "sha256": "6fae931db14d90b782f1c94ee0ad3b6d805499b1fe103328290533dbc3cec6ca",
"variant": null
},
"cpython-3.12.11-linux-x86_64_v3-gnu": {
@@ -8331,8 +9131,8 @@
"minor": 12,
"patch": 11,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.12.11%2B20250604-x86_64_v3-unknown-linux-gnu-install_only_stripped.tar.gz",
- "sha256": "5a979167dc53a7dc0ff3c79b22315c62c372c5a126fed547927295e09de2c155",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.12.11%2B20250610-x86_64_v3-unknown-linux-gnu-install_only_stripped.tar.gz",
+ "sha256": "8537d23781cef99981fd305a69b493a46c8bc212ec039d23be4b1f5a5e7b95f6",
"variant": null
},
"cpython-3.12.11-linux-x86_64_v3-musl": {
@@ -8347,8 +9147,8 @@
"minor": 12,
"patch": 11,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.12.11%2B20250604-x86_64_v3-unknown-linux-musl-install_only_stripped.tar.gz",
- "sha256": "d055778461a386c16015677ee87f14b0098ea581b81ef8c92a4d869b965485bb",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.12.11%2B20250610-x86_64_v3-unknown-linux-musl-install_only_stripped.tar.gz",
+ "sha256": "c264e43686371d7b36d3b6cea757f871c773f01c00b6e0626f538053aaa37619",
"variant": null
},
"cpython-3.12.11-linux-x86_64_v4-gnu": {
@@ -8363,8 +9163,8 @@
"minor": 12,
"patch": 11,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.12.11%2B20250604-x86_64_v4-unknown-linux-gnu-install_only_stripped.tar.gz",
- "sha256": "72c5cd81fc0e87684b0e246c607277499d1a7f79070982af6fb73c9cc90fabfe",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.12.11%2B20250610-x86_64_v4-unknown-linux-gnu-install_only_stripped.tar.gz",
+ "sha256": "040ec55c589725bfab7839809311a15c545bc751d6378074ebf1aa7b239a8f75",
"variant": null
},
"cpython-3.12.11-linux-x86_64_v4-musl": {
@@ -8379,8 +9179,8 @@
"minor": 12,
"patch": 11,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.12.11%2B20250604-x86_64_v4-unknown-linux-musl-install_only_stripped.tar.gz",
- "sha256": "09e15984cbe2baf3af28f8b5b8771f882208e79af992440cc5b4ec37b2f284fc",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.12.11%2B20250610-x86_64_v4-unknown-linux-musl-install_only_stripped.tar.gz",
+ "sha256": "267746f007fdf4761f28ffc849985c5b86ee235759022e9da828ffbb24a968d6",
"variant": null
},
"cpython-3.12.11-windows-i686-none": {
@@ -8395,8 +9195,8 @@
"minor": 12,
"patch": 11,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.12.11%2B20250604-i686-pc-windows-msvc-install_only_stripped.tar.gz",
- "sha256": "17ffab420b0206ba231dd69213d565b6665d5ce33678c386b26151b14c019172",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.12.11%2B20250610-i686-pc-windows-msvc-install_only_stripped.tar.gz",
+ "sha256": "0081b2862a0dcd07b911d6fc2aec55fa93bf018e3ec64be4b35e013735b82d09",
"variant": null
},
"cpython-3.12.11-windows-x86_64-none": {
@@ -8411,8 +9211,8 @@
"minor": 12,
"patch": 11,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.12.11%2B20250604-x86_64-pc-windows-msvc-install_only_stripped.tar.gz",
- "sha256": "bf30bd98e67db0768b4c7b5b47a2b1a40fa9b3994dd245823d2125ba0a6ff139",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.12.11%2B20250610-x86_64-pc-windows-msvc-install_only_stripped.tar.gz",
+ "sha256": "7d969563a3f864588b0e4d188df9c7369a7e11f026fedb277cd1d9776a372355",
"variant": null
},
"cpython-3.12.11+debug-linux-aarch64-gnu": {
@@ -8427,8 +9227,8 @@
"minor": 12,
"patch": 11,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.12.11%2B20250604-aarch64-unknown-linux-gnu-debug-full.tar.zst",
- "sha256": "b07fe786e9d2981a4483260a46036d3c1f5dc0fe8ce8acd9145b7b9a6c9e2bbb",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.12.11%2B20250610-aarch64-unknown-linux-gnu-debug-full.tar.zst",
+ "sha256": "bc6760b9c938743ffa5795b6ac9f97da5fa2709827e6effaa66afd89b93b908a",
"variant": "debug"
},
"cpython-3.12.11+debug-linux-armv7-gnueabi": {
@@ -8443,8 +9243,8 @@
"minor": 12,
"patch": 11,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.12.11%2B20250604-armv7-unknown-linux-gnueabi-debug-full.tar.zst",
- "sha256": "666f1e260f855f91c3b015fe7face71de3b662c71ea6b1bb585fd3f6ce2353b7",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.12.11%2B20250610-armv7-unknown-linux-gnueabi-debug-full.tar.zst",
+ "sha256": "300ec7616c8a98c077502bda5b34e3da620fc764990b2f21f5a3f66174b7bbfa",
"variant": "debug"
},
"cpython-3.12.11+debug-linux-armv7-gnueabihf": {
@@ -8459,8 +9259,8 @@
"minor": 12,
"patch": 11,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.12.11%2B20250604-armv7-unknown-linux-gnueabihf-debug-full.tar.zst",
- "sha256": "d8696f03ecce2c807d86ccee6ef2f805177bc26968a81e60818963ef031fef5b",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.12.11%2B20250610-armv7-unknown-linux-gnueabihf-debug-full.tar.zst",
+ "sha256": "c8d3fbebf582659c1b5b3ed13f643354520950b497b1335b39cb6c6f5ed41652",
"variant": "debug"
},
"cpython-3.12.11+debug-linux-powerpc64le-gnu": {
@@ -8475,8 +9275,8 @@
"minor": 12,
"patch": 11,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.12.11%2B20250604-ppc64le-unknown-linux-gnu-debug-full.tar.zst",
- "sha256": "e4acf1dc0e7a4bfc4fcaa43f967f6a3a60a3d67cddb47a0b2e659abc0e642ff3",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.12.11%2B20250610-ppc64le-unknown-linux-gnu-debug-full.tar.zst",
+ "sha256": "59d00d439308c297fa29cb7c82d6d80da8bfb9174c8356565f11c329b3f820ef",
"variant": "debug"
},
"cpython-3.12.11+debug-linux-riscv64-gnu": {
@@ -8491,8 +9291,8 @@
"minor": 12,
"patch": 11,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.12.11%2B20250604-riscv64-unknown-linux-gnu-debug-full.tar.zst",
- "sha256": "0b1791dd8020700ee8d0eae88e6f80ff38d847ed6b2eaefcd3cddff961f9cbea",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.12.11%2B20250610-riscv64-unknown-linux-gnu-debug-full.tar.zst",
+ "sha256": "c72f3aeeb1ecf21f20b7bbf852a80f024f01508ca0cc693ca045a06238bb1e50",
"variant": "debug"
},
"cpython-3.12.11+debug-linux-s390x-gnu": {
@@ -8507,8 +9307,8 @@
"minor": 12,
"patch": 11,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.12.11%2B20250604-s390x-unknown-linux-gnu-debug-full.tar.zst",
- "sha256": "6b6028d9e3c3c2aab90bdf9f2abbe82557d318fdefc2fb778443d5264cae1827",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.12.11%2B20250610-s390x-unknown-linux-gnu-debug-full.tar.zst",
+ "sha256": "9dd357efc9199a40082347a25698fc4b3b986f1491201d56a701b9d23f5b4e89",
"variant": "debug"
},
"cpython-3.12.11+debug-linux-x86_64-gnu": {
@@ -8523,8 +9323,8 @@
"minor": 12,
"patch": 11,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.12.11%2B20250604-x86_64-unknown-linux-gnu-debug-full.tar.zst",
- "sha256": "6cbe784b1a36f64803f402571d2c62f090347c5881494dcc3d1239371087a407",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.12.11%2B20250610-x86_64-unknown-linux-gnu-debug-full.tar.zst",
+ "sha256": "cea96347b245f346f0fb6601e7228dcfca62de1fad872efb8f3c787df3d3cfbe",
"variant": "debug"
},
"cpython-3.12.11+debug-linux-x86_64-musl": {
@@ -8539,8 +9339,8 @@
"minor": 12,
"patch": 11,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.12.11%2B20250604-x86_64-unknown-linux-musl-debug-full.tar.zst",
- "sha256": "8ef7025bdb758870b585ae1bd6ac965c305f9a3b318abeb18cfb8bf0c961c379",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.12.11%2B20250610-x86_64-unknown-linux-musl-debug-full.tar.zst",
+ "sha256": "f99833038ec1e93dc10d120ae9805b48fb5a307de08850c38a3af1821ad5143e",
"variant": "debug"
},
"cpython-3.12.11+debug-linux-x86_64_v2-gnu": {
@@ -8555,8 +9355,8 @@
"minor": 12,
"patch": 11,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.12.11%2B20250604-x86_64_v2-unknown-linux-gnu-debug-full.tar.zst",
- "sha256": "1343355cc1c63c7aec18ac0bec9b5f1679420f6c25760a10ba3b98a7b0ea5dc7",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.12.11%2B20250610-x86_64_v2-unknown-linux-gnu-debug-full.tar.zst",
+ "sha256": "6cc0e886c5536a36b1715076f766e54462302ba7714103a72fdbf91663b38630",
"variant": "debug"
},
"cpython-3.12.11+debug-linux-x86_64_v2-musl": {
@@ -8571,8 +9371,8 @@
"minor": 12,
"patch": 11,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.12.11%2B20250604-x86_64_v2-unknown-linux-musl-debug-full.tar.zst",
- "sha256": "d84921fe6a4741f8e3b4b7de2cd2614424590efd13f962126950df6b92b45206",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.12.11%2B20250610-x86_64_v2-unknown-linux-musl-debug-full.tar.zst",
+ "sha256": "8e4315f364ad654103ecd52e18245ca4c54d30c77723dbdb2d0ec2fc9733a4dd",
"variant": "debug"
},
"cpython-3.12.11+debug-linux-x86_64_v3-gnu": {
@@ -8587,8 +9387,8 @@
"minor": 12,
"patch": 11,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.12.11%2B20250604-x86_64_v3-unknown-linux-gnu-debug-full.tar.zst",
- "sha256": "23777945727900b33c8b170be712a25a1ba58e7cd26d80350389cbd4e88f3790",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.12.11%2B20250610-x86_64_v3-unknown-linux-gnu-debug-full.tar.zst",
+ "sha256": "e614b109555319a0cca706ed0e9f56d7eb119b31031dca77a2c35adaaa496a4b",
"variant": "debug"
},
"cpython-3.12.11+debug-linux-x86_64_v3-musl": {
@@ -8603,8 +9403,8 @@
"minor": 12,
"patch": 11,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.12.11%2B20250604-x86_64_v3-unknown-linux-musl-debug-full.tar.zst",
- "sha256": "08194562c32c20ecec9f6bf49ce2c381859ec34d15e29f90cfc0d19ec2ea56dc",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.12.11%2B20250610-x86_64_v3-unknown-linux-musl-debug-full.tar.zst",
+ "sha256": "2c142d3834cb092c3bbd456f7ea0171dd538327cb400c0154192611ee5768ff9",
"variant": "debug"
},
"cpython-3.12.11+debug-linux-x86_64_v4-gnu": {
@@ -8619,8 +9419,8 @@
"minor": 12,
"patch": 11,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.12.11%2B20250604-x86_64_v4-unknown-linux-gnu-debug-full.tar.zst",
- "sha256": "de0b34205aabc4290cb1f7a34fa333ae595240cc77204ebf282eef7ea92d2884",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.12.11%2B20250610-x86_64_v4-unknown-linux-gnu-debug-full.tar.zst",
+ "sha256": "0c95b54e15bd5eccef928f0a9d413f7e8de56fc962eb86142720f4248fe3b379",
"variant": "debug"
},
"cpython-3.12.11+debug-linux-x86_64_v4-musl": {
@@ -8635,8 +9435,8 @@
"minor": 12,
"patch": 11,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.12.11%2B20250604-x86_64_v4-unknown-linux-musl-debug-full.tar.zst",
- "sha256": "84a0711643229dfeb7b2b2653e6b2a7f4fefbade95dc1a4d2fbabbbcb98a360a",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.12.11%2B20250610-x86_64_v4-unknown-linux-musl-debug-full.tar.zst",
+ "sha256": "018fb37c17baac1f97c459adb6662381c3e306d028e645472c4e9c7aaef6781a",
"variant": "debug"
},
"cpython-3.12.10-darwin-aarch64-none": {
@@ -12683,8 +13483,8 @@
"minor": 11,
"patch": 13,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.11.13%2B20250604-aarch64-apple-darwin-install_only_stripped.tar.gz",
- "sha256": "fce3646da8834e86fcd95fac3be69580cdd112fc44fd4c1bf0ac36a3cbc41458",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.11.13%2B20250610-aarch64-apple-darwin-install_only_stripped.tar.gz",
+ "sha256": "ad32be73d2fdf44d0d990ce05826a161630db9117fb9f69f138c4a6c2de04b38",
"variant": null
},
"cpython-3.11.13-darwin-x86_64-none": {
@@ -12699,8 +13499,8 @@
"minor": 11,
"patch": 13,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.11.13%2B20250604-x86_64-apple-darwin-install_only_stripped.tar.gz",
- "sha256": "3a533f872d2174f18b61be70830b7b8dc6089d139afcc9c1f3f4e2f537f1564e",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.11.13%2B20250610-x86_64-apple-darwin-install_only_stripped.tar.gz",
+ "sha256": "a7a9fcaf7395093b2cd2babeadc31cb5fd7ee3841c83caa593cc2c06fa67f7cb",
"variant": null
},
"cpython-3.11.13-linux-aarch64-gnu": {
@@ -12715,8 +13515,8 @@
"minor": 11,
"patch": 13,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.11.13%2B20250604-aarch64-unknown-linux-gnu-install_only_stripped.tar.gz",
- "sha256": "ea6c5736f5b9d17cd641227c1cf35fa7fdb8f4fe9159d24e187ffbb06a466687",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.11.13%2B20250610-aarch64-unknown-linux-gnu-install_only_stripped.tar.gz",
+ "sha256": "cf29495316ccf8e99cf89677825fdd8e321f16b45dbf851669ae0d5972a7fed1",
"variant": null
},
"cpython-3.11.13-linux-armv7-gnueabi": {
@@ -12731,8 +13531,8 @@
"minor": 11,
"patch": 13,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.11.13%2B20250604-armv7-unknown-linux-gnueabi-install_only_stripped.tar.gz",
- "sha256": "976c6a8af0191d4b22cd02542a6d688de0b15c6b43cfe7dee64709f30d4d4bbe",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.11.13%2B20250610-armv7-unknown-linux-gnueabi-install_only_stripped.tar.gz",
+ "sha256": "b539237d556212cf7efb7e90ccfe53e86ea006eb0a71cfbb65aafa28f7f5d36c",
"variant": null
},
"cpython-3.11.13-linux-armv7-gnueabihf": {
@@ -12747,8 +13547,8 @@
"minor": 11,
"patch": 13,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.11.13%2B20250604-armv7-unknown-linux-gnueabihf-install_only_stripped.tar.gz",
- "sha256": "ec2459c24a2a7a67719a5a047926f58502bcfbc85ec8419d34a5cbc3293af2fa",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.11.13%2B20250610-armv7-unknown-linux-gnueabihf-install_only_stripped.tar.gz",
+ "sha256": "81d4717bda98e066198715748f8f766316342b89febeb7628626d145b632c757",
"variant": null
},
"cpython-3.11.13-linux-powerpc64le-gnu": {
@@ -12763,8 +13563,8 @@
"minor": 11,
"patch": 13,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.11.13%2B20250604-ppc64le-unknown-linux-gnu-install_only_stripped.tar.gz",
- "sha256": "9c1c449addd769132edce268d2bfb149a60e6f90799e79f613a813ea0ccd8e07",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.11.13%2B20250610-ppc64le-unknown-linux-gnu-install_only_stripped.tar.gz",
+ "sha256": "fd4c2f95f664863efa1e61c1dcf688c55c54074f568c3b1683044801d94a4955",
"variant": null
},
"cpython-3.11.13-linux-riscv64-gnu": {
@@ -12779,8 +13579,8 @@
"minor": 11,
"patch": 13,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.11.13%2B20250604-riscv64-unknown-linux-gnu-install_only_stripped.tar.gz",
- "sha256": "87e8a7e86cced245eb78cfb38488e8d75750d62215db3747edd480cf1e70cddc",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.11.13%2B20250610-riscv64-unknown-linux-gnu-install_only_stripped.tar.gz",
+ "sha256": "c07ef624bc0ce18553fe5b9196f182460d02a90ea1d26dbae9aab08301f4d985",
"variant": null
},
"cpython-3.11.13-linux-s390x-gnu": {
@@ -12795,8 +13595,8 @@
"minor": 11,
"patch": 13,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.11.13%2B20250604-s390x-unknown-linux-gnu-install_only_stripped.tar.gz",
- "sha256": "157c02a85c22a9ef2a046b25cbfb5273690d9ee1e054f3b723c5d7bd7ec90e7f",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.11.13%2B20250610-s390x-unknown-linux-gnu-install_only_stripped.tar.gz",
+ "sha256": "4452a6959cd5a0dc4aa4e1645a9891018d3d5e8852397a589e753f065ddc8ba2",
"variant": null
},
"cpython-3.11.13-linux-x86_64-gnu": {
@@ -12811,8 +13611,8 @@
"minor": 11,
"patch": 13,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.11.13%2B20250604-x86_64-unknown-linux-gnu-install_only_stripped.tar.gz",
- "sha256": "ad27e3dbaa0d4688dc74bee1f69b5e2303988960c0ee356d431ae528de2e1f8f",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.11.13%2B20250610-x86_64-unknown-linux-gnu-install_only_stripped.tar.gz",
+ "sha256": "4367a790f6bde7b3b464d15155ad81009d7054ec1d85a006bf3c7218c6d1ca3c",
"variant": null
},
"cpython-3.11.13-linux-x86_64-musl": {
@@ -12827,8 +13627,8 @@
"minor": 11,
"patch": 13,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.11.13%2B20250604-x86_64-unknown-linux-musl-install_only_stripped.tar.gz",
- "sha256": "d3be62d5e151365e3a8fa34b3bd8f572d8211d3952a9c7d4f668d819c6a70ad5",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.11.13%2B20250610-x86_64-unknown-linux-musl-install_only_stripped.tar.gz",
+ "sha256": "408bc76e6278589c61463d2cb34a67ac331b9e989dd8c37e3e7f4c736e8443fb",
"variant": null
},
"cpython-3.11.13-linux-x86_64_v2-gnu": {
@@ -12843,8 +13643,8 @@
"minor": 11,
"patch": 13,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.11.13%2B20250604-x86_64_v2-unknown-linux-gnu-install_only_stripped.tar.gz",
- "sha256": "0766b4c138e1e2074fe16e4268e276e7285e82c08c8fd0d5120ba8879cc28508",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.11.13%2B20250610-x86_64_v2-unknown-linux-gnu-install_only_stripped.tar.gz",
+ "sha256": "be84895f151731cdf5b2e221069f8f3388bff83ffd8d37a2892675099b26747c",
"variant": null
},
"cpython-3.11.13-linux-x86_64_v2-musl": {
@@ -12859,8 +13659,8 @@
"minor": 11,
"patch": 13,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.11.13%2B20250604-x86_64_v2-unknown-linux-musl-install_only_stripped.tar.gz",
- "sha256": "f97e8f79f0587339332de7a479ad82a62f15b45a67320d7614f13edc7bed6717",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.11.13%2B20250610-x86_64_v2-unknown-linux-musl-install_only_stripped.tar.gz",
+ "sha256": "d27659768c8e72589d9397ef48170d5ecc37debb2733646771d1cb4ff1f97602",
"variant": null
},
"cpython-3.11.13-linux-x86_64_v3-gnu": {
@@ -12875,8 +13675,8 @@
"minor": 11,
"patch": 13,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.11.13%2B20250604-x86_64_v3-unknown-linux-gnu-install_only_stripped.tar.gz",
- "sha256": "f7e55efcad83bb11d5d02dbebd9bbd65cd067f2fe1014ad94b4af26f45685ba2",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.11.13%2B20250610-x86_64_v3-unknown-linux-gnu-install_only_stripped.tar.gz",
+ "sha256": "6642e0fde81a58b77a05f3ab122538d9d0b58f44fab63bf7737be637f52a2e20",
"variant": null
},
"cpython-3.11.13-linux-x86_64_v3-musl": {
@@ -12891,8 +13691,8 @@
"minor": 11,
"patch": 13,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.11.13%2B20250604-x86_64_v3-unknown-linux-musl-install_only_stripped.tar.gz",
- "sha256": "0e98a32c550e6096076be2fc3586ed351bdfbdca21a12e5ea91f89354bd4b6fa",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.11.13%2B20250610-x86_64_v3-unknown-linux-musl-install_only_stripped.tar.gz",
+ "sha256": "7e355e8573ccfd47da83a5a44e4810eb84e2218974033f4b9383081acaf130b1",
"variant": null
},
"cpython-3.11.13-linux-x86_64_v4-gnu": {
@@ -12907,8 +13707,8 @@
"minor": 11,
"patch": 13,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.11.13%2B20250604-x86_64_v4-unknown-linux-gnu-install_only_stripped.tar.gz",
- "sha256": "e6a9453c0a0edb0c47dc1337e38c0693e2c7aaaa2ee791618c7e36518cdb51f2",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.11.13%2B20250610-x86_64_v4-unknown-linux-gnu-install_only_stripped.tar.gz",
+ "sha256": "05895fdd12abb42bbaa69c10bb078d1273c35a017392bd580c549226f1362097",
"variant": null
},
"cpython-3.11.13-linux-x86_64_v4-musl": {
@@ -12923,8 +13723,8 @@
"minor": 11,
"patch": 13,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.11.13%2B20250604-x86_64_v4-unknown-linux-musl-install_only_stripped.tar.gz",
- "sha256": "801106590f7e967d69652df0cccc9ac121de38e1a2c1b3e852025afc2652da9f",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.11.13%2B20250610-x86_64_v4-unknown-linux-musl-install_only_stripped.tar.gz",
+ "sha256": "958968d49328cd9dfa2317a25062897b4b8f2f31dcdc869578a069fd753e6008",
"variant": null
},
"cpython-3.11.13-windows-i686-none": {
@@ -12939,8 +13739,8 @@
"minor": 11,
"patch": 13,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.11.13%2B20250604-i686-pc-windows-msvc-install_only_stripped.tar.gz",
- "sha256": "46f69f5b9b2dd9a38f23e3f76e7b6ff342d7bef63695212895cbcbc8f2926004",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.11.13%2B20250610-i686-pc-windows-msvc-install_only_stripped.tar.gz",
+ "sha256": "61257cfb333102cdef13facc8b8d5e021d7ad87b85ff43f8184601738faec15c",
"variant": null
},
"cpython-3.11.13-windows-x86_64-none": {
@@ -12955,8 +13755,8 @@
"minor": 11,
"patch": 13,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.11.13%2B20250604-x86_64-pc-windows-msvc-install_only_stripped.tar.gz",
- "sha256": "16b88d316b3baac72b882893e982fb8f39edf5317fdfdf7c96f68cb023ba4852",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.11.13%2B20250610-x86_64-pc-windows-msvc-install_only_stripped.tar.gz",
+ "sha256": "de5dd979fc8db8069eeac2037ccb3a9b46534fe951b58011851b4124e5c4e210",
"variant": null
},
"cpython-3.11.13+debug-linux-aarch64-gnu": {
@@ -12971,8 +13771,8 @@
"minor": 11,
"patch": 13,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.11.13%2B20250604-aarch64-unknown-linux-gnu-debug-full.tar.zst",
- "sha256": "6da8e87f12619df44b45cb87fe7a7c7d07df3bf9e73491bebc6eadfb936427bb",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.11.13%2B20250610-aarch64-unknown-linux-gnu-debug-full.tar.zst",
+ "sha256": "553b76bad7302d3b546f09ced9d43ff1ad9ecb2126c9036ffd3e0ddd32bfadb8",
"variant": "debug"
},
"cpython-3.11.13+debug-linux-armv7-gnueabi": {
@@ -12987,8 +13787,8 @@
"minor": 11,
"patch": 13,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.11.13%2B20250604-armv7-unknown-linux-gnueabi-debug-full.tar.zst",
- "sha256": "acc0ca10f4761815dd0bc44687f4351cacb8c7926831f862d1924488bfe91153",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.11.13%2B20250610-armv7-unknown-linux-gnueabi-debug-full.tar.zst",
+ "sha256": "04563bab06fb6e17f136a2cb976749460c31a0d10c0746ad18dee9b7f7c71e37",
"variant": "debug"
},
"cpython-3.11.13+debug-linux-armv7-gnueabihf": {
@@ -13003,8 +13803,8 @@
"minor": 11,
"patch": 13,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.11.13%2B20250604-armv7-unknown-linux-gnueabihf-debug-full.tar.zst",
- "sha256": "9c5a72f6f0d0d7571c9984a8f4d1019bb73ace6bf09ec738af0157244036e69f",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.11.13%2B20250610-armv7-unknown-linux-gnueabihf-debug-full.tar.zst",
+ "sha256": "5d5275f16cb666d39b77cb3516aeb75b84337c05c7e2604cfac2f3dc2244229e",
"variant": "debug"
},
"cpython-3.11.13+debug-linux-powerpc64le-gnu": {
@@ -13019,8 +13819,8 @@
"minor": 11,
"patch": 13,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.11.13%2B20250604-ppc64le-unknown-linux-gnu-debug-full.tar.zst",
- "sha256": "ea0255b8947c6134ee665c848cd62255a383109a371436d67ba5cf670fa3f59c",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.11.13%2B20250610-ppc64le-unknown-linux-gnu-debug-full.tar.zst",
+ "sha256": "78cc16b11243a3ff9bf1d8316640c7d8c7ed1a5fda7106204a0fe0cbfe7c21fc",
"variant": "debug"
},
"cpython-3.11.13+debug-linux-riscv64-gnu": {
@@ -13035,8 +13835,8 @@
"minor": 11,
"patch": 13,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.11.13%2B20250604-riscv64-unknown-linux-gnu-debug-full.tar.zst",
- "sha256": "9be52a460b84f191019b7942f2370fa0616c052b513c026d4de0bbb35a123deb",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.11.13%2B20250610-riscv64-unknown-linux-gnu-debug-full.tar.zst",
+ "sha256": "7114aff9c9654306da84fcdbf2f091391ec37e164f25c8fff427a0b8a4ee3eb8",
"variant": "debug"
},
"cpython-3.11.13+debug-linux-s390x-gnu": {
@@ -13051,8 +13851,8 @@
"minor": 11,
"patch": 13,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.11.13%2B20250604-s390x-unknown-linux-gnu-debug-full.tar.zst",
- "sha256": "75c1cf70165750624688beb272a6dfa6a6778f9a81930b161fec27f4ee8e6b24",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.11.13%2B20250610-s390x-unknown-linux-gnu-debug-full.tar.zst",
+ "sha256": "7fde4ac188e45b5462ac82282e6e0b5d2c7b1a5c2e45d409a4683c49bc05135e",
"variant": "debug"
},
"cpython-3.11.13+debug-linux-x86_64-gnu": {
@@ -13067,8 +13867,8 @@
"minor": 11,
"patch": 13,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.11.13%2B20250604-x86_64-unknown-linux-gnu-debug-full.tar.zst",
- "sha256": "2aa5804e64b06091b3a72405abde53517188c5f77e8d5e98a5e405e313284eb7",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.11.13%2B20250610-x86_64-unknown-linux-gnu-debug-full.tar.zst",
+ "sha256": "49594220ac1b60e170693572376d176904a8d9db2bcf75f513d934aa881c04e5",
"variant": "debug"
},
"cpython-3.11.13+debug-linux-x86_64-musl": {
@@ -13083,8 +13883,8 @@
"minor": 11,
"patch": 13,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.11.13%2B20250604-x86_64-unknown-linux-musl-debug-full.tar.zst",
- "sha256": "f18b22d6933d4334910736932bd1f232178841b2a467dd87d41c008f8e8cb99b",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.11.13%2B20250610-x86_64-unknown-linux-musl-debug-full.tar.zst",
+ "sha256": "afae0916c8266987e94ac3c0010a2970b659b6fb4ce9c762db30aaf5d125f780",
"variant": "debug"
},
"cpython-3.11.13+debug-linux-x86_64_v2-gnu": {
@@ -13099,8 +13899,8 @@
"minor": 11,
"patch": 13,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.11.13%2B20250604-x86_64_v2-unknown-linux-gnu-debug-full.tar.zst",
- "sha256": "25126df2224ee12f449acfd706e0f393e4eaa3880d911d23afdb177d44786b53",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.11.13%2B20250610-x86_64_v2-unknown-linux-gnu-debug-full.tar.zst",
+ "sha256": "f13aa93fbb814a4f206d79325c1304f5b2c8f0e97e1233e64c43a11685c15f73",
"variant": "debug"
},
"cpython-3.11.13+debug-linux-x86_64_v2-musl": {
@@ -13115,8 +13915,8 @@
"minor": 11,
"patch": 13,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.11.13%2B20250604-x86_64_v2-unknown-linux-musl-debug-full.tar.zst",
- "sha256": "2e816d1b44580b77c0534777215b2fce32b06b3081a1cacd10400e1e630c65e8",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.11.13%2B20250610-x86_64_v2-unknown-linux-musl-debug-full.tar.zst",
+ "sha256": "3bbf3ce8b347ca78c57181899f9b44c37bfa453afb1bdac167a5636dcfe3ef56",
"variant": "debug"
},
"cpython-3.11.13+debug-linux-x86_64_v3-gnu": {
@@ -13131,8 +13931,8 @@
"minor": 11,
"patch": 13,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.11.13%2B20250604-x86_64_v3-unknown-linux-gnu-debug-full.tar.zst",
- "sha256": "e62fe17549793fc2a2ba32ef6d81ec39e17fd15a3e92eb7a7b9ce9369c447f77",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.11.13%2B20250610-x86_64_v3-unknown-linux-gnu-debug-full.tar.zst",
+ "sha256": "96b8e97849c9f120480aaf9111c3226328db162fd385749fd628bd56245ef6b3",
"variant": "debug"
},
"cpython-3.11.13+debug-linux-x86_64_v3-musl": {
@@ -13147,8 +13947,8 @@
"minor": 11,
"patch": 13,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.11.13%2B20250604-x86_64_v3-unknown-linux-musl-debug-full.tar.zst",
- "sha256": "0475503da3655ec9459a0bac836021d7c88b2c63ce23c88f5a4a56b432c227c1",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.11.13%2B20250610-x86_64_v3-unknown-linux-musl-debug-full.tar.zst",
+ "sha256": "cd90f5f87b4b5a9f5abf6027f094a544e8ffc36a5052682ba7e03a268d3da7e8",
"variant": "debug"
},
"cpython-3.11.13+debug-linux-x86_64_v4-gnu": {
@@ -13163,8 +13963,8 @@
"minor": 11,
"patch": 13,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.11.13%2B20250604-x86_64_v4-unknown-linux-gnu-debug-full.tar.zst",
- "sha256": "10a25150981aa6eb1a8e1421f93acccb9250a455d310d89ba8bcf7818d43a319",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.11.13%2B20250610-x86_64_v4-unknown-linux-gnu-debug-full.tar.zst",
+ "sha256": "ff6c586db7153a71c09c9aa66b8f0cea1a32cec41f64df2b84ace2a054c10f15",
"variant": "debug"
},
"cpython-3.11.13+debug-linux-x86_64_v4-musl": {
@@ -13179,8 +13979,8 @@
"minor": 11,
"patch": 13,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.11.13%2B20250604-x86_64_v4-unknown-linux-musl-debug-full.tar.zst",
- "sha256": "06352d73517471e7a60a5bf7bb7d165564cd98c4d85dc84058b646da6a61b007",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.11.13%2B20250610-x86_64_v4-unknown-linux-musl-debug-full.tar.zst",
+ "sha256": "635cda870c114c2a01f4efe2c9476c89d82615a5666636df3d3c3f74e12beccd",
"variant": "debug"
},
"cpython-3.11.12-darwin-aarch64-none": {
@@ -16971,8 +17771,8 @@
"minor": 10,
"patch": 18,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.10.18%2B20250604-aarch64-apple-darwin-install_only_stripped.tar.gz",
- "sha256": "3d0250ac89b0990ec0715ebffd59108b6a8267efd122cea9e50e6155fa0c22b6",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.10.18%2B20250610-aarch64-apple-darwin-install_only_stripped.tar.gz",
+ "sha256": "e90f9ead9f0195f2d4e774e0166eef67c6e8e44b8e4762eb9539099bb229f49b",
"variant": null
},
"cpython-3.10.18-darwin-x86_64-none": {
@@ -16987,8 +17787,8 @@
"minor": 10,
"patch": 18,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.10.18%2B20250604-x86_64-apple-darwin-install_only_stripped.tar.gz",
- "sha256": "253e24f8a828711ec7fd753e451751fd0dda578ee9edfbf55c3bebeba3fb1ba7",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.10.18%2B20250610-x86_64-apple-darwin-install_only_stripped.tar.gz",
+ "sha256": "0905eda558db07f1e79b03deee7d22416aa0cd06e9c307c0bfa6a9e95113da83",
"variant": null
},
"cpython-3.10.18-linux-aarch64-gnu": {
@@ -17003,8 +17803,8 @@
"minor": 10,
"patch": 18,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.10.18%2B20250604-aarch64-unknown-linux-gnu-install_only_stripped.tar.gz",
- "sha256": "a7d5320d19ca8bea0938cdbb0cc5996ca6b2345e04a6c1ed82edd531bd528734",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.10.18%2B20250610-aarch64-unknown-linux-gnu-install_only_stripped.tar.gz",
+ "sha256": "1e2cc082bc02698cc1587600242f96cafde4d57623376fa0bf2a2f8c373562dc",
"variant": null
},
"cpython-3.10.18-linux-armv7-gnueabi": {
@@ -17019,8 +17819,8 @@
"minor": 10,
"patch": 18,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.10.18%2B20250604-armv7-unknown-linux-gnueabi-install_only_stripped.tar.gz",
- "sha256": "da98d3eed90fd57d17cde0ea7121c38bf4e54754084004ad5900c8ac98f69a73",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.10.18%2B20250610-armv7-unknown-linux-gnueabi-install_only_stripped.tar.gz",
+ "sha256": "29b28a35041f581a7383781e2fd5bbf2d028738e354d9120c05ad806ba6fac3c",
"variant": null
},
"cpython-3.10.18-linux-armv7-gnueabihf": {
@@ -17035,8 +17835,8 @@
"minor": 10,
"patch": 18,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.10.18%2B20250604-armv7-unknown-linux-gnueabihf-install_only_stripped.tar.gz",
- "sha256": "ca25e59d3e230de1cbf2e3e3ce92d24d82c1860588133d2b1daeefc7b83adad0",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.10.18%2B20250610-armv7-unknown-linux-gnueabihf-install_only_stripped.tar.gz",
+ "sha256": "0889254007063506f82542fa945360fc240be168009be0ed5441d40487027f41",
"variant": null
},
"cpython-3.10.18-linux-powerpc64le-gnu": {
@@ -17051,8 +17851,8 @@
"minor": 10,
"patch": 18,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.10.18%2B20250604-ppc64le-unknown-linux-gnu-install_only_stripped.tar.gz",
- "sha256": "503a7e4b53d2b9367996cde1bfe65170691092d537d8f67e82ea31e674eb5265",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.10.18%2B20250610-ppc64le-unknown-linux-gnu-install_only_stripped.tar.gz",
+ "sha256": "a06363e1c4b85420ef1341a0ce7cf55b9f0c40b887dbec40c796284a749708e7",
"variant": null
},
"cpython-3.10.18-linux-riscv64-gnu": {
@@ -17067,8 +17867,8 @@
"minor": 10,
"patch": 18,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.10.18%2B20250604-riscv64-unknown-linux-gnu-install_only_stripped.tar.gz",
- "sha256": "38ea6ee623c73422a3f5d099dccdb4d0c4a02dceb242ea6986fe80e30856bf0b",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.10.18%2B20250610-riscv64-unknown-linux-gnu-install_only_stripped.tar.gz",
+ "sha256": "e13aba8c8e66f4a48283e0132fc4749310e076bb38fd3f040b47f2d2f812e406",
"variant": null
},
"cpython-3.10.18-linux-s390x-gnu": {
@@ -17083,8 +17883,8 @@
"minor": 10,
"patch": 18,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.10.18%2B20250604-s390x-unknown-linux-gnu-install_only_stripped.tar.gz",
- "sha256": "c2f3357dc39951a726d5d42b5fd451d4103072f18ecc2a32c8935c6efadbd52d",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.10.18%2B20250610-s390x-unknown-linux-gnu-install_only_stripped.tar.gz",
+ "sha256": "189f6230cb6c60cf572613cbbc5a253a2df13b350fc230066246013da0274dee",
"variant": null
},
"cpython-3.10.18-linux-x86_64-gnu": {
@@ -17099,8 +17899,8 @@
"minor": 10,
"patch": 18,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.10.18%2B20250604-x86_64-unknown-linux-gnu-install_only_stripped.tar.gz",
- "sha256": "b8516e851fca78c57c8fa557007ad169771380d7e5ac72bf7e39b1b197783e19",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.10.18%2B20250610-x86_64-unknown-linux-gnu-install_only_stripped.tar.gz",
+ "sha256": "4666a17185ad7f119b83c6dad45ca3ca22e5e63b00a34d52e3b5efba57a3063a",
"variant": null
},
"cpython-3.10.18-linux-x86_64-musl": {
@@ -17115,8 +17915,8 @@
"minor": 10,
"patch": 18,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.10.18%2B20250604-x86_64-unknown-linux-musl-install_only_stripped.tar.gz",
- "sha256": "a5ed25422ae8961fb10727391c48c55414382e82a66d6f8348c9b13f81b226d0",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.10.18%2B20250610-x86_64-unknown-linux-musl-install_only_stripped.tar.gz",
+ "sha256": "12fa7705b7c8b1cb9f33f81e21b2cf83062d45f5e220a694189ea20901612b44",
"variant": null
},
"cpython-3.10.18-linux-x86_64_v2-gnu": {
@@ -17131,8 +17931,8 @@
"minor": 10,
"patch": 18,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.10.18%2B20250604-x86_64_v2-unknown-linux-gnu-install_only_stripped.tar.gz",
- "sha256": "b5d3425f9343295cffa0954218640a7e6fa32d57d04dbd3896c79da0e8843467",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.10.18%2B20250610-x86_64_v2-unknown-linux-gnu-install_only_stripped.tar.gz",
+ "sha256": "b6e3c1b3ac662073e1e7187e73e6a6aa8825b2eeaf5f670a38dca2d8ac8f8415",
"variant": null
},
"cpython-3.10.18-linux-x86_64_v2-musl": {
@@ -17147,8 +17947,8 @@
"minor": 10,
"patch": 18,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.10.18%2B20250604-x86_64_v2-unknown-linux-musl-install_only_stripped.tar.gz",
- "sha256": "b79940db2dd9da04cbf0a700ca409430f04f435c03044a37bb9a271bc6544606",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.10.18%2B20250610-x86_64_v2-unknown-linux-musl-install_only_stripped.tar.gz",
+ "sha256": "634e6fab2e22d9a7a64fac6ce3b2a403ebb22fbabb9ac1a938c76dca7e84a0fe",
"variant": null
},
"cpython-3.10.18-linux-x86_64_v3-gnu": {
@@ -17163,8 +17963,8 @@
"minor": 10,
"patch": 18,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.10.18%2B20250604-x86_64_v3-unknown-linux-gnu-install_only_stripped.tar.gz",
- "sha256": "7ac40bdf626e3a7018d5580464e22bad97646b08da7a8b8b62d7b174aaf5c828",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.10.18%2B20250610-x86_64_v3-unknown-linux-gnu-install_only_stripped.tar.gz",
+ "sha256": "59b806c178b247dd90e036e8b93631ba8958c385f0ac6486770e030715d8020a",
"variant": null
},
"cpython-3.10.18-linux-x86_64_v3-musl": {
@@ -17179,8 +17979,8 @@
"minor": 10,
"patch": 18,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.10.18%2B20250604-x86_64_v3-unknown-linux-musl-install_only_stripped.tar.gz",
- "sha256": "43d75b8dcc3a0d0e1cfff6e2be7044208e6f9e9141afe70aa550e2358d31a0b4",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.10.18%2B20250610-x86_64_v3-unknown-linux-musl-install_only_stripped.tar.gz",
+ "sha256": "1cd4b2e14c442d2f7cdac550017adec3dad4eac5c6147e2e9a5e664ff37556e5",
"variant": null
},
"cpython-3.10.18-linux-x86_64_v4-gnu": {
@@ -17195,8 +17995,8 @@
"minor": 10,
"patch": 18,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.10.18%2B20250604-x86_64_v4-unknown-linux-gnu-install_only_stripped.tar.gz",
- "sha256": "a406ef21373cda258547cdbeb95a94e1de6d470c8b59750ad3b697db389e4bb9",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.10.18%2B20250610-x86_64_v4-unknown-linux-gnu-install_only_stripped.tar.gz",
+ "sha256": "8d64ef28b473bc6a73fbc85c7f1c70c5cd6b54c35796a7b1166b284def8486c9",
"variant": null
},
"cpython-3.10.18-linux-x86_64_v4-musl": {
@@ -17211,8 +18011,8 @@
"minor": 10,
"patch": 18,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.10.18%2B20250604-x86_64_v4-unknown-linux-musl-install_only_stripped.tar.gz",
- "sha256": "9645bf9ac0212dc5d30616ecf0f8dd7c4a75193cf7e65f65e97f21226b388f13",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.10.18%2B20250610-x86_64_v4-unknown-linux-musl-install_only_stripped.tar.gz",
+ "sha256": "7df05a0a40aa23ffb517d2d1d8797e7055c1f427dfd0a8844fb2599f31ef73c1",
"variant": null
},
"cpython-3.10.18-windows-i686-none": {
@@ -17227,8 +18027,8 @@
"minor": 10,
"patch": 18,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.10.18%2B20250604-i686-pc-windows-msvc-install_only_stripped.tar.gz",
- "sha256": "ac5b16f698e307c478d78291cabe2c3797129c1e6831e31f39f08b756b68cbda",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.10.18%2B20250610-i686-pc-windows-msvc-install_only_stripped.tar.gz",
+ "sha256": "ee8de30edf040f57e878ace6b78e684119bad9bd5ccad6306d32e35a2fe6773d",
"variant": null
},
"cpython-3.10.18-windows-x86_64-none": {
@@ -17243,8 +18043,8 @@
"minor": 10,
"patch": 18,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.10.18%2B20250604-x86_64-pc-windows-msvc-install_only_stripped.tar.gz",
- "sha256": "d60b7bb3ce070cd60ce61ddf7af745e73466827d80937de8be6ff60846353210",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.10.18%2B20250610-x86_64-pc-windows-msvc-install_only_stripped.tar.gz",
+ "sha256": "2b8dc3a32c0d5790cfc2f469c0b84beda85531e7c487d5969cbaecb7a9338e67",
"variant": null
},
"cpython-3.10.18+debug-linux-aarch64-gnu": {
@@ -17259,8 +18059,8 @@
"minor": 10,
"patch": 18,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.10.18%2B20250604-aarch64-unknown-linux-gnu-debug-full.tar.zst",
- "sha256": "7d613f98feccd2dbf40fefa35b3691097a22a3a408cfc81dcce13305ea7c3b64",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.10.18%2B20250610-aarch64-unknown-linux-gnu-debug-full.tar.zst",
+ "sha256": "43c6eb807c29d99068245a5f75289d4f7315ad6d95d0e74c093b027d5b91b45c",
"variant": "debug"
},
"cpython-3.10.18+debug-linux-armv7-gnueabi": {
@@ -17275,8 +18075,8 @@
"minor": 10,
"patch": 18,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.10.18%2B20250604-armv7-unknown-linux-gnueabi-debug-full.tar.zst",
- "sha256": "17542aa1b42fca63ed1afb1eb055bbf4903ce0ec07d1fc4aaa31f2f2e928d799",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.10.18%2B20250610-armv7-unknown-linux-gnueabi-debug-full.tar.zst",
+ "sha256": "2a9e42d99e0daee9842f2c636b88004baa5f7f9fef9f188e2110c6964a3c16e7",
"variant": "debug"
},
"cpython-3.10.18+debug-linux-armv7-gnueabihf": {
@@ -17291,8 +18091,8 @@
"minor": 10,
"patch": 18,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.10.18%2B20250604-armv7-unknown-linux-gnueabihf-debug-full.tar.zst",
- "sha256": "9b62d4c3ac94dd445a7872775858b232e9b5901579f5ff63ca243afa989977a7",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.10.18%2B20250610-armv7-unknown-linux-gnueabihf-debug-full.tar.zst",
+ "sha256": "276142d5c90f459ff2e5ee2389f2ef32f51db6c9fcd3e5e751056e46f2260e2d",
"variant": "debug"
},
"cpython-3.10.18+debug-linux-powerpc64le-gnu": {
@@ -17307,8 +18107,8 @@
"minor": 10,
"patch": 18,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.10.18%2B20250604-ppc64le-unknown-linux-gnu-debug-full.tar.zst",
- "sha256": "7d18f668da354af30daf711b0ef8ad61580d884c22fa5a076683513ff841a997",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.10.18%2B20250610-ppc64le-unknown-linux-gnu-debug-full.tar.zst",
+ "sha256": "061b884b0d24fee3235f9c66ff8dc4154fdbdd5b060927af25362889ef1b8bc6",
"variant": "debug"
},
"cpython-3.10.18+debug-linux-riscv64-gnu": {
@@ -17323,8 +18123,8 @@
"minor": 10,
"patch": 18,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.10.18%2B20250604-riscv64-unknown-linux-gnu-debug-full.tar.zst",
- "sha256": "503417e0a80868f6e63ba673d310ded7048620b3f9caa6b4db0d50e33e26ab43",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.10.18%2B20250610-riscv64-unknown-linux-gnu-debug-full.tar.zst",
+ "sha256": "a4257f9ca62d6b30bf55795839c702353e34ced442538b56546e6c1c4e2488e6",
"variant": "debug"
},
"cpython-3.10.18+debug-linux-s390x-gnu": {
@@ -17339,8 +18139,8 @@
"minor": 10,
"patch": 18,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.10.18%2B20250604-s390x-unknown-linux-gnu-debug-full.tar.zst",
- "sha256": "c07852a8e4e51633e99063ff461f0eb4e8c7cfb7c1138cb00ca76c0bb7feeca5",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.10.18%2B20250610-s390x-unknown-linux-gnu-debug-full.tar.zst",
+ "sha256": "31c26eae24a0f307105d7707929badc968ccb471c410d891f495889e74a8578d",
"variant": "debug"
},
"cpython-3.10.18+debug-linux-x86_64-gnu": {
@@ -17355,8 +18155,8 @@
"minor": 10,
"patch": 18,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.10.18%2B20250604-x86_64-unknown-linux-gnu-debug-full.tar.zst",
- "sha256": "f6a9adbd47e7471b03fc1e20f9a9ff8d5afee86660aa9243a79c1ef1f5cd69b0",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.10.18%2B20250610-x86_64-unknown-linux-gnu-debug-full.tar.zst",
+ "sha256": "7976fa66b88b22be13bf007cd049ddb45549cd34b00997b89aa561fe1724196f",
"variant": "debug"
},
"cpython-3.10.18+debug-linux-x86_64-musl": {
@@ -17371,8 +18171,8 @@
"minor": 10,
"patch": 18,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.10.18%2B20250604-x86_64-unknown-linux-musl-debug-full.tar.zst",
- "sha256": "a21fe7c08a1dfae156016de2f620daa5148ecd0a3e4849e4d313a81ff889d563",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.10.18%2B20250610-x86_64-unknown-linux-musl-debug-full.tar.zst",
+ "sha256": "0a4161de9117fd4508d239eb2551851e18d5a14eac36854188723822fb20ca47",
"variant": "debug"
},
"cpython-3.10.18+debug-linux-x86_64_v2-gnu": {
@@ -17387,8 +18187,8 @@
"minor": 10,
"patch": 18,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.10.18%2B20250604-x86_64_v2-unknown-linux-gnu-debug-full.tar.zst",
- "sha256": "e0e04e750ba0b4ee4e49b1127a0ba2045ecaa5c7bd5d9356476193fe1657eb75",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.10.18%2B20250610-x86_64_v2-unknown-linux-gnu-debug-full.tar.zst",
+ "sha256": "fe4aa4090f85a939fc1b53f0b6c549a050d1fc7153f20cb3bbfb9c82a244791e",
"variant": "debug"
},
"cpython-3.10.18+debug-linux-x86_64_v2-musl": {
@@ -17403,8 +18203,8 @@
"minor": 10,
"patch": 18,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.10.18%2B20250604-x86_64_v2-unknown-linux-musl-debug-full.tar.zst",
- "sha256": "7746c97f0f1a71ab187cb201ef6b36fa08ee37c4bccca28d8cd9385d4a7cb451",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.10.18%2B20250610-x86_64_v2-unknown-linux-musl-debug-full.tar.zst",
+ "sha256": "a2e9917b8606ff765ab0cc012a18bc605430a3a2b4134ba57585c89f69bda570",
"variant": "debug"
},
"cpython-3.10.18+debug-linux-x86_64_v3-gnu": {
@@ -17419,8 +18219,8 @@
"minor": 10,
"patch": 18,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.10.18%2B20250604-x86_64_v3-unknown-linux-gnu-debug-full.tar.zst",
- "sha256": "a9770a9845b3c60cfacaf2a2149c14fcf9c8ce4123554653d71abe9265879def",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.10.18%2B20250610-x86_64_v3-unknown-linux-gnu-debug-full.tar.zst",
+ "sha256": "0ad7506ed1f602163881fd8b886f4390e206f03dd88ee357f83d1ac6024dda29",
"variant": "debug"
},
"cpython-3.10.18+debug-linux-x86_64_v3-musl": {
@@ -17435,8 +18235,8 @@
"minor": 10,
"patch": 18,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.10.18%2B20250604-x86_64_v3-unknown-linux-musl-debug-full.tar.zst",
- "sha256": "d63f9310747995538488cfa4772cc9d61d03d005c0c0f3795bc29936c4ca6935",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.10.18%2B20250610-x86_64_v3-unknown-linux-musl-debug-full.tar.zst",
+ "sha256": "ac0a51e018cb7d8c44f276748f79fdb967ee38a0f5bd9e41dbc26ba45da495cd",
"variant": "debug"
},
"cpython-3.10.18+debug-linux-x86_64_v4-gnu": {
@@ -17451,8 +18251,8 @@
"minor": 10,
"patch": 18,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.10.18%2B20250604-x86_64_v4-unknown-linux-gnu-debug-full.tar.zst",
- "sha256": "6b024935ec598b7a45acce6786f36ecafaa3be7dac3b6ffc47564771f79de512",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.10.18%2B20250610-x86_64_v4-unknown-linux-gnu-debug-full.tar.zst",
+ "sha256": "247e2d716edc2c2d18327fe94747d15a1ad32a99e44988c71e373786853a2a23",
"variant": "debug"
},
"cpython-3.10.18+debug-linux-x86_64_v4-musl": {
@@ -17467,8 +18267,8 @@
"minor": 10,
"patch": 18,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.10.18%2B20250604-x86_64_v4-unknown-linux-musl-debug-full.tar.zst",
- "sha256": "521b6c6761f5be49f870dcaab2028abca8db41335bbc42f3e4bfd610001f17b4",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.10.18%2B20250610-x86_64_v4-unknown-linux-musl-debug-full.tar.zst",
+ "sha256": "d6783237189a6de3073a4a56d0fabfaee5c280c09fce1f5296a9e3547c3965c7",
"variant": "debug"
},
"cpython-3.10.17-darwin-aarch64-none": {
@@ -22411,8 +23211,8 @@
"minor": 9,
"patch": 23,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.9.23%2B20250604-aarch64-apple-darwin-install_only_stripped.tar.gz",
- "sha256": "66261d94390af4dc9a352874ae8b6212560558eec12d4ef990ad1f369b0b282c",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.9.23%2B20250610-aarch64-apple-darwin-install_only_stripped.tar.gz",
+ "sha256": "f52a70d126ca83ea45f9a3284a33f7c11336a2a144406970fd982b2ed57a3fc4",
"variant": null
},
"cpython-3.9.23-darwin-x86_64-none": {
@@ -22427,8 +23227,8 @@
"minor": 9,
"patch": 23,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.9.23%2B20250604-x86_64-apple-darwin-install_only_stripped.tar.gz",
- "sha256": "c75e6f6acaf6e97586ec2dace9d1d1c1b08170a7edeeec4c018328bdf98fadec",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.9.23%2B20250610-x86_64-apple-darwin-install_only_stripped.tar.gz",
+ "sha256": "3b3d3c92c1af6cf652b7067eadffe29e43973d47c23e4f243e70a56d99bb951f",
"variant": null
},
"cpython-3.9.23-linux-aarch64-gnu": {
@@ -22443,8 +23243,8 @@
"minor": 9,
"patch": 23,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.9.23%2B20250604-aarch64-unknown-linux-gnu-install_only_stripped.tar.gz",
- "sha256": "6aed3756ca15618d502ca6b6dd3618525ad07944d835b4cfce445340ead9993f",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.9.23%2B20250610-aarch64-unknown-linux-gnu-install_only_stripped.tar.gz",
+ "sha256": "df6ec4f3f56b77cd670ad30179aa9fb061f144027113bd0892bfb6173c6422c4",
"variant": null
},
"cpython-3.9.23-linux-armv7-gnueabi": {
@@ -22459,8 +23259,8 @@
"minor": 9,
"patch": 23,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.9.23%2B20250604-armv7-unknown-linux-gnueabi-install_only_stripped.tar.gz",
- "sha256": "c569507edd4e33c31b965adca6734e3418980389b37b5d4db6dcc3379164795c",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.9.23%2B20250610-armv7-unknown-linux-gnueabi-install_only_stripped.tar.gz",
+ "sha256": "7c1ed7618370b89e2bc37dcb1f6bf14488f63f681e3a5f8193a451593122b505",
"variant": null
},
"cpython-3.9.23-linux-armv7-gnueabihf": {
@@ -22475,8 +23275,8 @@
"minor": 9,
"patch": 23,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.9.23%2B20250604-armv7-unknown-linux-gnueabihf-install_only_stripped.tar.gz",
- "sha256": "0254ec392a40d4be22a8b8aae47ba5f95f7f3b20d91460b6dce28e979a20e125",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.9.23%2B20250610-armv7-unknown-linux-gnueabihf-install_only_stripped.tar.gz",
+ "sha256": "f38ec0cda1fc7e470deaad2e2d5732a2784ca4156101f32864a04378785cf993",
"variant": null
},
"cpython-3.9.23-linux-powerpc64le-gnu": {
@@ -22491,8 +23291,8 @@
"minor": 9,
"patch": 23,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.9.23%2B20250604-ppc64le-unknown-linux-gnu-install_only_stripped.tar.gz",
- "sha256": "0c2aa9e2e43f14545a536f79cbd39965817387ac0d12facdc3802b193b4d5276",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.9.23%2B20250610-ppc64le-unknown-linux-gnu-install_only_stripped.tar.gz",
+ "sha256": "5534ef16f0a3c518ce41841739a742cdc89d04d21e60f9f34c6066b9fab35bf9",
"variant": null
},
"cpython-3.9.23-linux-riscv64-gnu": {
@@ -22507,8 +23307,8 @@
"minor": 9,
"patch": 23,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.9.23%2B20250604-riscv64-unknown-linux-gnu-install_only_stripped.tar.gz",
- "sha256": "8b6c4a98aca5e7fc63e5fb85a190293a399c6c87f58d7d5cafc719adaa7957f1",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.9.23%2B20250610-riscv64-unknown-linux-gnu-install_only_stripped.tar.gz",
+ "sha256": "9a12e10df64768a7a5989b3ff28b682d1241f00d73eb4f6680ff3927d99395f6",
"variant": null
},
"cpython-3.9.23-linux-s390x-gnu": {
@@ -22523,8 +23323,8 @@
"minor": 9,
"patch": 23,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.9.23%2B20250604-s390x-unknown-linux-gnu-install_only_stripped.tar.gz",
- "sha256": "ddf1ef3a037e0f655ac64611ddd94b5ffa12cdf5cc06c0503ae0d6a211dc9eb3",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.9.23%2B20250610-s390x-unknown-linux-gnu-install_only_stripped.tar.gz",
+ "sha256": "134227486d8ab8bb98f765d5c660a14bdea1bd5875eaf0d103fc5c8b6bc68f15",
"variant": null
},
"cpython-3.9.23-linux-x86_64-gnu": {
@@ -22539,8 +23339,8 @@
"minor": 9,
"patch": 23,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.9.23%2B20250604-x86_64-unknown-linux-gnu-install_only_stripped.tar.gz",
- "sha256": "63ab1e04930c19a2534a88754dcb303f349d922b53d2609d403c4e3970dbb7a3",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.9.23%2B20250610-x86_64-unknown-linux-gnu-install_only_stripped.tar.gz",
+ "sha256": "c868a50e6c98dc593fd536ddea34d43679470f489255d61353e5c8c0ec1c7db3",
"variant": null
},
"cpython-3.9.23-linux-x86_64-musl": {
@@ -22555,8 +23355,8 @@
"minor": 9,
"patch": 23,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.9.23%2B20250604-x86_64-unknown-linux-musl-install_only_stripped.tar.gz",
- "sha256": "1d84c486dcbbc24a051e7ad3d4ea473e471ff138c40b4cb419e6285146ded37b",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.9.23%2B20250610-x86_64-unknown-linux-musl-install_only_stripped.tar.gz",
+ "sha256": "68e0ef43131e6d2ef7059e8cba179a385c2dd254a10b5bd9b8b64efa138fb2ed",
"variant": null
},
"cpython-3.9.23-linux-x86_64_v2-gnu": {
@@ -22571,8 +23371,8 @@
"minor": 9,
"patch": 23,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.9.23%2B20250604-x86_64_v2-unknown-linux-gnu-install_only_stripped.tar.gz",
- "sha256": "24100b4ecb55f104e221fa0935e03d18ac3df1cf4fcd5bac20fab7f398264ec1",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.9.23%2B20250610-x86_64_v2-unknown-linux-gnu-install_only_stripped.tar.gz",
+ "sha256": "9fd317387b3549a0e552b6c8b096e0eb46912ceb63df2f6e80d60ce43b2aa917",
"variant": null
},
"cpython-3.9.23-linux-x86_64_v2-musl": {
@@ -22587,8 +23387,8 @@
"minor": 9,
"patch": 23,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.9.23%2B20250604-x86_64_v2-unknown-linux-musl-install_only_stripped.tar.gz",
- "sha256": "3e08248e0b4da87dcaab1aecd8453a54cccd31cd7a4542e679da145da76feaec",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.9.23%2B20250610-x86_64_v2-unknown-linux-musl-install_only_stripped.tar.gz",
+ "sha256": "233a9dcd9a0ed49eeea8c891ef2289ce8c122d3bce214fdae6f2d5ff81e48539",
"variant": null
},
"cpython-3.9.23-linux-x86_64_v3-gnu": {
@@ -22603,8 +23403,8 @@
"minor": 9,
"patch": 23,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.9.23%2B20250604-x86_64_v3-unknown-linux-gnu-install_only_stripped.tar.gz",
- "sha256": "0aeeaed7063962e42df4009601f08663dc3699672428f455e6360f84c969ef10",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.9.23%2B20250610-x86_64_v3-unknown-linux-gnu-install_only_stripped.tar.gz",
+ "sha256": "b9c3112be31c6b2535902f5e1255f9385f4e8e05345316ac19f2a11007df53e2",
"variant": null
},
"cpython-3.9.23-linux-x86_64_v3-musl": {
@@ -22619,8 +23419,8 @@
"minor": 9,
"patch": 23,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.9.23%2B20250604-x86_64_v3-unknown-linux-musl-install_only_stripped.tar.gz",
- "sha256": "06d1177a276f9dd1471e95b9b3b01cd4fba8a1d1252a4fae1cf7917cead582c3",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.9.23%2B20250610-x86_64_v3-unknown-linux-musl-install_only_stripped.tar.gz",
+ "sha256": "a0859a358ef1c6678dfa8681d1cb8b483ba970df11fe9df06c28f575b6b4b30f",
"variant": null
},
"cpython-3.9.23-linux-x86_64_v4-gnu": {
@@ -22635,8 +23435,8 @@
"minor": 9,
"patch": 23,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.9.23%2B20250604-x86_64_v4-unknown-linux-gnu-install_only_stripped.tar.gz",
- "sha256": "3a7f40090da03982a29d9612b7bae6a2d0f979f5fc29c97e77e56a8670028d0b",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.9.23%2B20250610-x86_64_v4-unknown-linux-gnu-install_only_stripped.tar.gz",
+ "sha256": "937f1d800022b79c66dde564bcb5ff6f24996a41de5b617ece63b931360b6615",
"variant": null
},
"cpython-3.9.23-linux-x86_64_v4-musl": {
@@ -22651,8 +23451,8 @@
"minor": 9,
"patch": 23,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.9.23%2B20250604-x86_64_v4-unknown-linux-musl-install_only_stripped.tar.gz",
- "sha256": "8df79205510e424729fcb99a940a9e1e61a83571044bf63b1da8fce308890f6b",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.9.23%2B20250610-x86_64_v4-unknown-linux-musl-install_only_stripped.tar.gz",
+ "sha256": "6e03cd3595fe40da43b2e745f1edac939893e441dfe38bf87776f1672e5079cb",
"variant": null
},
"cpython-3.9.23-windows-i686-none": {
@@ -22667,8 +23467,8 @@
"minor": 9,
"patch": 23,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.9.23%2B20250604-i686-pc-windows-msvc-install_only_stripped.tar.gz",
- "sha256": "23394d3825b3703017225897f5d05035e3fe502dbd5a77cd97e2c479129a1572",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.9.23%2B20250610-i686-pc-windows-msvc-install_only_stripped.tar.gz",
+ "sha256": "31b14fe77965231c9a88b6a8b75452b461d78d9ff220740d218a3834ad35a76e",
"variant": null
},
"cpython-3.9.23-windows-x86_64-none": {
@@ -22683,8 +23483,8 @@
"minor": 9,
"patch": 23,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.9.23%2B20250604-x86_64-pc-windows-msvc-install_only_stripped.tar.gz",
- "sha256": "e45a280c1680d6a6061d5246ae06489cf35848c98d5a048a7b505c6f89931bae",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.9.23%2B20250610-x86_64-pc-windows-msvc-install_only_stripped.tar.gz",
+ "sha256": "f9dc5a0a1838004e853c1c54cf22aa1a2f8d44a075ea1728cce33f91c187e83c",
"variant": null
},
"cpython-3.9.23+debug-linux-aarch64-gnu": {
@@ -22699,8 +23499,8 @@
"minor": 9,
"patch": 23,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.9.23%2B20250604-aarch64-unknown-linux-gnu-debug-full.tar.zst",
- "sha256": "46ddea12039a935112388ff1538066b614ae37613da3e2a0e7bc0ec0f3223605",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.9.23%2B20250610-aarch64-unknown-linux-gnu-debug-full.tar.zst",
+ "sha256": "9dbf14b38042a53a8ca19ae2dcaebaab0add1b3aa60d7513e684af390d1252df",
"variant": "debug"
},
"cpython-3.9.23+debug-linux-armv7-gnueabi": {
@@ -22715,8 +23515,8 @@
"minor": 9,
"patch": 23,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.9.23%2B20250604-armv7-unknown-linux-gnueabi-debug-full.tar.zst",
- "sha256": "c930d0ee01d54aa626d1cded6edb330ba420b2524d93d89e76c18372bdcde80f",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.9.23%2B20250610-armv7-unknown-linux-gnueabi-debug-full.tar.zst",
+ "sha256": "a31480290755a502d564819c97f29ef059ca76631c87a8eff50b57439201901a",
"variant": "debug"
},
"cpython-3.9.23+debug-linux-armv7-gnueabihf": {
@@ -22731,8 +23531,8 @@
"minor": 9,
"patch": 23,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.9.23%2B20250604-armv7-unknown-linux-gnueabihf-debug-full.tar.zst",
- "sha256": "d0671ac71f7a8a0eeffe45201e49be283c33f01731fc18ee30de05632c989061",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.9.23%2B20250610-armv7-unknown-linux-gnueabihf-debug-full.tar.zst",
+ "sha256": "66978d1bad34bb6bf2fb459ef7eee386036353655f6c5499ed09485f261c7a51",
"variant": "debug"
},
"cpython-3.9.23+debug-linux-powerpc64le-gnu": {
@@ -22747,8 +23547,8 @@
"minor": 9,
"patch": 23,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.9.23%2B20250604-ppc64le-unknown-linux-gnu-debug-full.tar.zst",
- "sha256": "c0ad3c512daaf7ab95031117a99efd65e050012f377018a4a6dcaddfd1b3cfca",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.9.23%2B20250610-ppc64le-unknown-linux-gnu-debug-full.tar.zst",
+ "sha256": "9eb92db484099e9e63ef2addb24c97bbf481d0f5d4b1bc82854c56fa64880ff8",
"variant": "debug"
},
"cpython-3.9.23+debug-linux-riscv64-gnu": {
@@ -22763,8 +23563,8 @@
"minor": 9,
"patch": 23,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.9.23%2B20250604-riscv64-unknown-linux-gnu-debug-full.tar.zst",
- "sha256": "9e54ad5665366623b8e9519a534cd47e587d273a86f3f1ee3d93b6efc5bfc1c8",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.9.23%2B20250610-riscv64-unknown-linux-gnu-debug-full.tar.zst",
+ "sha256": "48a17dd3563c6b4ad08fbb13e8747b4dbe6626eb371a2102c1a21025eb85de71",
"variant": "debug"
},
"cpython-3.9.23+debug-linux-s390x-gnu": {
@@ -22779,8 +23579,8 @@
"minor": 9,
"patch": 23,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.9.23%2B20250604-s390x-unknown-linux-gnu-debug-full.tar.zst",
- "sha256": "b4df18af220dc9a6e3e0153849cb20172d8f4d5b4d8f5310d5ee8c947f05b88b",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.9.23%2B20250610-s390x-unknown-linux-gnu-debug-full.tar.zst",
+ "sha256": "e33df170febe0cba1eb441cb9feea2b3c4162f9038eac1f7bd90a12019cdeff4",
"variant": "debug"
},
"cpython-3.9.23+debug-linux-x86_64-gnu": {
@@ -22795,8 +23595,8 @@
"minor": 9,
"patch": 23,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.9.23%2B20250604-x86_64-unknown-linux-gnu-debug-full.tar.zst",
- "sha256": "2725914e28bf9eabcbdcd1649d5eb415f98e857372dab9f78080241a44387a75",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.9.23%2B20250610-x86_64-unknown-linux-gnu-debug-full.tar.zst",
+ "sha256": "ec38829b92a439b5bb7a8779ae70d567b242d2a260056253bda723affc607285",
"variant": "debug"
},
"cpython-3.9.23+debug-linux-x86_64-musl": {
@@ -22811,8 +23611,8 @@
"minor": 9,
"patch": 23,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.9.23%2B20250604-x86_64-unknown-linux-musl-debug-full.tar.zst",
- "sha256": "3b73369fc80a548bc3eb56a4106ab7689a2ac2e96e6415965df016ffe5ad358f",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.9.23%2B20250610-x86_64-unknown-linux-musl-debug-full.tar.zst",
+ "sha256": "739834ee9c93dd2babddb073f8c0baa477cccd9c80372438be99da31c1caa8ea",
"variant": "debug"
},
"cpython-3.9.23+debug-linux-x86_64_v2-gnu": {
@@ -22827,8 +23627,8 @@
"minor": 9,
"patch": 23,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.9.23%2B20250604-x86_64_v2-unknown-linux-gnu-debug-full.tar.zst",
- "sha256": "a046e8c69345440d0b31b706e03a0092ae1b1d7e94638a8aa1dfe1df7e8544fe",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.9.23%2B20250610-x86_64_v2-unknown-linux-gnu-debug-full.tar.zst",
+ "sha256": "72625c64ba82449ffa06b204c9690eb3adf68780d9f68066db66b7278222a7ca",
"variant": "debug"
},
"cpython-3.9.23+debug-linux-x86_64_v2-musl": {
@@ -22843,8 +23643,8 @@
"minor": 9,
"patch": 23,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.9.23%2B20250604-x86_64_v2-unknown-linux-musl-debug-full.tar.zst",
- "sha256": "5c3dc4d786d78ae94cab3152b55bbe7b5c9514fa977cbd52ef26aba382b26231",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.9.23%2B20250610-x86_64_v2-unknown-linux-musl-debug-full.tar.zst",
+ "sha256": "d994f89d442329e1280e49f45c477cd0cba80d46bbaa9919c2efb8b4da203924",
"variant": "debug"
},
"cpython-3.9.23+debug-linux-x86_64_v3-gnu": {
@@ -22859,8 +23659,8 @@
"minor": 9,
"patch": 23,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.9.23%2B20250604-x86_64_v3-unknown-linux-gnu-debug-full.tar.zst",
- "sha256": "3db582893571da8422dea4ddcd596542af9de69427506067e66ffbece5b8c13c",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.9.23%2B20250610-x86_64_v3-unknown-linux-gnu-debug-full.tar.zst",
+ "sha256": "e938c18d3b02a665e8e620444e0c1a58f5fe408d5d22e287165d136c561d05e0",
"variant": "debug"
},
"cpython-3.9.23+debug-linux-x86_64_v3-musl": {
@@ -22875,8 +23675,8 @@
"minor": 9,
"patch": 23,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.9.23%2B20250604-x86_64_v3-unknown-linux-musl-debug-full.tar.zst",
- "sha256": "d2e55a20da40192e6914cb52e73f94b3da03d24cd8b514c59173115021adfa91",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.9.23%2B20250610-x86_64_v3-unknown-linux-musl-debug-full.tar.zst",
+ "sha256": "5453499ed1fd788cd8945927b38606a79918a91138848dab90f0518ef1ee77da",
"variant": "debug"
},
"cpython-3.9.23+debug-linux-x86_64_v4-gnu": {
@@ -22891,8 +23691,8 @@
"minor": 9,
"patch": 23,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.9.23%2B20250604-x86_64_v4-unknown-linux-gnu-debug-full.tar.zst",
- "sha256": "6dbb8ba28c56d04c52d4f1de65095880d8ca4d2770c9c52855771f023cac3512",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.9.23%2B20250610-x86_64_v4-unknown-linux-gnu-debug-full.tar.zst",
+ "sha256": "0a1c5570c32c3653da0f6c90656d131e608de519f06b0e298ee9ac865b42b6f2",
"variant": "debug"
},
"cpython-3.9.23+debug-linux-x86_64_v4-musl": {
@@ -22907,8 +23707,8 @@
"minor": 9,
"patch": 23,
"prerelease": "",
- "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250604/cpython-3.9.23%2B20250604-x86_64_v4-unknown-linux-musl-debug-full.tar.zst",
- "sha256": "7058b7adb62727e770a149ddf12b37012ffd591e07fc28241a3a37c585c2134e",
+ "url": "https://github.com/astral-sh/python-build-standalone/releases/download/20250610/cpython-3.9.23%2B20250610-x86_64_v4-unknown-linux-musl-debug-full.tar.zst",
+ "sha256": "1053827ab34963102cf2d998fddfcd923c2940ecfa5ed239b06e7b8831943a40",
"variant": "debug"
},
"cpython-3.9.22-darwin-aarch64-none": {
diff --git a/crates/uv-python/src/sysconfig/generated_mappings.rs b/crates/uv-python/src/sysconfig/generated_mappings.rs
index df127af07..5853aa689 100644
--- a/crates/uv-python/src/sysconfig/generated_mappings.rs
+++ b/crates/uv-python/src/sysconfig/generated_mappings.rs
@@ -1,7 +1,7 @@
//! DO NOT EDIT
//!
//! Generated with `cargo run dev generate-sysconfig-metadata`
-//! Targets from
+//! Targets from
//!
#![allow(clippy::all)]
#![cfg_attr(any(), rustfmt::skip)]
diff --git a/crates/uv/tests/it/python_install.rs b/crates/uv/tests/it/python_install.rs
index a197601e6..1ecc7ed45 100644
--- a/crates/uv/tests/it/python_install.rs
+++ b/crates/uv/tests/it/python_install.rs
@@ -1256,8 +1256,8 @@ fn python_install_314() {
----- stdout -----
----- stderr -----
- Installed Python 3.14.0b1 in [TIME]
- + cpython-3.14.0b1-[PLATFORM]
+ Installed Python 3.14.0b2 in [TIME]
+ + cpython-3.14.0b2-[PLATFORM]
");
// Install a specific pre-release
@@ -1277,7 +1277,7 @@ fn python_install_314() {
success: true
exit_code: 0
----- stdout -----
- [TEMP_DIR]/managed/cpython-3.14.0b1-[PLATFORM]/[INSTALL-BIN]/python
+ [TEMP_DIR]/managed/cpython-3.14.0b2-[PLATFORM]/[INSTALL-BIN]/python
----- stderr -----
");
@@ -1287,7 +1287,7 @@ fn python_install_314() {
success: true
exit_code: 0
----- stdout -----
- [TEMP_DIR]/managed/cpython-3.14.0b1-[PLATFORM]/[INSTALL-BIN]/python
+ [TEMP_DIR]/managed/cpython-3.14.0b2-[PLATFORM]/[INSTALL-BIN]/python
----- stderr -----
");
@@ -1296,7 +1296,7 @@ fn python_install_314() {
success: true
exit_code: 0
----- stdout -----
- [TEMP_DIR]/managed/cpython-3.14.0b1-[PLATFORM]/[INSTALL-BIN]/python
+ [TEMP_DIR]/managed/cpython-3.14.0b2-[PLATFORM]/[INSTALL-BIN]/python
----- stderr -----
");
From f5305653238378376cd33f1a00d6b9eb511bef36 Mon Sep 17 00:00:00 2001
From: Zanie Blue
Date: Wed, 11 Jun 2025 08:28:34 -0500
Subject: [PATCH 054/250] Use TTY detection to determine if SIGINT forwarding
is enabled (#13925)
Use TTY detection to determine when we should forward SIGINT instead of
counting signals, which can lead to various problems where multiple
SIGINTs are sent to a child after the first signal. Counting does not
make sense in interactive situations that do not exit on interrupt,
e.g., the Python REPL.
Closes https://github.com/astral-sh/uv/issues/13919
Closes https://github.com/astral-sh/uv/issues/12108
---
crates/uv/src/commands/run.rs | 27 +++++++++++++--------------
1 file changed, 13 insertions(+), 14 deletions(-)
diff --git a/crates/uv/src/commands/run.rs b/crates/uv/src/commands/run.rs
index 8b4ceaf2d..6a8033fff 100644
--- a/crates/uv/src/commands/run.rs
+++ b/crates/uv/src/commands/run.rs
@@ -17,12 +17,11 @@ pub(crate) async fn run_to_completion(mut handle: Child) -> anyhow::Result`), the process group is not involved and a signal is not sent
- // to the child by default. In this context, uv must forward the signal to the child. We work
- // around this by forwarding SIGINT if it is received more than once. We could attempt to infer
- // if the parent is a terminal using TTY detection(?), but there hasn't been sufficient
- // motivation to explore alternatives yet.
+ // Note the above only applies in an interactive terminal. If a signal is sent directly to the
+ // uv parent process (e.g., `kill -2 `), the process group is not involved and a signal is
+ // not sent to the child by default. In this context, uv must forward the signal to the child.
+ // uv checks if stdin is a TTY as a heuristic to determine if uv is running in an interactive
+ // terminal. When not in an interactive terminal, uv will forward SIGINT to the child.
//
// Use of SIGTERM is also a bit complicated. If a terminal receives a SIGTERM, it just waits for
// its children to exit — multiple SIGTERMs do not have any effect and the signals are not
@@ -38,6 +37,7 @@ pub(crate) async fn run_to_completion(mut handle: Child) -> anyhow::Result anyhow::Result anyhow::Result anyhow::Result
Date: Wed, 11 Jun 2025 22:42:47 -0400
Subject: [PATCH 055/250] Add `zstd` and `deflate` to `Accept-Encoding`
(#13982)
## Summary
We already pull in these dependencies, so it costs us nothing.
---
Cargo.toml | 2 +-
crates/uv-client/src/registry_client.rs | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/Cargo.toml b/Cargo.toml
index 3e192a3d5..0f1d02b47 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -142,7 +142,7 @@ ref-cast = { version = "1.0.24" }
reflink-copy = { version = "0.1.19" }
regex = { version = "1.10.6" }
regex-automata = { version = "0.4.8", default-features = false, features = ["dfa-build", "dfa-search", "perf", "std", "syntax"] }
-reqwest = { version = "=0.12.15", default-features = false, features = ["json", "gzip", "stream", "rustls-tls", "rustls-tls-native-roots", "socks", "multipart", "http2", "blocking"] }
+reqwest = { version = "=0.12.15", default-features = false, features = ["json", "gzip", "deflate", "zstd", "stream", "rustls-tls", "rustls-tls-native-roots", "socks", "multipart", "http2", "blocking"] }
reqwest-middleware = { version = "0.4.0", features = ["multipart"] }
reqwest-retry = { version = "0.7.0" }
rkyv = { version = "0.8.8", features = ["bytecheck"] }
diff --git a/crates/uv-client/src/registry_client.rs b/crates/uv-client/src/registry_client.rs
index 9e8ea23b7..7dbdf7e49 100644
--- a/crates/uv-client/src/registry_client.rs
+++ b/crates/uv-client/src/registry_client.rs
@@ -558,7 +558,7 @@ impl RegistryClient {
let simple_request = self
.uncached_client(url)
.get(Url::from(url.clone()))
- .header("Accept-Encoding", "gzip")
+ .header("Accept-Encoding", "gzip, deflate, zstd")
.header("Accept", MediaType::accepts())
.build()
.map_err(|err| ErrorKind::from_reqwest(url.clone(), err))?;
From b3d7f7977044c2d1d3f21617636a8840cc02688c Mon Sep 17 00:00:00 2001
From: konsti
Date: Thu, 12 Jun 2025 04:47:40 +0200
Subject: [PATCH 056/250] Universal sync_required_environment_hint test
(#13975)
Use the packse case `no-sdist-no-wheels-with-matching-platform` for a
platform independent `sync_required_environment_hint` test.
Fixes #13890
---
crates/uv/tests/it/sync.rs | 54 +++++++++++++-------------------------
1 file changed, 18 insertions(+), 36 deletions(-)
diff --git a/crates/uv/tests/it/sync.rs b/crates/uv/tests/it/sync.rs
index c2026d51c..6503a279b 100644
--- a/crates/uv/tests/it/sync.rs
+++ b/crates/uv/tests/it/sync.rs
@@ -4,7 +4,7 @@ use assert_fs::{fixture::ChildPath, prelude::*};
use indoc::{formatdoc, indoc};
use insta::assert_snapshot;
-use crate::common::{TestContext, download_to_disk, uv_snapshot, venv_bin_path};
+use crate::common::{TestContext, download_to_disk, packse_index_url, uv_snapshot, venv_bin_path};
use predicates::prelude::predicate;
use tempfile::tempdir_in;
use uv_fs::Simplified;
@@ -9609,45 +9609,27 @@ fn direct_url_dependency_metadata() -> Result<()> {
Ok(())
}
-#[cfg(unix)]
#[test]
fn sync_required_environment_hint() -> Result<()> {
let context = TestContext::new("3.13");
let pyproject_toml = context.temp_dir.child("pyproject.toml");
- pyproject_toml.write_str(
- r#"
+ pyproject_toml.write_str(&formatdoc! {r#"
[project]
name = "example"
version = "0.1.0"
requires-python = ">=3.13.2"
- dependencies = ["wheel_tag_test"]
+ dependencies = ["no-sdist-no-wheels-with-matching-platform-a"]
+
+ [[tool.uv.index]]
+ name = "packse"
+ url = "{}"
+ default = true
"#,
- )?;
+ packse_index_url()
+ })?;
- // Populate the `--find-links` entries.
- fs_err::create_dir_all(context.temp_dir.join("links"))?;
-
- for entry in fs_err::read_dir(context.workspace_root.join("scripts/links"))? {
- let entry = entry?;
- let path = entry.path();
- if path
- .file_name()
- .and_then(|file_name| file_name.to_str())
- .is_some_and(|file_name| file_name.starts_with("wheel_tag_test-"))
- {
- let dest = context
- .temp_dir
- .join("links")
- .join(path.file_name().unwrap());
- fs_err::copy(&path, &dest)?;
- }
- }
-
- uv_snapshot!(context.filters(), context.lock()
- .arg("--no-index")
- .arg("--find-links")
- .arg(context.temp_dir.join("links")), @r"
+ uv_snapshot!(context.filters(), context.lock().env_remove("UV_EXCLUDE_NEWER"), @r"
success: true
exit_code: 0
----- stdout -----
@@ -9657,21 +9639,21 @@ fn sync_required_environment_hint() -> Result<()> {
");
let mut filters = context.filters();
- filters.push((r"(macOS|Linux) \(`.*`\)", "[PLATFORM] (`[TAG]`)"));
+ filters.push((
+ r"You're on [^ ]+ \(`.*`\)",
+ "You're on [PLATFORM] (`[TAG]`)",
+ ));
- uv_snapshot!(filters, context.sync()
- .arg("--no-index")
- .arg("--find-links")
- .arg(context.temp_dir.join("links")), @r"
+ uv_snapshot!(filters, context.sync().env_remove("UV_EXCLUDE_NEWER"), @r"
success: false
exit_code: 2
----- stdout -----
----- stderr -----
Resolved 2 packages in [TIME]
- error: Distribution `wheel-tag-test==0.1.0 @ registry+links` can't be installed because it doesn't have a source distribution or wheel for the current platform
+ error: Distribution `no-sdist-no-wheels-with-matching-platform-a==1.0.0 @ registry+https://astral-sh.github.io/packse/PACKSE_VERSION/simple-html/` can't be installed because it doesn't have a source distribution or wheel for the current platform
- hint: You're on [PLATFORM] (`[TAG]`), but `wheel-tag-test` (v0.1.0) only has wheels for the following platform: `win_amd64`; consider adding your platform to `tool.uv.required-environments` to ensure uv resolves to a version with compatible wheels
+ hint: You're on [PLATFORM] (`[TAG]`), but `no-sdist-no-wheels-with-matching-platform-a` (v1.0.0) only has wheels for the following platform: `macosx_10_0_ppc64`; consider adding your platform to `tool.uv.required-environments` to ensure uv resolves to a version with compatible wheels
");
Ok(())
From 87ab57e902c9009b47f22d951acf631b515e3bed Mon Sep 17 00:00:00 2001
From: Zanie Blue
Date: Thu, 12 Jun 2025 05:02:51 -0500
Subject: [PATCH 057/250] Update the CLI help and reference to include
references to the Python bin directory (#13978)
Closes https://github.com/astral-sh/uv/issues/13977
---
crates/uv-cli/src/lib.rs | 6 ++++--
crates/uv/tests/it/help.rs | 3 ++-
docs/reference/cli.md | 4 ++--
3 files changed, 8 insertions(+), 5 deletions(-)
diff --git a/crates/uv-cli/src/lib.rs b/crates/uv-cli/src/lib.rs
index 63e87367c..e29387b28 100644
--- a/crates/uv-cli/src/lib.rs
+++ b/crates/uv-cli/src/lib.rs
@@ -4728,7 +4728,8 @@ pub enum PythonCommand {
///
/// A `python` executable is not made globally available, managed Python versions are only used
/// in uv commands or in active virtual environments. There is experimental support for adding
- /// Python executables to the `PATH` — use the `--preview` flag to enable this behavior.
+ /// Python executables to a directory on the path — use the `--preview` flag to enable this
+ /// behavior and `uv python dir --bin` to retrieve the target directory.
///
/// Multiple Python versions may be requested.
///
@@ -4763,7 +4764,8 @@ pub enum PythonCommand {
/// The Python installation directory may be overridden with `$UV_PYTHON_INSTALL_DIR`.
///
/// To view the directory where uv installs Python executables instead, use the `--bin` flag.
- /// Note that Python executables are only installed when preview mode is enabled.
+ /// The Python executable directory may be overridden with `$UV_PYTHON_BIN_DIR`. Note that
+ /// Python executables are only installed when preview mode is enabled.
Dir(PythonDirArgs),
/// Uninstall Python versions.
diff --git a/crates/uv/tests/it/help.rs b/crates/uv/tests/it/help.rs
index 932991859..6fd9bd466 100644
--- a/crates/uv/tests/it/help.rs
+++ b/crates/uv/tests/it/help.rs
@@ -468,7 +468,8 @@ fn help_subsubcommand() {
A `python` executable is not made globally available, managed Python versions are only used in uv
commands or in active virtual environments. There is experimental support for adding Python
- executables to the `PATH` — use the `--preview` flag to enable this behavior.
+ executables to a directory on the path — use the `--preview` flag to enable this behavior and `uv
+ python dir --bin` to retrieve the target directory.
Multiple Python versions may be requested.
diff --git a/docs/reference/cli.md b/docs/reference/cli.md
index aef894368..d434b954b 100644
--- a/docs/reference/cli.md
+++ b/docs/reference/cli.md
@@ -2666,7 +2666,7 @@ Supports CPython and PyPy. CPython distributions are downloaded from the Astral
Python versions are installed into the uv Python directory, which can be retrieved with `uv python dir`.
-A `python` executable is not made globally available, managed Python versions are only used in uv commands or in active virtual environments. There is experimental support for adding Python executables to the `PATH` — use the `--preview` flag to enable this behavior.
+A `python` executable is not made globally available, managed Python versions are only used in uv commands or in active virtual environments. There is experimental support for adding Python executables to a directory on the path — use the `--preview` flag to enable this behavior and `uv python dir --bin` to retrieve the target directory.
Multiple Python versions may be requested.
@@ -2917,7 +2917,7 @@ By default, Python installations are stored in the uv data directory at `$XDG_DA
The Python installation directory may be overridden with `$UV_PYTHON_INSTALL_DIR`.
-To view the directory where uv installs Python executables instead, use the `--bin` flag. Note that Python executables are only installed when preview mode is enabled.
+To view the directory where uv installs Python executables instead, use the `--bin` flag. The Python executable directory may be overridden with `$UV_PYTHON_BIN_DIR`. Note that Python executables are only installed when preview mode is enabled.
Usage
From 806cc5cad9ac8abc3c29537a9f27bec66f409389 Mon Sep 17 00:00:00 2001
From: Zanie Blue
Date: Thu, 12 Jun 2025 08:05:25 -0500
Subject: [PATCH 058/250] Debug `sync_dry_run` flake by panicking with verbose
output on failure (#13817)
Investigating #13744
I tried reproducing here by running the test in a loop, but could not. I
presume it's an interaction with other tests.
This drops the snapshot, but I think it's worth it to try to examine the
flake?
---
crates/uv/tests/it/sync.rs | 19 +++++++------------
1 file changed, 7 insertions(+), 12 deletions(-)
diff --git a/crates/uv/tests/it/sync.rs b/crates/uv/tests/it/sync.rs
index 6503a279b..3f3cd072c 100644
--- a/crates/uv/tests/it/sync.rs
+++ b/crates/uv/tests/it/sync.rs
@@ -7879,18 +7879,13 @@ fn sync_dry_run() -> Result<()> {
+ iniconfig==2.0.0
"###);
- uv_snapshot!(context.filters(), context.sync().arg("--dry-run"), @r###"
- success: true
- exit_code: 0
- ----- stdout -----
-
- ----- stderr -----
- Discovered existing environment at: .venv
- Resolved 2 packages in [TIME]
- Found up-to-date lockfile at: uv.lock
- Audited 1 package in [TIME]
- Would make no changes
- "###);
+ let output = context.sync().arg("--dry-run").arg("-vv").output()?;
+ let stderr = String::from_utf8_lossy(&output.stderr);
+ assert!(
+ !stderr.contains("Would replace existing virtual environment"),
+ "{}",
+ stderr
+ );
Ok(())
}
From a1f9f28762b113dcecd07fd739f77c1bb417a53d Mon Sep 17 00:00:00 2001
From: Ahmed Ilyas
Date: Thu, 12 Jun 2025 16:45:12 +0200
Subject: [PATCH 059/250] Do not allow `uv add --group ... --script` (#13997)
## Summary
Closes #13988
## Test Plan
`cargo test`
---
crates/uv-cli/src/lib.rs | 28 ++++++++++++++++++++++++----
crates/uv/tests/it/edit.rs | 36 ++++++++++++++++++++++++++++++++++++
2 files changed, 60 insertions(+), 4 deletions(-)
diff --git a/crates/uv-cli/src/lib.rs b/crates/uv-cli/src/lib.rs
index e29387b28..0b96875e5 100644
--- a/crates/uv-cli/src/lib.rs
+++ b/crates/uv-cli/src/lib.rs
@@ -3516,7 +3516,12 @@ pub struct AddArgs {
/// Add the requirements to the development dependency group.
///
/// This option is an alias for `--group dev`.
- #[arg(long, conflicts_with("optional"), conflicts_with("group"))]
+ #[arg(
+ long,
+ conflicts_with("optional"),
+ conflicts_with("group"),
+ conflicts_with("script")
+ )]
pub dev: bool,
/// Add the requirements to the package's optional dependencies for the specified extra.
@@ -3530,7 +3535,12 @@ pub struct AddArgs {
/// Add the requirements to the specified dependency group.
///
/// These requirements will not be included in the published metadata for the project.
- #[arg(long, conflicts_with("dev"), conflicts_with("optional"))]
+ #[arg(
+ long,
+ conflicts_with("dev"),
+ conflicts_with("optional"),
+ conflicts_with("script")
+ )]
pub group: Option,
/// Add the requirements as editable.
@@ -3677,11 +3687,21 @@ pub struct RemoveArgs {
pub dev: bool,
/// Remove the packages from the project's optional dependencies for the specified extra.
- #[arg(long, conflicts_with("dev"), conflicts_with("group"))]
+ #[arg(
+ long,
+ conflicts_with("dev"),
+ conflicts_with("group"),
+ conflicts_with("script")
+ )]
pub optional: Option,
/// Remove the packages from the specified dependency group.
- #[arg(long, conflicts_with("dev"), conflicts_with("optional"))]
+ #[arg(
+ long,
+ conflicts_with("dev"),
+ conflicts_with("optional"),
+ conflicts_with("script")
+ )]
pub group: Option,
/// Avoid syncing the virtual environment after re-locking the project.
diff --git a/crates/uv/tests/it/edit.rs b/crates/uv/tests/it/edit.rs
index 5ba64fca2..f96dd7b7b 100644
--- a/crates/uv/tests/it/edit.rs
+++ b/crates/uv/tests/it/edit.rs
@@ -2013,6 +2013,42 @@ fn remove_both_dev() -> Result<()> {
Ok(())
}
+/// Do not allow add for groups in scripts.
+#[test]
+fn disallow_group_script_add() -> Result<()> {
+ let context = TestContext::new("3.12");
+
+ let script = context.temp_dir.child("main.py");
+ script.write_str(indoc! {r#"
+ # /// script
+ # requires-python = ">=3.13"
+ # dependencies = []
+ #
+ # ///
+ "#})?;
+
+ uv_snapshot!(context.filters(), context
+ .add()
+ .arg("--group")
+ .arg("dev")
+ .arg("anyio==3.7.0")
+ .arg("--script")
+ .arg("main.py"), @r###"
+ success: false
+ exit_code: 2
+ ----- stdout -----
+
+ ----- stderr -----
+ error: the argument '--group ' cannot be used with '--script