Support debug CPython ABI tags in environment compatibility (#18739)
## Summary This PR fixes a problem in `uv pip install`, which currently refuses to install debug wheels in virtual environments with debug CPythons. Before this change, wheel parsing already preserved debug ABI suffixes like cp313d and cp314d, but Tags::from_env only propagated free-threaded and legacy pymalloc variants. As a result, uv would detect a debug interpreter correctly during discovery while still generating cp313/cp314 environment tags, causing debug-built wheels to be rejected as incompatible. Fix this by accepting a debug_enabled flag in Tags::from_env, mapping it to CPythonAbiVariants::Debug, and passing the interpreter debug state from the production call sites in uv-python and uv pip resolution. Also update the affected tests and helpers, and add a regression test that verifies debug CPython 3.13 generates cp313-cp313d manylinux tags. ## Test Plan Tests run: - cargo test -p uv-platform-tags tags::tests::test_system_tags_debug_cpython -- --exact - cargo test -p uv-installer plan::tests::test_abi3_on_free_threaded_python_hint -- --exact - cargo test -p uv-installer plan::tests::test_gil_enabled_cpython_on_free_threaded_python_hint -- --exact - cargo test -p uv-installer plan::tests::test_abi3_on_regular_python_no_special_hint -- --exact - cargo test -p uv --test it pip_install::abi_compatibility_on_debug_python -- --exact --------- Co-authored-by: konstin <konstin@mailbox.org>
This commit is contained in:
@@ -25,7 +25,7 @@ use uv_install_wheel::Layout;
|
||||
use uv_pep440::Version;
|
||||
use uv_pep508::{MarkerEnvironment, StringVersion};
|
||||
use uv_platform::{Arch, Libc, Os};
|
||||
use uv_platform_tags::{Platform, Tags, TagsError};
|
||||
use uv_platform_tags::{Platform, Tags, TagsError, TagsOptions};
|
||||
use uv_pypi_types::{ResolverMarkerEnvironment, Scheme};
|
||||
|
||||
use crate::implementation::LenientImplementationName;
|
||||
@@ -253,9 +253,12 @@ impl Interpreter {
|
||||
self.python_tuple(),
|
||||
self.implementation_name(),
|
||||
self.implementation_tuple(),
|
||||
self.manylinux_compatible,
|
||||
self.gil_disabled,
|
||||
false,
|
||||
TagsOptions {
|
||||
manylinux_compatible: self.manylinux_compatible,
|
||||
gil_disabled: self.gil_disabled,
|
||||
debug_enabled: self.debug_enabled,
|
||||
is_cross: false,
|
||||
},
|
||||
)?;
|
||||
self.tags.set(tags).expect("tags should not be set");
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user