Use install_only python archive (#4843)

## Summary

Resolves #4834

## Test Plan

```sh
# 3.12.3 is a `install_only` archive
$ cargo run -- python install --preview --force 3.12.3

# 3.9.4 has only `full` archive
$ cargo run -- python install --preview --force 3.9.4
```
This commit is contained in:
Jo 2024-07-07 10:43:55 +08:00 committed by GitHub
parent 7117359ca9
commit 2c214e7585
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 1508 additions and 1495 deletions

View file

@ -463,12 +463,17 @@ impl ManagedPythonDownload {
}
// Extract the top-level directory.
let extracted = match uv_extract::strip_component(temp_dir.path()) {
let mut extracted = match uv_extract::strip_component(temp_dir.path()) {
Ok(top_level) => top_level,
Err(uv_extract::Error::NonSingularArchive(_)) => temp_dir.into_path(),
Err(err) => return Err(Error::ExtractError(filename.to_string(), err)),
};
// If the distribution is a `full` archive, the Python installation is in the `install` directory.
if extracted.join("install").is_dir() {
extracted = extracted.join("install");
}
// Persist it to the target
debug!("Moving {} to {}", extracted.display(), path.user_display());
rename_with_retry(extracted, &path)