diff --git a/crates/uv-python/src/discovery.rs b/crates/uv-python/src/discovery.rs index ed1d5bc549637..3d8179ce925f6 100644 --- a/crates/uv-python/src/discovery.rs +++ b/crates/uv-python/src/discovery.rs @@ -3324,6 +3324,11 @@ fn parse_version_specifiers_request( if specifiers.is_empty() { return Err(Error::InvalidVersionRequest(s.to_string())); } + if let [specifier] = specifiers.iter().as_slice() { + if specifier.operator() == &uv_pep440::Operator::Equal { + return VersionRequest::from_str(&specifier.version().to_string()); + } + } Ok(VersionRequest::Range(specifiers, variant)) } diff --git a/crates/uv/tests/it/python_find.rs b/crates/uv/tests/it/python_find.rs index 61dd198b973e1..65d5ab5ae5a87 100644 --- a/crates/uv/tests/it/python_find.rs +++ b/crates/uv/tests/it/python_find.rs @@ -1513,3 +1513,26 @@ fn python_find_prerelease_with_patch_request() { ----- stderr ----- "); } + +#[test] +fn python_find_equal() { + let context = uv_test::test_context_with_versions!(&["3.11", "3.12"]); + + uv_snapshot!(context.filters(), context.python_find().arg("==3.11"), @r###" + success: true + exit_code: 0 + ----- stdout ----- + [PYTHON-3.11] + + ----- stderr ----- + "###); + + uv_snapshot!(context.filters(), context.python_find().arg("==3.12"), @r###" + success: true + exit_code: 0 + ----- stdout ----- + [PYTHON-3.12] + + ----- stderr ----- + "###); +}