diff --git a/.envrc b/.envrc new file mode 100644 index 000000000..14c366045 --- /dev/null +++ b/.envrc @@ -0,0 +1,3 @@ +PATH=$PWD/bin:$PATH +export PUFFIN_PYTHON_PATH=$PWD/bin + diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 305f5fcfc..11550223a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -54,16 +54,11 @@ jobs: name: "cargo test | ${{ matrix.os }}" steps: - uses: actions/checkout@v4 - - name: "Install Pythons" - uses: actions/setup-python@v4 - with: - python-version: | - 3.7 - 3.8 - 3.9 - 3.10 - 3.11 - 3.12 + - name: "Install required Python versions" + run: | + sudo apt install direnv + scripts/bootstrap/install.sh + direnv allow .envrc - name: "Install Rust toolchain" run: rustup show - uses: rui314/setup-mold@v1 @@ -75,7 +70,8 @@ jobs: with: save-if: ${{ github.ref == 'refs/heads/main' }} - name: "Tests" - run: cargo nextest run --workspace --all-features --status-level skip --failure-output immediate-final --no-fail-fast -j 12 + run: | + direnv exec . cargo nextest run --all --all-features --status-level skip --failure-output immediate-final --no-fail-fast -j 12 # TODO(konstin): Merge with the cargo-test job once the tests pass windows: diff --git a/.gitignore b/.gitignore index abcd6f2a8..5145f0ced 100644 --- a/.gitignore +++ b/.gitignore @@ -3,6 +3,9 @@ debug/ target/ +# Bootstrapped Python versions +bin/ + # These are backup files generated by rustfmt **/*.rs.bk diff --git a/.python-versions b/.python-versions new file mode 100644 index 000000000..07ff095a8 --- /dev/null +++ b/.python-versions @@ -0,0 +1,6 @@ +3.8.12 +3.8.18 +3.9.18 +3.10.13 +3.11.7 +3.12.1 diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 51acd2230..ecf58e5bf 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -2,13 +2,12 @@ ## Setup -You need [Rust](https://rustup.rs/), a C compiler, and CMake to build Puffin. To run the tests, you need Python 3.8, 3.9 and 3.12. +[Rust](https://rustup.rs/), a C compiler, and CMake are required to build Puffin. -To run the tests we recommend [nextest](https://nexte.st/). Make sure to run the tests with `--all-features`, otherwise you'll miss most of our integration tests. +Testing Puffin requires multiple specific Python versions. We provide a script to bootstrap development by downloading the required versions. ### Linux -We recommend [pyenv](https://github.com/pyenv/pyenv) to manage multiple Python versions. On Ubuntu and other Debian-based distributions, you can install the C compiler and CMake with @@ -16,10 +15,53 @@ On Ubuntu and other Debian-based distributions, you can install the C compiler a sudo apt install build-essential cmake ``` +### macOS + +CMake may be installed with Homebrew: + +``` +brew install cmake +``` + +The Python bootstrapping script requires `coreutils` and `zstd`; we recommend installing them with Homebrew: + +``` +brew install coreutils zstd +``` + +See the [Python](#python) section for instructions on installing the Python versions. + ### Windows You can install CMake from the [installers](https://cmake.org/download/) or with `pipx install cmake` (make sure that the pipx install path is in `PATH`, pipx complains if it isn't). +### Python + +Install required Python versions with the bootstrapping script: + +``` +scripts/bootstrap/install.sh +``` + +Then add the Python binaries to your path: + +``` +export PATH=$PWD/bin:$PATH +``` + +We also strongly recommend setting the `PUFFIN_PYTHON_PATH` variable during development; this will prevent your +system Python versions from being found during tests: + +``` +export PUFFIN_PYTHON_PATH=$PWD/bin +``` + +If you use [direnv](https://direnv.net/), these variables will be exported automatically after you run `direnv allow`. + +## Testing + +To run the tests we recommend [nextest](https://nexte.st/). Make sure to run the tests with `--all-features`, otherwise you'll miss most of our integration tests. + ## Running inside a docker container Source distributions can run arbitrary code on build and can make unwanted modifications to your system (https://moyix.blogspot.com/2022/09/someones-been-messing-with-my-subnormals.html, https://pypi.org/project/nvidia-pyindex/), which can even occur when just resolving requirements. To prevent this, there's a Docker container you can run commands in: @@ -32,3 +74,4 @@ docker run --rm -it -v $(pwd):/app puffin-builder /app/target/x86_64-unknown-lin ``` We recommend using this container if you don't trust the dependency tree of the package(s) you are trying to resolve or install. + diff --git a/crates/puffin-interpreter/src/interpreter.rs b/crates/puffin-interpreter/src/interpreter.rs index c6c46292e..eb481bc24 100644 --- a/crates/puffin-interpreter/src/interpreter.rs +++ b/crates/puffin-interpreter/src/interpreter.rs @@ -1,3 +1,4 @@ +use std::ffi::{OsStr, OsString}; use std::path::{Path, PathBuf}; use std::process::Command; @@ -136,6 +137,10 @@ impl Interpreter { /// - If a python version is given: `pythonx.y` /// - `python3` (unix) or `python.exe` (windows) /// + /// If `PUFFIN_PYTHON_PATH` is set, we will not check for Python versions in the + /// global PATH, instead we will search using the provided path. Virtual environments + /// will still be respected. + /// /// If a version is provided and an interpreter cannot be found with the given version, /// we will return [`None`]. pub fn find_version( @@ -170,7 +175,8 @@ impl Interpreter { python_version.major(), python_version.minor() ); - if let Ok(executable) = which::which(&requested) { + + if let Ok(executable) = Interpreter::find_executable(&requested) { debug!("Resolved {requested} to {}", executable.display()); let interpreter = Interpreter::query(&executable, &platform.0, cache)?; if version_matches(&interpreter) { @@ -179,7 +185,7 @@ impl Interpreter { } } - if let Ok(executable) = which::which("python3") { + if let Ok(executable) = Interpreter::find_executable("python3") { debug!("Resolved python3 to {}", executable.display()); let interpreter = Interpreter::query(&executable, &platform.0, cache)?; if version_matches(&interpreter) { @@ -198,7 +204,7 @@ impl Interpreter { } } - if let Ok(executable) = which::which("python.exe") { + if let Ok(executable) = Interpreter::find_executable("python.exe") { let interpreter = Interpreter::query(&executable, &platform.0, cache)?; if version_matches(&interpreter) { return Ok(Some(interpreter)); @@ -211,6 +217,23 @@ impl Interpreter { Ok(None) } + pub fn find_executable + Into + Copy>( + requested: R, + ) -> Result { + if let Some(isolated) = std::env::var_os("PUFFIN_PYTHON_PATH") { + if let Ok(cwd) = std::env::current_dir() { + which::which_in(requested, Some(isolated), cwd) + .map_err(|err| Error::Which(requested.into(), err)) + } else { + which::which_in_global(requested, Some(isolated)) + .map_err(|err| Error::Which(requested.into(), err)) + .and_then(|mut paths| paths.next().ok_or(Error::PythonNotFound)) + } + } else { + which::which(requested).map_err(|err| Error::Which(requested.into(), err)) + } + } + /// Returns the path to the Python virtual environment. #[inline] pub fn platform(&self) -> &Platform { diff --git a/crates/puffin-interpreter/src/lib.rs b/crates/puffin-interpreter/src/lib.rs index 72a9b6f1e..81bb3a029 100644 --- a/crates/puffin-interpreter/src/lib.rs +++ b/crates/puffin-interpreter/src/lib.rs @@ -1,3 +1,4 @@ +use std::ffi::OsString; use std::io; use std::path::PathBuf; use std::time::SystemTimeError; @@ -49,6 +50,8 @@ pub enum Error { NoPythonInstalledUnix, #[error("Could not find `python.exe` in PATH and `py --list-paths` did not list any Python versions. Do you need to install Python?")] NoPythonInstalledWindows, + #[error("Patch versions cannot be requested on Windows")] + PatchVersionRequestedWindows, #[error("{message}:\n--- stdout:\n{stdout}\n--- stderr:\n{stderr}\n---")] PythonSubcommandOutput { message: String, @@ -63,6 +66,6 @@ pub enum Error { Encode(#[from] rmp_serde::encode::Error), #[error("Failed to parse pyvenv.cfg")] Cfg(#[from] cfg::Error), - #[error("Couldn't find `{0}` in PATH")] - Which(PathBuf, #[source] which::Error), + #[error("Couldn't find `{}` in PATH", _0.to_string_lossy())] + Which(OsString, #[source] which::Error), } diff --git a/crates/puffin-interpreter/src/python_query.rs b/crates/puffin-interpreter/src/python_query.rs index 25355f95d..cd6dc681e 100644 --- a/crates/puffin-interpreter/src/python_query.rs +++ b/crates/puffin-interpreter/src/python_query.rs @@ -7,7 +7,7 @@ use once_cell::sync::Lazy; use regex::Regex; use tracing::{info_span, instrument}; -use crate::Error; +use crate::{Error, Interpreter}; /// ```text /// -V:3.12 C:\Users\Ferris\AppData\Local\Programs\Python\Python312\python.exe @@ -27,23 +27,30 @@ static PY_LIST_PATHS: Lazy = Lazy::new(|| { /// * `-p /home/ferris/.local/bin/python3.10` uses this exact Python. #[instrument] pub fn find_requested_python(request: &str) -> Result { - let major_minor = request - .split_once('.') - .and_then(|(major, minor)| Some((major.parse::().ok()?, minor.parse::().ok()?))); - if let Some((major, minor)) = major_minor { - // `-p 3.10` + let versions = request + .splitn(3, '.') + .map(str::parse::) + .collect::, _>>(); + if let Ok(versions) = versions { + // `-p 3.10` or `-p 3.10.1` if cfg!(unix) { - let formatted = PathBuf::from(format!("python{major}.{minor}")); - which::which(&formatted).map_err(|err| Error::Which(formatted, err)) + let formatted = PathBuf::from(format!("python{request}")); + Interpreter::find_executable(&formatted) } else if cfg!(windows) { - find_python_windows(major, minor)?.ok_or(Error::NoSuchPython { major, minor }) + if let [major, minor] = versions.as_slice() { + find_python_windows(*major, *minor)?.ok_or(Error::NoSuchPython { + major: *major, + minor: *minor, + }) + } else { + Err(Error::PatchVersionRequestedWindows) + } } else { unimplemented!("Only Windows and Unix are supported") } } else if !request.contains(std::path::MAIN_SEPARATOR) { // `-p python3.10`; Generally not used on windows because all Python are `python.exe`. - let request = PathBuf::from(request); - which::which(&request).map_err(|err| Error::Which(request, err)) + Interpreter::find_executable(request) } else { // `-p /home/ferris/.local/bin/python3.10` Ok(fs_err::canonicalize(request)?) diff --git a/crates/puffin/tests/pip_compile.rs b/crates/puffin/tests/pip_compile.rs index ac1c7d0a7..8cc2e5246 100644 --- a/crates/puffin/tests/pip_compile.rs +++ b/crates/puffin/tests/pip_compile.rs @@ -696,6 +696,7 @@ fn compile_python_37() -> Result<()> { ----- stdout ----- ----- stderr ----- + warning: The requested Python version 3.7 is not available; 3.12.1 will be used to build dependencies instead. × No solution found when resolving dependencies: ╰─▶ Because the requested Python version (3.7) does not satisfy Python>=3.8 and black==23.10.1 depends on Python>=3.8, we can conclude that diff --git a/crates/puffin/tests/pip_compile_scenarios.rs b/crates/puffin/tests/pip_compile_scenarios.rs index 0557839b9..110868d04 100644 --- a/crates/puffin/tests/pip_compile_scenarios.rs +++ b/crates/puffin/tests/pip_compile_scenarios.rs @@ -1,7 +1,7 @@ //! DO NOT EDIT //! //! Generated with ./scripts/scenarios/update.py -//! Scenarios from +//! Scenarios from //! #![cfg(all(feature = "python", feature = "pypi"))] @@ -23,7 +23,7 @@ mod common; /// resolution. /// /// ```text -/// 818d78ce +/// 006fed96 /// ├── environment /// │ └── python3.9 /// ├── root @@ -41,11 +41,11 @@ fn requires_incompatible_python_version_compatible_override() -> Result<()> { // In addition to the standard filters, swap out package names for more realistic messages let mut filters = INSTA_FILTERS.to_vec(); - filters.push((r"a-818d78ce", "albatross")); - filters.push((r"-818d78ce", "")); + filters.push((r"a-006fed96", "albatross")); + filters.push((r"-006fed96", "")); let requirements_in = temp_dir.child("requirements.in"); - requirements_in.write_str("a-818d78ce==1.0.0")?; + requirements_in.write_str("a-006fed96==1.0.0")?; insta::with_settings!({ filters => filters @@ -83,7 +83,7 @@ fn requires_incompatible_python_version_compatible_override() -> Result<()> { /// request an incompatible Python version for package resolution. /// /// ```text -/// e94b8bc2 +/// 8c1b0389 /// ├── environment /// │ └── python3.11 /// ├── root @@ -101,11 +101,11 @@ fn requires_compatible_python_version_incompatible_override() -> Result<()> { // In addition to the standard filters, swap out package names for more realistic messages let mut filters = INSTA_FILTERS.to_vec(); - filters.push((r"a-e94b8bc2", "albatross")); - filters.push((r"-e94b8bc2", "")); + filters.push((r"a-8c1b0389", "albatross")); + filters.push((r"-8c1b0389", "")); let requirements_in = temp_dir.child("requirements.in"); - requirements_in.write_str("a-e94b8bc2==1.0.0")?; + requirements_in.write_str("a-8c1b0389==1.0.0")?; insta::with_settings!({ filters => filters @@ -143,7 +143,7 @@ fn requires_compatible_python_version_incompatible_override() -> Result<()> { /// source distributions available for the package. /// /// ```text -/// 367303df +/// b8ee1c03 /// ├── environment /// │ └── python3.9 /// ├── root @@ -161,11 +161,11 @@ fn requires_incompatible_python_version_compatible_override_no_wheels() -> Resul // In addition to the standard filters, swap out package names for more realistic messages let mut filters = INSTA_FILTERS.to_vec(); - filters.push((r"a-367303df", "albatross")); - filters.push((r"-367303df", "")); + filters.push((r"a-b8ee1c03", "albatross")); + filters.push((r"-b8ee1c03", "")); let requirements_in = temp_dir.child("requirements.in"); - requirements_in.write_str("a-367303df==1.0.0")?; + requirements_in.write_str("a-b8ee1c03==1.0.0")?; // Since there are no wheels for the package and it is not compatible with the // local installation, we cannot build the source distribution to determine its @@ -207,7 +207,7 @@ fn requires_incompatible_python_version_compatible_override_no_wheels() -> Resul /// wheel available for the package, but it does not have a compatible tag. /// /// ```text -/// 7d66d27e +/// c0ea406a /// ├── environment /// │ └── python3.9 /// ├── root @@ -225,11 +225,11 @@ fn requires_incompatible_python_version_compatible_override_no_compatible_wheels // In addition to the standard filters, swap out package names for more realistic messages let mut filters = INSTA_FILTERS.to_vec(); - filters.push((r"a-7d66d27e", "albatross")); - filters.push((r"-7d66d27e", "")); + filters.push((r"a-c0ea406a", "albatross")); + filters.push((r"-c0ea406a", "")); let requirements_in = temp_dir.child("requirements.in"); - requirements_in.write_str("a-7d66d27e==1.0.0")?; + requirements_in.write_str("a-c0ea406a==1.0.0")?; // Since there are no compatible wheels for the package and it is not compatible // with the local installation, we cannot build the source distribution to @@ -249,12 +249,15 @@ fn requires_incompatible_python_version_compatible_override_no_compatible_wheels .env("VIRTUAL_ENV", venv.as_os_str()) .env("PUFFIN_NO_WRAP", "1") .current_dir(&temp_dir), @r###" - success: false - exit_code: 2 + success: true + exit_code: 0 ----- stdout ----- + # This file was autogenerated by Puffin v[VERSION] via the following command: + # puffin pip compile requirements.in --python-version=3.11 --extra-index-url https://test.pypi.org/simple --cache-dir [CACHE_DIR] + albatross==1.0.0 ----- stderr ----- - error: Package `albatross` was not found in the registry. + Resolved 1 package in [TIME] "###); }); @@ -269,7 +272,7 @@ fn requires_incompatible_python_version_compatible_override_no_compatible_wheels /// there is an incompatible version with a wheel available. /// /// ```text -/// 47c905cb +/// 08a4e843 /// ├── environment /// │ └── python3.9 /// ├── root @@ -290,11 +293,11 @@ fn requires_incompatible_python_version_compatible_override_other_wheel() -> Res // In addition to the standard filters, swap out package names for more realistic messages let mut filters = INSTA_FILTERS.to_vec(); - filters.push((r"a-47c905cb", "albatross")); - filters.push((r"-47c905cb", "")); + filters.push((r"a-08a4e843", "albatross")); + filters.push((r"-08a4e843", "")); let requirements_in = temp_dir.child("requirements.in"); - requirements_in.write_str("a-47c905cb")?; + requirements_in.write_str("a-08a4e843")?; // Since there are no wheels for the version of the package compatible with the // target and it is not compatible with the local installation, we cannot build the @@ -329,3 +332,125 @@ fn requires_incompatible_python_version_compatible_override_other_wheel() -> Res Ok(()) } + +/// requires-python-patch-version-override-no-patch +/// +/// The user requires a package which requires a Python version with a patch version +/// and the user provides a target version without a patch version. +/// +/// ```text +/// 2e1edfd6 +/// ├── environment +/// │ └── python3.8.18 +/// ├── root +/// │ └── requires a==1.0.0 +/// │ └── satisfied by a-1.0.0 +/// └── a +/// └── a-1.0.0 +/// └── requires python>=3.8.4 +/// ``` +#[test] +fn requires_python_patch_version_override_no_patch() -> Result<()> { + let temp_dir = assert_fs::TempDir::new()?; + let cache_dir = assert_fs::TempDir::new()?; + let venv = create_venv(&temp_dir, &cache_dir, "3.8.18"); + + // In addition to the standard filters, swap out package names for more realistic messages + let mut filters = INSTA_FILTERS.to_vec(); + filters.push((r"a-2e1edfd6", "albatross")); + filters.push((r"-2e1edfd6", "")); + + let requirements_in = temp_dir.child("requirements.in"); + requirements_in.write_str("a-2e1edfd6==1.0.0")?; + + // Since the resolver is asked to solve with 3.8, the minimum compatible Python + // requirement is treated as 3.8.0. + insta::with_settings!({ + filters => filters + }, { + assert_cmd_snapshot!(Command::new(get_cargo_bin(BIN_NAME)) + .arg("pip") + .arg("compile") + .arg("requirements.in") + .arg("--python-version=3.8") + .arg("--extra-index-url") + .arg("https://test.pypi.org/simple") + .arg("--cache-dir") + .arg(cache_dir.path()) + .env("VIRTUAL_ENV", venv.as_os_str()) + .env("PUFFIN_NO_WRAP", "1") + .current_dir(&temp_dir), @r###" + success: false + exit_code: 1 + ----- stdout ----- + + ----- stderr ----- + × No solution found when resolving dependencies: + ╰─▶ Because the requested Python version (3.8) does not satisfy Python>=3.8.4 and albatross==1.0.0 depends on Python>=3.8.4, we can conclude that albatross==1.0.0 cannot be used. + And because you require albatross==1.0.0, we can conclude that the requirements are unsatisfiable. + "###); + }); + + Ok(()) +} + +/// requires-python-patch-version-override-patch-compatible +/// +/// The user requires a package which requires a Python version with a patch version +/// and the user provides a target version with a compatible patch version. +/// +/// ```text +/// 844899bd +/// ├── environment +/// │ └── python3.8.18 +/// ├── root +/// │ └── requires a==1.0.0 +/// │ └── satisfied by a-1.0.0 +/// └── a +/// └── a-1.0.0 +/// └── requires python>=3.8.0 +/// ``` +#[test] +fn requires_python_patch_version_override_patch_compatible() -> Result<()> { + let temp_dir = assert_fs::TempDir::new()?; + let cache_dir = assert_fs::TempDir::new()?; + let venv = create_venv(&temp_dir, &cache_dir, "3.8.18"); + + // In addition to the standard filters, swap out package names for more realistic messages + let mut filters = INSTA_FILTERS.to_vec(); + filters.push((r"a-844899bd", "albatross")); + filters.push((r"-844899bd", "")); + + let requirements_in = temp_dir.child("requirements.in"); + requirements_in.write_str("a-844899bd==1.0.0")?; + + insta::with_settings!({ + filters => filters + }, { + assert_cmd_snapshot!(Command::new(get_cargo_bin(BIN_NAME)) + .arg("pip") + .arg("compile") + .arg("requirements.in") + .arg("--python-version=3.8.0") + .arg("--extra-index-url") + .arg("https://test.pypi.org/simple") + .arg("--cache-dir") + .arg(cache_dir.path()) + .env("VIRTUAL_ENV", venv.as_os_str()) + .env("PUFFIN_NO_WRAP", "1") + .current_dir(&temp_dir), @r###" + success: true + exit_code: 0 + ----- stdout ----- + # This file was autogenerated by Puffin v[VERSION] via the following command: + # puffin pip compile requirements.in --python-version=3.8.0 --extra-index-url https://test.pypi.org/simple --cache-dir [CACHE_DIR] + albatross==1.0.0 + + ----- stderr ----- + warning: The requested Python version 3.8.0 is not available; 3.8.18 will be used to build dependencies instead. + Resolved 1 package in [TIME] + "###); + }); + + Ok(()) +} diff --git a/crates/puffin/tests/pip_install_scenarios.rs b/crates/puffin/tests/pip_install_scenarios.rs index 071eb72bb..1257f63cc 100644 --- a/crates/puffin/tests/pip_install_scenarios.rs +++ b/crates/puffin/tests/pip_install_scenarios.rs @@ -1,7 +1,7 @@ //! DO NOT EDIT //! //! Generated with ./scripts/scenarios/update.py -//! Scenarios from +//! Scenarios from //! #![cfg(all(feature = "python", feature = "pypi"))] @@ -45,9 +45,9 @@ fn assert_not_installed(venv: &Path, package: &'static str, temp_dir: &Path) { /// The user requires any version of package `a` which does not exist. /// /// ```text -/// 57cd4136 +/// 3cb60d4c /// ├── environment -/// │ └── python3.7 +/// │ └── python3.8 /// └── root /// └── requires a /// └── unsatisfied: no versions for package @@ -56,11 +56,11 @@ fn assert_not_installed(venv: &Path, package: &'static str, temp_dir: &Path) { fn requires_package_does_not_exist() -> Result<()> { let temp_dir = assert_fs::TempDir::new()?; let cache_dir = assert_fs::TempDir::new()?; - let venv = create_venv(&temp_dir, &cache_dir, "3.7"); + let venv = create_venv(&temp_dir, &cache_dir, "3.8"); // In addition to the standard filters, swap out package names for more realistic messages let mut filters = INSTA_FILTERS.to_vec(); - filters.push((r"-57cd4136", "")); + filters.push((r"-3cb60d4c", "")); insta::with_settings!({ filters => filters @@ -68,7 +68,7 @@ fn requires_package_does_not_exist() -> Result<()> { assert_cmd_snapshot!(Command::new(get_cargo_bin(BIN_NAME)) .arg("pip") .arg("install") - .arg("a-57cd4136") + .arg("a-3cb60d4c") .arg("--extra-index-url") .arg("https://test.pypi.org/simple") .arg("--cache-dir") @@ -85,7 +85,7 @@ fn requires_package_does_not_exist() -> Result<()> { "###); }); - assert_not_installed(&venv, "a_57cd4136", &temp_dir); + assert_not_installed(&venv, "a_3cb60d4c", &temp_dir); Ok(()) } @@ -95,9 +95,9 @@ fn requires_package_does_not_exist() -> Result<()> { /// The user requires an exact version of package `a` but only other versions exist /// /// ```text -/// eaa03067 +/// e7132fc5 /// ├── environment -/// │ └── python3.7 +/// │ └── python3.8 /// ├── root /// │ └── requires a==2.0.0 /// │ └── unsatisfied: no matching version @@ -108,12 +108,12 @@ fn requires_package_does_not_exist() -> Result<()> { fn requires_exact_version_does_not_exist() -> Result<()> { let temp_dir = assert_fs::TempDir::new()?; let cache_dir = assert_fs::TempDir::new()?; - let venv = create_venv(&temp_dir, &cache_dir, "3.7"); + let venv = create_venv(&temp_dir, &cache_dir, "3.8"); // In addition to the standard filters, swap out package names for more realistic messages let mut filters = INSTA_FILTERS.to_vec(); - filters.push((r"a-eaa03067", "albatross")); - filters.push((r"-eaa03067", "")); + filters.push((r"a-e7132fc5", "albatross")); + filters.push((r"-e7132fc5", "")); insta::with_settings!({ filters => filters @@ -121,7 +121,7 @@ fn requires_exact_version_does_not_exist() -> Result<()> { assert_cmd_snapshot!(Command::new(get_cargo_bin(BIN_NAME)) .arg("pip") .arg("install") - .arg("a-eaa03067==2.0.0") + .arg("a-e7132fc5==2.0.0") .arg("--extra-index-url") .arg("https://test.pypi.org/simple") .arg("--cache-dir") @@ -139,7 +139,7 @@ fn requires_exact_version_does_not_exist() -> Result<()> { "###); }); - assert_not_installed(&venv, "a_eaa03067", &temp_dir); + assert_not_installed(&venv, "a_e7132fc5", &temp_dir); Ok(()) } @@ -150,9 +150,9 @@ fn requires_exact_version_does_not_exist() -> Result<()> { /// equal versions exist /// /// ```text -/// 6e8e01df +/// 0e488e8f /// ├── environment -/// │ └── python3.7 +/// │ └── python3.8 /// ├── root /// │ └── requires a>1.0.0 /// │ └── unsatisfied: no matching version @@ -164,12 +164,12 @@ fn requires_exact_version_does_not_exist() -> Result<()> { fn requires_greater_version_does_not_exist() -> Result<()> { let temp_dir = assert_fs::TempDir::new()?; let cache_dir = assert_fs::TempDir::new()?; - let venv = create_venv(&temp_dir, &cache_dir, "3.7"); + let venv = create_venv(&temp_dir, &cache_dir, "3.8"); // In addition to the standard filters, swap out package names for more realistic messages let mut filters = INSTA_FILTERS.to_vec(); - filters.push((r"a-6e8e01df", "albatross")); - filters.push((r"-6e8e01df", "")); + filters.push((r"a-0e488e8f", "albatross")); + filters.push((r"-0e488e8f", "")); insta::with_settings!({ filters => filters @@ -177,7 +177,7 @@ fn requires_greater_version_does_not_exist() -> Result<()> { assert_cmd_snapshot!(Command::new(get_cargo_bin(BIN_NAME)) .arg("pip") .arg("install") - .arg("a-6e8e01df>1.0.0") + .arg("a-0e488e8f>1.0.0") .arg("--extra-index-url") .arg("https://test.pypi.org/simple") .arg("--cache-dir") @@ -195,7 +195,7 @@ fn requires_greater_version_does_not_exist() -> Result<()> { "###); }); - assert_not_installed(&venv, "a_6e8e01df", &temp_dir); + assert_not_installed(&venv, "a_0e488e8f", &temp_dir); Ok(()) } @@ -206,9 +206,9 @@ fn requires_greater_version_does_not_exist() -> Result<()> { /// exist /// /// ```text -/// e45cec3c +/// 1a4076bc /// ├── environment -/// │ └── python3.7 +/// │ └── python3.8 /// ├── root /// │ └── requires a<2.0.0 /// │ └── unsatisfied: no matching version @@ -221,12 +221,12 @@ fn requires_greater_version_does_not_exist() -> Result<()> { fn requires_less_version_does_not_exist() -> Result<()> { let temp_dir = assert_fs::TempDir::new()?; let cache_dir = assert_fs::TempDir::new()?; - let venv = create_venv(&temp_dir, &cache_dir, "3.7"); + let venv = create_venv(&temp_dir, &cache_dir, "3.8"); // In addition to the standard filters, swap out package names for more realistic messages let mut filters = INSTA_FILTERS.to_vec(); - filters.push((r"a-e45cec3c", "albatross")); - filters.push((r"-e45cec3c", "")); + filters.push((r"a-1a4076bc", "albatross")); + filters.push((r"-1a4076bc", "")); insta::with_settings!({ filters => filters @@ -234,7 +234,7 @@ fn requires_less_version_does_not_exist() -> Result<()> { assert_cmd_snapshot!(Command::new(get_cargo_bin(BIN_NAME)) .arg("pip") .arg("install") - .arg("a-e45cec3c<2.0.0") + .arg("a-1a4076bc<2.0.0") .arg("--extra-index-url") .arg("https://test.pypi.org/simple") .arg("--cache-dir") @@ -252,7 +252,7 @@ fn requires_less_version_does_not_exist() -> Result<()> { "###); }); - assert_not_installed(&venv, "a_e45cec3c", &temp_dir); + assert_not_installed(&venv, "a_1a4076bc", &temp_dir); Ok(()) } @@ -262,9 +262,9 @@ fn requires_less_version_does_not_exist() -> Result<()> { /// The user requires package `a` but `a` requires package `b` which does not exist /// /// ```text -/// aca2796a +/// 22a72022 /// ├── environment -/// │ └── python3.7 +/// │ └── python3.8 /// ├── root /// │ └── requires a /// │ └── satisfied by a-1.0.0 @@ -277,12 +277,12 @@ fn requires_less_version_does_not_exist() -> Result<()> { fn transitive_requires_package_does_not_exist() -> Result<()> { let temp_dir = assert_fs::TempDir::new()?; let cache_dir = assert_fs::TempDir::new()?; - let venv = create_venv(&temp_dir, &cache_dir, "3.7"); + let venv = create_venv(&temp_dir, &cache_dir, "3.8"); // In addition to the standard filters, swap out package names for more realistic messages let mut filters = INSTA_FILTERS.to_vec(); - filters.push((r"a-aca2796a", "albatross")); - filters.push((r"-aca2796a", "")); + filters.push((r"a-22a72022", "albatross")); + filters.push((r"-22a72022", "")); insta::with_settings!({ filters => filters @@ -290,7 +290,7 @@ fn transitive_requires_package_does_not_exist() -> Result<()> { assert_cmd_snapshot!(Command::new(get_cargo_bin(BIN_NAME)) .arg("pip") .arg("install") - .arg("a-aca2796a") + .arg("a-22a72022") .arg("--extra-index-url") .arg("https://test.pypi.org/simple") .arg("--cache-dir") @@ -307,7 +307,7 @@ fn transitive_requires_package_does_not_exist() -> Result<()> { "###); }); - assert_not_installed(&venv, "a_aca2796a", &temp_dir); + assert_not_installed(&venv, "a_22a72022", &temp_dir); Ok(()) } @@ -318,9 +318,9 @@ fn transitive_requires_package_does_not_exist() -> Result<()> { /// that version. /// /// ```text -/// 7a9ed79c +/// 2bc4455f /// ├── environment -/// │ └── python3.7 +/// │ └── python3.8 /// ├── root /// │ └── requires a!=1.0.0 /// │ └── unsatisfied: no matching version @@ -331,12 +331,12 @@ fn transitive_requires_package_does_not_exist() -> Result<()> { fn excluded_only_version() -> Result<()> { let temp_dir = assert_fs::TempDir::new()?; let cache_dir = assert_fs::TempDir::new()?; - let venv = create_venv(&temp_dir, &cache_dir, "3.7"); + let venv = create_venv(&temp_dir, &cache_dir, "3.8"); // In addition to the standard filters, swap out package names for more realistic messages let mut filters = INSTA_FILTERS.to_vec(); - filters.push((r"a-7a9ed79c", "albatross")); - filters.push((r"-7a9ed79c", "")); + filters.push((r"a-2bc4455f", "albatross")); + filters.push((r"-2bc4455f", "")); insta::with_settings!({ filters => filters @@ -344,7 +344,7 @@ fn excluded_only_version() -> Result<()> { assert_cmd_snapshot!(Command::new(get_cargo_bin(BIN_NAME)) .arg("pip") .arg("install") - .arg("a-7a9ed79c!=1.0.0") + .arg("a-2bc4455f!=1.0.0") .arg("--extra-index-url") .arg("https://test.pypi.org/simple") .arg("--cache-dir") @@ -366,7 +366,7 @@ fn excluded_only_version() -> Result<()> { }); // Only `a==1.0.0` is available but the user excluded it. - assert_not_installed(&venv, "a_7a9ed79c", &temp_dir); + assert_not_installed(&venv, "a_2bc4455f", &temp_dir); Ok(()) } @@ -377,9 +377,9 @@ fn excluded_only_version() -> Result<()> { /// banned that version. /// /// ```text -/// b6b89642 +/// 5b90a629 /// ├── environment -/// │ └── python3.7 +/// │ └── python3.8 /// ├── root /// │ ├── requires a!=2.0.0 /// │ │ ├── satisfied by a-1.0.0 @@ -405,13 +405,13 @@ fn excluded_only_version() -> Result<()> { fn excluded_only_compatible_version() -> Result<()> { let temp_dir = assert_fs::TempDir::new()?; let cache_dir = assert_fs::TempDir::new()?; - let venv = create_venv(&temp_dir, &cache_dir, "3.7"); + let venv = create_venv(&temp_dir, &cache_dir, "3.8"); // In addition to the standard filters, swap out package names for more realistic messages let mut filters = INSTA_FILTERS.to_vec(); - filters.push((r"a-b6b89642", "albatross")); - filters.push((r"b-b6b89642", "bluebird")); - filters.push((r"-b6b89642", "")); + filters.push((r"a-5b90a629", "albatross")); + filters.push((r"b-5b90a629", "bluebird")); + filters.push((r"-5b90a629", "")); insta::with_settings!({ filters => filters @@ -419,8 +419,8 @@ fn excluded_only_compatible_version() -> Result<()> { assert_cmd_snapshot!(Command::new(get_cargo_bin(BIN_NAME)) .arg("pip") .arg("install") - .arg("a-b6b89642!=2.0.0") - .arg("b-b6b89642<3.0.0,>=2.0.0") + .arg("a-5b90a629!=2.0.0") + .arg("b-5b90a629<3.0.0,>=2.0.0") .arg("--extra-index-url") .arg("https://test.pypi.org/simple") .arg("--cache-dir") @@ -447,18 +447,18 @@ fn excluded_only_compatible_version() -> Result<()> { bluebird<=1.0.0 bluebird>=3.0.0 - And because you require one of: + And because you require bluebird>=2.0.0,<3.0.0 and you require one of: albatross<2.0.0 albatross>2.0.0 - and you require bluebird>=2.0.0,<3.0.0, we can conclude that the requirements are unsatisfiable. + we can conclude that the requirements are unsatisfiable. "###); }); // Only `a==1.2.0` is available since `a==1.0.0` and `a==3.0.0` require // incompatible versions of `b`. The user has excluded that version of `a` so // resolution fails. - assert_not_installed(&venv, "a_b6b89642", &temp_dir); - assert_not_installed(&venv, "b_b6b89642", &temp_dir); + assert_not_installed(&venv, "a_5b90a629", &temp_dir); + assert_not_installed(&venv, "b_5b90a629", &temp_dir); Ok(()) } @@ -469,9 +469,9 @@ fn excluded_only_compatible_version() -> Result<()> { /// another dependency `c` excludes that range. /// /// ```text -/// 1cd99bd0 +/// e59e1cd1 /// ├── environment -/// │ └── python3.7 +/// │ └── python3.8 /// ├── root /// │ ├── requires a /// │ │ ├── satisfied by a-1.0.0 @@ -520,14 +520,14 @@ fn excluded_only_compatible_version() -> Result<()> { fn dependency_excludes_range_of_compatible_versions() -> Result<()> { let temp_dir = assert_fs::TempDir::new()?; let cache_dir = assert_fs::TempDir::new()?; - let venv = create_venv(&temp_dir, &cache_dir, "3.7"); + let venv = create_venv(&temp_dir, &cache_dir, "3.8"); // In addition to the standard filters, swap out package names for more realistic messages let mut filters = INSTA_FILTERS.to_vec(); - filters.push((r"a-1cd99bd0", "albatross")); - filters.push((r"b-1cd99bd0", "bluebird")); - filters.push((r"c-1cd99bd0", "crow")); - filters.push((r"-1cd99bd0", "")); + filters.push((r"a-e59e1cd1", "albatross")); + filters.push((r"b-e59e1cd1", "bluebird")); + filters.push((r"c-e59e1cd1", "crow")); + filters.push((r"-e59e1cd1", "")); insta::with_settings!({ filters => filters @@ -535,9 +535,9 @@ fn dependency_excludes_range_of_compatible_versions() -> Result<()> { assert_cmd_snapshot!(Command::new(get_cargo_bin(BIN_NAME)) .arg("pip") .arg("install") - .arg("a-1cd99bd0") - .arg("b-1cd99bd0<3.0.0,>=2.0.0") - .arg("c-1cd99bd0") + .arg("a-e59e1cd1") + .arg("b-e59e1cd1<3.0.0,>=2.0.0") + .arg("c-e59e1cd1") .arg("--extra-index-url") .arg("https://test.pypi.org/simple") .arg("--cache-dir") @@ -551,36 +551,34 @@ fn dependency_excludes_range_of_compatible_versions() -> Result<()> { ----- stderr ----- × No solution found when resolving dependencies: - ╰─▶ Because there are no versions of albatross that satisfy any of: - albatross<1.0.0 - albatross>1.0.0,<2.0.0 - albatross>3.0.0 - and albatross==1.0.0 depends on bluebird==1.0.0, we can conclude that albatross<2.0.0 depends on bluebird==1.0.0. (1) - - Because there are no versions of crow that satisfy any of: + ╰─▶ Because there are no versions of crow that satisfy any of: crow<1.0.0 crow>1.0.0,<2.0.0 crow>2.0.0 - and crow==1.0.0 depends on albatross<2.0.0, we can conclude that crow<2.0.0 depends on albatross<2.0.0. - And because crow==2.0.0 depends on albatross>=3.0.0, we can conclude that all versions of crow depend on one of: - albatross<2.0.0 - albatross>=3.0.0 + and crow==1.0.0 depends on albatross<2.0.0, we can conclude that crow<2.0.0 depends on albatross<2.0.0. (1) - And because we know from (1) that albatross<2.0.0 depends on bluebird==1.0.0, we can conclude that albatross!=3.0.0, bluebird!=1.0.0, all versions of crow are incompatible. - And because albatross==3.0.0 depends on bluebird==3.0.0, we can conclude that all versions of crow depend on one of: + Because there are no versions of albatross that satisfy any of: + albatross<1.0.0 + albatross>1.0.0,<2.0.0 + and albatross==1.0.0 depends on bluebird==1.0.0, we can conclude that albatross<2.0.0 depends on bluebird==1.0.0. + And because we know from (1) that crow<2.0.0 depends on albatross<2.0.0, we can conclude that crow<2.0.0 depends on bluebird==1.0.0. + And because crow==2.0.0 depends on albatross>=3.0.0, we can conclude that all versions of crow, bluebird!=1.0.0, albatross<3.0.0 are incompatible. (2) + + Because only albatross<=3.0.0 is available and albatross==3.0.0 depends on bluebird==3.0.0, we can conclude that albatross>=3.0.0 depends on bluebird==3.0.0. + And because we know from (2) that all versions of crow, bluebird!=1.0.0, albatross<3.0.0 are incompatible, we can conclude that all versions of crow depend on one of: bluebird<=1.0.0 bluebird>=3.0.0 - And because you require bluebird>=2.0.0,<3.0.0 and you require crow, we can conclude that the requirements are unsatisfiable. + And because you require crow and you require bluebird>=2.0.0,<3.0.0, we can conclude that the requirements are unsatisfiable. "###); }); // Only the `2.x` versions of `a` are available since `a==1.0.0` and `a==3.0.0` // require incompatible versions of `b`, but all available versions of `c` exclude // that range of `a` so resolution fails. - assert_not_installed(&venv, "a_1cd99bd0", &temp_dir); - assert_not_installed(&venv, "b_1cd99bd0", &temp_dir); - assert_not_installed(&venv, "c_1cd99bd0", &temp_dir); + assert_not_installed(&venv, "a_e59e1cd1", &temp_dir); + assert_not_installed(&venv, "b_e59e1cd1", &temp_dir); + assert_not_installed(&venv, "c_e59e1cd1", &temp_dir); Ok(()) } @@ -594,9 +592,9 @@ fn dependency_excludes_range_of_compatible_versions() -> Result<()> { /// `d`. /// /// ```text -/// 0fd25b39 +/// ed41451f /// ├── environment -/// │ └── python3.7 +/// │ └── python3.8 /// ├── root /// │ ├── requires a /// │ │ ├── satisfied by a-1.0.0 @@ -653,14 +651,14 @@ fn dependency_excludes_range_of_compatible_versions() -> Result<()> { fn dependency_excludes_non_contiguous_range_of_compatible_versions() -> Result<()> { let temp_dir = assert_fs::TempDir::new()?; let cache_dir = assert_fs::TempDir::new()?; - let venv = create_venv(&temp_dir, &cache_dir, "3.7"); + let venv = create_venv(&temp_dir, &cache_dir, "3.8"); // In addition to the standard filters, swap out package names for more realistic messages let mut filters = INSTA_FILTERS.to_vec(); - filters.push((r"a-0fd25b39", "albatross")); - filters.push((r"b-0fd25b39", "bluebird")); - filters.push((r"c-0fd25b39", "crow")); - filters.push((r"-0fd25b39", "")); + filters.push((r"a-ed41451f", "albatross")); + filters.push((r"b-ed41451f", "bluebird")); + filters.push((r"c-ed41451f", "crow")); + filters.push((r"-ed41451f", "")); insta::with_settings!({ filters => filters @@ -668,9 +666,9 @@ fn dependency_excludes_non_contiguous_range_of_compatible_versions() -> Result<( assert_cmd_snapshot!(Command::new(get_cargo_bin(BIN_NAME)) .arg("pip") .arg("install") - .arg("a-0fd25b39") - .arg("b-0fd25b39<3.0.0,>=2.0.0") - .arg("c-0fd25b39") + .arg("a-ed41451f") + .arg("b-ed41451f<3.0.0,>=2.0.0") + .arg("c-ed41451f") .arg("--extra-index-url") .arg("https://test.pypi.org/simple") .arg("--cache-dir") @@ -709,9 +707,9 @@ fn dependency_excludes_non_contiguous_range_of_compatible_versions() -> Result<( // Only the `2.x` versions of `a` are available since `a==1.0.0` and `a==3.0.0` // require incompatible versions of `b`, but all available versions of `c` exclude // that range of `a` so resolution fails. - assert_not_installed(&venv, "a_0fd25b39", &temp_dir); - assert_not_installed(&venv, "b_0fd25b39", &temp_dir); - assert_not_installed(&venv, "c_0fd25b39", &temp_dir); + assert_not_installed(&venv, "a_ed41451f", &temp_dir); + assert_not_installed(&venv, "b_ed41451f", &temp_dir); + assert_not_installed(&venv, "c_ed41451f", &temp_dir); Ok(()) } @@ -721,9 +719,9 @@ fn dependency_excludes_non_contiguous_range_of_compatible_versions() -> Result<( /// Optional dependencies are requested for the package. /// /// ```text -/// 76e5355c +/// c9be513b /// ├── environment -/// │ └── python3.7 +/// │ └── python3.8 /// ├── root /// │ └── requires a[extra] /// │ ├── satisfied by a-1.0.0 @@ -740,13 +738,13 @@ fn dependency_excludes_non_contiguous_range_of_compatible_versions() -> Result<( fn extra_required() -> Result<()> { let temp_dir = assert_fs::TempDir::new()?; let cache_dir = assert_fs::TempDir::new()?; - let venv = create_venv(&temp_dir, &cache_dir, "3.7"); + let venv = create_venv(&temp_dir, &cache_dir, "3.8"); // In addition to the standard filters, swap out package names for more realistic messages let mut filters = INSTA_FILTERS.to_vec(); - filters.push((r"a-76e5355c", "albatross")); - filters.push((r"b-76e5355c", "bluebird")); - filters.push((r"-76e5355c", "")); + filters.push((r"a-c9be513b", "albatross")); + filters.push((r"b-c9be513b", "bluebird")); + filters.push((r"-c9be513b", "")); insta::with_settings!({ filters => filters @@ -754,7 +752,7 @@ fn extra_required() -> Result<()> { assert_cmd_snapshot!(Command::new(get_cargo_bin(BIN_NAME)) .arg("pip") .arg("install") - .arg("a-76e5355c[extra]") + .arg("a-c9be513b[extra]") .arg("--extra-index-url") .arg("https://test.pypi.org/simple") .arg("--cache-dir") @@ -775,8 +773,8 @@ fn extra_required() -> Result<()> { "###); }); - assert_installed(&venv, "a_76e5355c", "1.0.0", &temp_dir); - assert_installed(&venv, "b_76e5355c", "1.0.0", &temp_dir); + assert_installed(&venv, "a_c9be513b", "1.0.0", &temp_dir); + assert_installed(&venv, "b_c9be513b", "1.0.0", &temp_dir); Ok(()) } @@ -787,9 +785,9 @@ fn extra_required() -> Result<()> { /// exist. /// /// ```text -/// 06e7489c +/// 79fd9a92 /// ├── environment -/// │ └── python3.7 +/// │ └── python3.8 /// ├── root /// │ └── requires a[extra] /// │ └── satisfied by a-1.0.0 @@ -800,12 +798,12 @@ fn extra_required() -> Result<()> { fn missing_extra() -> Result<()> { let temp_dir = assert_fs::TempDir::new()?; let cache_dir = assert_fs::TempDir::new()?; - let venv = create_venv(&temp_dir, &cache_dir, "3.7"); + let venv = create_venv(&temp_dir, &cache_dir, "3.8"); // In addition to the standard filters, swap out package names for more realistic messages let mut filters = INSTA_FILTERS.to_vec(); - filters.push((r"a-06e7489c", "albatross")); - filters.push((r"-06e7489c", "")); + filters.push((r"a-79fd9a92", "albatross")); + filters.push((r"-79fd9a92", "")); insta::with_settings!({ filters => filters @@ -813,7 +811,7 @@ fn missing_extra() -> Result<()> { assert_cmd_snapshot!(Command::new(get_cargo_bin(BIN_NAME)) .arg("pip") .arg("install") - .arg("a-06e7489c[extra]") + .arg("a-79fd9a92[extra]") .arg("--extra-index-url") .arg("https://test.pypi.org/simple") .arg("--cache-dir") @@ -834,7 +832,7 @@ fn missing_extra() -> Result<()> { }); // Missing extras are ignored during resolution. - assert_installed(&venv, "a_06e7489c", "1.0.0", &temp_dir); + assert_installed(&venv, "a_79fd9a92", "1.0.0", &temp_dir); Ok(()) } @@ -844,9 +842,9 @@ fn missing_extra() -> Result<()> { /// Multiple optional dependencies are requested for the package. /// /// ```text -/// e55f15c4 +/// 14317535 /// ├── environment -/// │ └── python3.7 +/// │ └── python3.8 /// ├── root /// │ └── requires a[extra_b,extra_c] /// │ ├── satisfied by a-1.0.0 @@ -869,14 +867,14 @@ fn missing_extra() -> Result<()> { fn multiple_extras_required() -> Result<()> { let temp_dir = assert_fs::TempDir::new()?; let cache_dir = assert_fs::TempDir::new()?; - let venv = create_venv(&temp_dir, &cache_dir, "3.7"); + let venv = create_venv(&temp_dir, &cache_dir, "3.8"); // In addition to the standard filters, swap out package names for more realistic messages let mut filters = INSTA_FILTERS.to_vec(); - filters.push((r"a-e55f15c4", "albatross")); - filters.push((r"b-e55f15c4", "bluebird")); - filters.push((r"c-e55f15c4", "crow")); - filters.push((r"-e55f15c4", "")); + filters.push((r"a-14317535", "albatross")); + filters.push((r"b-14317535", "bluebird")); + filters.push((r"c-14317535", "crow")); + filters.push((r"-14317535", "")); insta::with_settings!({ filters => filters @@ -884,7 +882,7 @@ fn multiple_extras_required() -> Result<()> { assert_cmd_snapshot!(Command::new(get_cargo_bin(BIN_NAME)) .arg("pip") .arg("install") - .arg("a-e55f15c4[extra_b,extra_c]") + .arg("a-14317535[extra_b,extra_c]") .arg("--extra-index-url") .arg("https://test.pypi.org/simple") .arg("--cache-dir") @@ -906,9 +904,9 @@ fn multiple_extras_required() -> Result<()> { "###); }); - assert_installed(&venv, "a_e55f15c4", "1.0.0", &temp_dir); - assert_installed(&venv, "b_e55f15c4", "1.0.0", &temp_dir); - assert_installed(&venv, "c_e55f15c4", "1.0.0", &temp_dir); + assert_installed(&venv, "a_14317535", "1.0.0", &temp_dir); + assert_installed(&venv, "b_14317535", "1.0.0", &temp_dir); + assert_installed(&venv, "c_14317535", "1.0.0", &temp_dir); Ok(()) } @@ -919,9 +917,9 @@ fn multiple_extras_required() -> Result<()> { /// conflicting requirements with each other. /// /// ```text -/// 492741b0 +/// afa38951 /// ├── environment -/// │ └── python3.7 +/// │ └── python3.8 /// ├── root /// │ └── requires a[extra_b,extra_c] /// │ ├── satisfied by a-1.0.0 @@ -943,13 +941,13 @@ fn multiple_extras_required() -> Result<()> { fn extra_incompatible_with_extra() -> Result<()> { let temp_dir = assert_fs::TempDir::new()?; let cache_dir = assert_fs::TempDir::new()?; - let venv = create_venv(&temp_dir, &cache_dir, "3.7"); + let venv = create_venv(&temp_dir, &cache_dir, "3.8"); // In addition to the standard filters, swap out package names for more realistic messages let mut filters = INSTA_FILTERS.to_vec(); - filters.push((r"a-492741b0", "albatross")); - filters.push((r"b-492741b0", "bluebird")); - filters.push((r"-492741b0", "")); + filters.push((r"a-afa38951", "albatross")); + filters.push((r"b-afa38951", "bluebird")); + filters.push((r"-afa38951", "")); insta::with_settings!({ filters => filters @@ -957,7 +955,7 @@ fn extra_incompatible_with_extra() -> Result<()> { assert_cmd_snapshot!(Command::new(get_cargo_bin(BIN_NAME)) .arg("pip") .arg("install") - .arg("a-492741b0[extra_b,extra_c]") + .arg("a-afa38951[extra_b,extra_c]") .arg("--extra-index-url") .arg("https://test.pypi.org/simple") .arg("--cache-dir") @@ -971,15 +969,15 @@ fn extra_incompatible_with_extra() -> Result<()> { ----- stderr ----- × No solution found when resolving dependencies: - ╰─▶ Because only albatross[extra-c]==1.0.0 is available and albatross[extra-c]==1.0.0 depends on bluebird==2.0.0, we can conclude that all versions of albatross[extra-c] depend on bluebird==2.0.0. - And because albatross[extra-b]==1.0.0 depends on bluebird==1.0.0 and only albatross[extra-b]==1.0.0 is available, we can conclude that all versions of albatross[extra-b] and all versions of albatross[extra-c] are incompatible. - And because you require albatross[extra-c] and you require albatross[extra-b], we can conclude that the requirements are unsatisfiable. + ╰─▶ Because only albatross[extra-b]==1.0.0 is available and albatross[extra-b]==1.0.0 depends on bluebird==1.0.0, we can conclude that all versions of albatross[extra-b] depend on bluebird==1.0.0. + And because albatross[extra-c]==1.0.0 depends on bluebird==2.0.0 and only albatross[extra-c]==1.0.0 is available, we can conclude that all versions of albatross[extra-c] and all versions of albatross[extra-b] are incompatible. + And because you require albatross[extra-b] and you require albatross[extra-c], we can conclude that the requirements are unsatisfiable. "###); }); // Because both `extra_b` and `extra_c` are requested and they require incompatible // versions of `b`, `a` cannot be installed. - assert_not_installed(&venv, "a_492741b0", &temp_dir); + assert_not_installed(&venv, "a_afa38951", &temp_dir); Ok(()) } @@ -989,9 +987,9 @@ fn extra_incompatible_with_extra() -> Result<()> { /// One of two incompatible optional dependencies are requested for the package. /// /// ```text -/// f0b0089a +/// 5c305dd9 /// ├── environment -/// │ └── python3.7 +/// │ └── python3.8 /// ├── root /// │ └── requires a[extra_c] /// │ ├── satisfied by a-1.0.0 @@ -1013,13 +1011,13 @@ fn extra_incompatible_with_extra() -> Result<()> { fn extra_incompatible_with_extra_not_requested() -> Result<()> { let temp_dir = assert_fs::TempDir::new()?; let cache_dir = assert_fs::TempDir::new()?; - let venv = create_venv(&temp_dir, &cache_dir, "3.7"); + let venv = create_venv(&temp_dir, &cache_dir, "3.8"); // In addition to the standard filters, swap out package names for more realistic messages let mut filters = INSTA_FILTERS.to_vec(); - filters.push((r"a-f0b0089a", "albatross")); - filters.push((r"b-f0b0089a", "bluebird")); - filters.push((r"-f0b0089a", "")); + filters.push((r"a-5c305dd9", "albatross")); + filters.push((r"b-5c305dd9", "bluebird")); + filters.push((r"-5c305dd9", "")); insta::with_settings!({ filters => filters @@ -1027,7 +1025,7 @@ fn extra_incompatible_with_extra_not_requested() -> Result<()> { assert_cmd_snapshot!(Command::new(get_cargo_bin(BIN_NAME)) .arg("pip") .arg("install") - .arg("a-f0b0089a[extra_c]") + .arg("a-5c305dd9[extra_c]") .arg("--extra-index-url") .arg("https://test.pypi.org/simple") .arg("--cache-dir") @@ -1050,8 +1048,8 @@ fn extra_incompatible_with_extra_not_requested() -> Result<()> { // Because the user does not request both extras, it is okay that one is // incompatible with the other. - assert_installed(&venv, "a_f0b0089a", "1.0.0", &temp_dir); - assert_installed(&venv, "b_f0b0089a", "2.0.0", &temp_dir); + assert_installed(&venv, "a_5c305dd9", "1.0.0", &temp_dir); + assert_installed(&venv, "b_5c305dd9", "2.0.0", &temp_dir); Ok(()) } @@ -1062,9 +1060,9 @@ fn extra_incompatible_with_extra_not_requested() -> Result<()> { /// compatible with other requested versions. /// /// ```text -/// 9d588075 +/// 743dac5a /// ├── environment -/// │ └── python3.7 +/// │ └── python3.8 /// ├── root /// │ ├── requires a[extra] /// │ │ ├── satisfied by a-1.0.0 @@ -1084,13 +1082,13 @@ fn extra_incompatible_with_extra_not_requested() -> Result<()> { fn extra_incompatible_with_root() -> Result<()> { let temp_dir = assert_fs::TempDir::new()?; let cache_dir = assert_fs::TempDir::new()?; - let venv = create_venv(&temp_dir, &cache_dir, "3.7"); + let venv = create_venv(&temp_dir, &cache_dir, "3.8"); // In addition to the standard filters, swap out package names for more realistic messages let mut filters = INSTA_FILTERS.to_vec(); - filters.push((r"a-9d588075", "albatross")); - filters.push((r"b-9d588075", "bluebird")); - filters.push((r"-9d588075", "")); + filters.push((r"a-743dac5a", "albatross")); + filters.push((r"b-743dac5a", "bluebird")); + filters.push((r"-743dac5a", "")); insta::with_settings!({ filters => filters @@ -1098,8 +1096,8 @@ fn extra_incompatible_with_root() -> Result<()> { assert_cmd_snapshot!(Command::new(get_cargo_bin(BIN_NAME)) .arg("pip") .arg("install") - .arg("a-9d588075[extra]") - .arg("b-9d588075==2.0.0") + .arg("a-743dac5a[extra]") + .arg("b-743dac5a==2.0.0") .arg("--extra-index-url") .arg("https://test.pypi.org/simple") .arg("--cache-dir") @@ -1113,15 +1111,15 @@ fn extra_incompatible_with_root() -> Result<()> { ----- stderr ----- × No solution found when resolving dependencies: - ╰─▶ Because albatross[extra]==1.0.0 depends on bluebird==1.0.0 and only albatross[extra]==1.0.0 is available, we can conclude that all versions of albatross[extra] depend on bluebird==1.0.0. - And because you require albatross[extra] and you require bluebird==2.0.0, we can conclude that the requirements are unsatisfiable. + ╰─▶ Because only albatross[extra]==1.0.0 is available and albatross[extra]==1.0.0 depends on bluebird==1.0.0, we can conclude that all versions of albatross[extra] depend on bluebird==1.0.0. + And because you require bluebird==2.0.0 and you require albatross[extra], we can conclude that the requirements are unsatisfiable. "###); }); // Because the user requested `b==2.0.0` but the requested extra requires // `b==1.0.0`, the dependencies cannot be satisfied. - assert_not_installed(&venv, "a_9d588075", &temp_dir); - assert_not_installed(&venv, "b_9d588075", &temp_dir); + assert_not_installed(&venv, "a_743dac5a", &temp_dir); + assert_not_installed(&venv, "b_743dac5a", &temp_dir); Ok(()) } @@ -1132,9 +1130,9 @@ fn extra_incompatible_with_root() -> Result<()> { /// on an older version. /// /// ```text -/// f1877db3 +/// a35e4442 /// ├── environment -/// │ └── python3.7 +/// │ └── python3.8 /// ├── root /// │ └── requires a[extra] /// │ ├── satisfied by a-1.0.0 @@ -1155,13 +1153,13 @@ fn extra_incompatible_with_root() -> Result<()> { fn extra_does_not_exist_backtrack() -> Result<()> { let temp_dir = assert_fs::TempDir::new()?; let cache_dir = assert_fs::TempDir::new()?; - let venv = create_venv(&temp_dir, &cache_dir, "3.7"); + let venv = create_venv(&temp_dir, &cache_dir, "3.8"); // In addition to the standard filters, swap out package names for more realistic messages let mut filters = INSTA_FILTERS.to_vec(); - filters.push((r"a-f1877db3", "albatross")); - filters.push((r"b-f1877db3", "bluebird")); - filters.push((r"-f1877db3", "")); + filters.push((r"a-a35e4442", "albatross")); + filters.push((r"b-a35e4442", "bluebird")); + filters.push((r"-a35e4442", "")); insta::with_settings!({ filters => filters @@ -1169,7 +1167,7 @@ fn extra_does_not_exist_backtrack() -> Result<()> { assert_cmd_snapshot!(Command::new(get_cargo_bin(BIN_NAME)) .arg("pip") .arg("install") - .arg("a-f1877db3[extra]") + .arg("a-a35e4442[extra]") .arg("--extra-index-url") .arg("https://test.pypi.org/simple") .arg("--cache-dir") @@ -1191,7 +1189,7 @@ fn extra_does_not_exist_backtrack() -> Result<()> { // The resolver should not backtrack to `a==1.0.0` because missing extras are // allowed during resolution. `b` should not be installed. - assert_installed(&venv, "a_f1877db3", "3.0.0", &temp_dir); + assert_installed(&venv, "a_a35e4442", "3.0.0", &temp_dir); Ok(()) } @@ -1201,9 +1199,9 @@ fn extra_does_not_exist_backtrack() -> Result<()> { /// The user requires two incompatible, existing versions of package `a` /// /// ```text -/// 80d82ee8 +/// f75c56e2 /// ├── environment -/// │ └── python3.7 +/// │ └── python3.8 /// ├── root /// │ ├── requires a==1.0.0 /// │ │ └── satisfied by a-1.0.0 @@ -1217,12 +1215,12 @@ fn extra_does_not_exist_backtrack() -> Result<()> { fn direct_incompatible_versions() -> Result<()> { let temp_dir = assert_fs::TempDir::new()?; let cache_dir = assert_fs::TempDir::new()?; - let venv = create_venv(&temp_dir, &cache_dir, "3.7"); + let venv = create_venv(&temp_dir, &cache_dir, "3.8"); // In addition to the standard filters, swap out package names for more realistic messages let mut filters = INSTA_FILTERS.to_vec(); - filters.push((r"a-80d82ee8", "albatross")); - filters.push((r"-80d82ee8", "")); + filters.push((r"a-f75c56e2", "albatross")); + filters.push((r"-f75c56e2", "")); insta::with_settings!({ filters => filters @@ -1230,8 +1228,8 @@ fn direct_incompatible_versions() -> Result<()> { assert_cmd_snapshot!(Command::new(get_cargo_bin(BIN_NAME)) .arg("pip") .arg("install") - .arg("a-80d82ee8==1.0.0") - .arg("a-80d82ee8==2.0.0") + .arg("a-f75c56e2==1.0.0") + .arg("a-f75c56e2==2.0.0") .arg("--extra-index-url") .arg("https://test.pypi.org/simple") .arg("--cache-dir") @@ -1249,8 +1247,8 @@ fn direct_incompatible_versions() -> Result<()> { "###); }); - assert_not_installed(&venv, "a_80d82ee8", &temp_dir); - assert_not_installed(&venv, "a_80d82ee8", &temp_dir); + assert_not_installed(&venv, "a_f75c56e2", &temp_dir); + assert_not_installed(&venv, "a_f75c56e2", &temp_dir); Ok(()) } @@ -1261,9 +1259,9 @@ fn direct_incompatible_versions() -> Result<()> { /// `b` /// /// ```text -/// a967e815 +/// 812a0fda /// ├── environment -/// │ └── python3.7 +/// │ └── python3.8 /// ├── root /// │ ├── requires a /// │ │ └── satisfied by a-1.0.0 @@ -1281,13 +1279,13 @@ fn direct_incompatible_versions() -> Result<()> { fn transitive_incompatible_with_root_version() -> Result<()> { let temp_dir = assert_fs::TempDir::new()?; let cache_dir = assert_fs::TempDir::new()?; - let venv = create_venv(&temp_dir, &cache_dir, "3.7"); + let venv = create_venv(&temp_dir, &cache_dir, "3.8"); // In addition to the standard filters, swap out package names for more realistic messages let mut filters = INSTA_FILTERS.to_vec(); - filters.push((r"a-a967e815", "albatross")); - filters.push((r"b-a967e815", "bluebird")); - filters.push((r"-a967e815", "")); + filters.push((r"a-812a0fda", "albatross")); + filters.push((r"b-812a0fda", "bluebird")); + filters.push((r"-812a0fda", "")); insta::with_settings!({ filters => filters @@ -1295,8 +1293,8 @@ fn transitive_incompatible_with_root_version() -> Result<()> { assert_cmd_snapshot!(Command::new(get_cargo_bin(BIN_NAME)) .arg("pip") .arg("install") - .arg("a-a967e815") - .arg("b-a967e815==1.0.0") + .arg("a-812a0fda") + .arg("b-812a0fda==1.0.0") .arg("--extra-index-url") .arg("https://test.pypi.org/simple") .arg("--cache-dir") @@ -1315,8 +1313,8 @@ fn transitive_incompatible_with_root_version() -> Result<()> { "###); }); - assert_not_installed(&venv, "a_a967e815", &temp_dir); - assert_not_installed(&venv, "b_a967e815", &temp_dir); + assert_not_installed(&venv, "a_812a0fda", &temp_dir); + assert_not_installed(&venv, "b_812a0fda", &temp_dir); Ok(()) } @@ -1327,9 +1325,9 @@ fn transitive_incompatible_with_root_version() -> Result<()> { /// `c` /// /// ```text -/// 6866d8dc +/// 74531fe0 /// ├── environment -/// │ └── python3.7 +/// │ └── python3.8 /// ├── root /// │ ├── requires a /// │ │ └── satisfied by a-1.0.0 @@ -1351,14 +1349,14 @@ fn transitive_incompatible_with_root_version() -> Result<()> { fn transitive_incompatible_with_transitive() -> Result<()> { let temp_dir = assert_fs::TempDir::new()?; let cache_dir = assert_fs::TempDir::new()?; - let venv = create_venv(&temp_dir, &cache_dir, "3.7"); + let venv = create_venv(&temp_dir, &cache_dir, "3.8"); // In addition to the standard filters, swap out package names for more realistic messages let mut filters = INSTA_FILTERS.to_vec(); - filters.push((r"a-6866d8dc", "albatross")); - filters.push((r"b-6866d8dc", "bluebird")); - filters.push((r"c-6866d8dc", "crow")); - filters.push((r"-6866d8dc", "")); + filters.push((r"a-74531fe0", "albatross")); + filters.push((r"b-74531fe0", "bluebird")); + filters.push((r"c-74531fe0", "crow")); + filters.push((r"-74531fe0", "")); insta::with_settings!({ filters => filters @@ -1366,8 +1364,8 @@ fn transitive_incompatible_with_transitive() -> Result<()> { assert_cmd_snapshot!(Command::new(get_cargo_bin(BIN_NAME)) .arg("pip") .arg("install") - .arg("a-6866d8dc") - .arg("b-6866d8dc") + .arg("a-74531fe0") + .arg("b-74531fe0") .arg("--extra-index-url") .arg("https://test.pypi.org/simple") .arg("--cache-dir") @@ -1381,14 +1379,14 @@ fn transitive_incompatible_with_transitive() -> Result<()> { ----- stderr ----- × No solution found when resolving dependencies: - ╰─▶ Because only bluebird==1.0.0 is available and bluebird==1.0.0 depends on crow==2.0.0, we can conclude that all versions of bluebird depend on crow==2.0.0. - And because albatross==1.0.0 depends on crow==1.0.0 and only albatross==1.0.0 is available, we can conclude that all versions of bluebird and all versions of albatross are incompatible. - And because you require bluebird and you require albatross, we can conclude that the requirements are unsatisfiable. + ╰─▶ Because only albatross==1.0.0 is available and albatross==1.0.0 depends on crow==1.0.0, we can conclude that all versions of albatross depend on crow==1.0.0. + And because bluebird==1.0.0 depends on crow==2.0.0 and only bluebird==1.0.0 is available, we can conclude that all versions of albatross and all versions of bluebird are incompatible. + And because you require albatross and you require bluebird, we can conclude that the requirements are unsatisfiable. "###); }); - assert_not_installed(&venv, "a_6866d8dc", &temp_dir); - assert_not_installed(&venv, "b_6866d8dc", &temp_dir); + assert_not_installed(&venv, "a_74531fe0", &temp_dir); + assert_not_installed(&venv, "b_74531fe0", &temp_dir); Ok(()) } @@ -1399,9 +1397,9 @@ fn transitive_incompatible_with_transitive() -> Result<()> { /// available. /// /// ```text -/// 9a1b3dda +/// e2dbc237 /// ├── environment -/// │ └── python3.7 +/// │ └── python3.8 /// ├── root /// │ └── requires a /// │ └── unsatisfied: no matching version @@ -1412,12 +1410,12 @@ fn transitive_incompatible_with_transitive() -> Result<()> { fn package_only_prereleases() -> Result<()> { let temp_dir = assert_fs::TempDir::new()?; let cache_dir = assert_fs::TempDir::new()?; - let venv = create_venv(&temp_dir, &cache_dir, "3.7"); + let venv = create_venv(&temp_dir, &cache_dir, "3.8"); // In addition to the standard filters, swap out package names for more realistic messages let mut filters = INSTA_FILTERS.to_vec(); - filters.push((r"a-9a1b3dda", "albatross")); - filters.push((r"-9a1b3dda", "")); + filters.push((r"a-e2dbc237", "albatross")); + filters.push((r"-e2dbc237", "")); insta::with_settings!({ filters => filters @@ -1425,7 +1423,7 @@ fn package_only_prereleases() -> Result<()> { assert_cmd_snapshot!(Command::new(get_cargo_bin(BIN_NAME)) .arg("pip") .arg("install") - .arg("a-9a1b3dda") + .arg("a-e2dbc237") .arg("--extra-index-url") .arg("https://test.pypi.org/simple") .arg("--cache-dir") @@ -1447,7 +1445,7 @@ fn package_only_prereleases() -> Result<()> { // Since there are only prerelease versions of `a` available, it should be // installed even though the user did not include a prerelease specifier. - assert_installed(&venv, "a_9a1b3dda", "1.0.0a1", &temp_dir); + assert_installed(&venv, "a_e2dbc237", "1.0.0a1", &temp_dir); Ok(()) } @@ -1458,9 +1456,9 @@ fn package_only_prereleases() -> Result<()> { /// versions but they did not include a prerelease specifier. /// /// ```text -/// 19673198 +/// 4e199000 /// ├── environment -/// │ └── python3.7 +/// │ └── python3.8 /// ├── root /// │ └── requires a>0.1.0 /// │ └── unsatisfied: no matching version @@ -1472,12 +1470,12 @@ fn package_only_prereleases() -> Result<()> { fn package_only_prereleases_in_range() -> Result<()> { let temp_dir = assert_fs::TempDir::new()?; let cache_dir = assert_fs::TempDir::new()?; - let venv = create_venv(&temp_dir, &cache_dir, "3.7"); + let venv = create_venv(&temp_dir, &cache_dir, "3.8"); // In addition to the standard filters, swap out package names for more realistic messages let mut filters = INSTA_FILTERS.to_vec(); - filters.push((r"a-19673198", "albatross")); - filters.push((r"-19673198", "")); + filters.push((r"a-4e199000", "albatross")); + filters.push((r"-4e199000", "")); insta::with_settings!({ filters => filters @@ -1485,7 +1483,7 @@ fn package_only_prereleases_in_range() -> Result<()> { assert_cmd_snapshot!(Command::new(get_cargo_bin(BIN_NAME)) .arg("pip") .arg("install") - .arg("a-19673198>0.1.0") + .arg("a-4e199000>0.1.0") .arg("--extra-index-url") .arg("https://test.pypi.org/simple") .arg("--cache-dir") @@ -1507,7 +1505,7 @@ fn package_only_prereleases_in_range() -> Result<()> { // Since there are stable versions of `a` available, prerelease versions should not // be selected without explicit opt-in. - assert_not_installed(&venv, "a_19673198", &temp_dir); + assert_not_installed(&venv, "a_4e199000", &temp_dir); Ok(()) } @@ -1519,9 +1517,9 @@ fn package_only_prereleases_in_range() -> Result<()> { /// opted into prereleases globally. /// /// ```text -/// 51f94da2 +/// af391f9c /// ├── environment -/// │ └── python3.7 +/// │ └── python3.8 /// ├── root /// │ └── requires a>0.1.0 /// │ └── unsatisfied: no matching version @@ -1533,12 +1531,12 @@ fn package_only_prereleases_in_range() -> Result<()> { fn requires_package_only_prereleases_in_range_global_opt_in() -> Result<()> { let temp_dir = assert_fs::TempDir::new()?; let cache_dir = assert_fs::TempDir::new()?; - let venv = create_venv(&temp_dir, &cache_dir, "3.7"); + let venv = create_venv(&temp_dir, &cache_dir, "3.8"); // In addition to the standard filters, swap out package names for more realistic messages let mut filters = INSTA_FILTERS.to_vec(); - filters.push((r"a-51f94da2", "albatross")); - filters.push((r"-51f94da2", "")); + filters.push((r"a-af391f9c", "albatross")); + filters.push((r"-af391f9c", "")); insta::with_settings!({ filters => filters @@ -1546,7 +1544,7 @@ fn requires_package_only_prereleases_in_range_global_opt_in() -> Result<()> { assert_cmd_snapshot!(Command::new(get_cargo_bin(BIN_NAME)) .arg("pip") .arg("install") - .arg("a-51f94da2>0.1.0") + .arg("a-af391f9c>0.1.0") .arg("--prerelease=allow") .arg("--extra-index-url") .arg("https://test.pypi.org/simple") @@ -1567,7 +1565,7 @@ fn requires_package_only_prereleases_in_range_global_opt_in() -> Result<()> { "###); }); - assert_installed(&venv, "a_51f94da2", "1.0.0a1", &temp_dir); + assert_installed(&venv, "a_af391f9c", "1.0.0a1", &temp_dir); Ok(()) } @@ -1578,9 +1576,9 @@ fn requires_package_only_prereleases_in_range_global_opt_in() -> Result<()> { /// and an older non-prerelease version. /// /// ```text -/// eebe53a6 +/// 81dbab9d /// ├── environment -/// │ └── python3.7 +/// │ └── python3.8 /// ├── root /// │ └── requires a /// │ └── satisfied by a-0.1.0 @@ -1592,12 +1590,12 @@ fn requires_package_only_prereleases_in_range_global_opt_in() -> Result<()> { fn requires_package_prerelease_and_final_any() -> Result<()> { let temp_dir = assert_fs::TempDir::new()?; let cache_dir = assert_fs::TempDir::new()?; - let venv = create_venv(&temp_dir, &cache_dir, "3.7"); + let venv = create_venv(&temp_dir, &cache_dir, "3.8"); // In addition to the standard filters, swap out package names for more realistic messages let mut filters = INSTA_FILTERS.to_vec(); - filters.push((r"a-eebe53a6", "albatross")); - filters.push((r"-eebe53a6", "")); + filters.push((r"a-81dbab9d", "albatross")); + filters.push((r"-81dbab9d", "")); insta::with_settings!({ filters => filters @@ -1605,7 +1603,7 @@ fn requires_package_prerelease_and_final_any() -> Result<()> { assert_cmd_snapshot!(Command::new(get_cargo_bin(BIN_NAME)) .arg("pip") .arg("install") - .arg("a-eebe53a6") + .arg("a-81dbab9d") .arg("--extra-index-url") .arg("https://test.pypi.org/simple") .arg("--cache-dir") @@ -1627,7 +1625,7 @@ fn requires_package_prerelease_and_final_any() -> Result<()> { // Since the user did not provide a prerelease specifier, the older stable version // should be selected. - assert_installed(&venv, "a_eebe53a6", "0.1.0", &temp_dir); + assert_installed(&venv, "a_81dbab9d", "0.1.0", &temp_dir); Ok(()) } @@ -1638,9 +1636,9 @@ fn requires_package_prerelease_and_final_any() -> Result<()> { /// releases are available. /// /// ```text -/// 9d4725eb +/// 2ee8f3f9 /// ├── environment -/// │ └── python3.7 +/// │ └── python3.8 /// ├── root /// │ └── requires a>=0.1.0a1 /// │ ├── satisfied by a-0.1.0 @@ -1655,12 +1653,12 @@ fn requires_package_prerelease_and_final_any() -> Result<()> { fn package_prerelease_specified_only_final_available() -> Result<()> { let temp_dir = assert_fs::TempDir::new()?; let cache_dir = assert_fs::TempDir::new()?; - let venv = create_venv(&temp_dir, &cache_dir, "3.7"); + let venv = create_venv(&temp_dir, &cache_dir, "3.8"); // In addition to the standard filters, swap out package names for more realistic messages let mut filters = INSTA_FILTERS.to_vec(); - filters.push((r"a-9d4725eb", "albatross")); - filters.push((r"-9d4725eb", "")); + filters.push((r"a-2ee8f3f9", "albatross")); + filters.push((r"-2ee8f3f9", "")); insta::with_settings!({ filters => filters @@ -1668,7 +1666,7 @@ fn package_prerelease_specified_only_final_available() -> Result<()> { assert_cmd_snapshot!(Command::new(get_cargo_bin(BIN_NAME)) .arg("pip") .arg("install") - .arg("a-9d4725eb>=0.1.0a1") + .arg("a-2ee8f3f9>=0.1.0a1") .arg("--extra-index-url") .arg("https://test.pypi.org/simple") .arg("--cache-dir") @@ -1689,7 +1687,7 @@ fn package_prerelease_specified_only_final_available() -> Result<()> { }); // The latest stable version should be selected. - assert_installed(&venv, "a_9d4725eb", "0.3.0", &temp_dir); + assert_installed(&venv, "a_2ee8f3f9", "0.3.0", &temp_dir); Ok(()) } @@ -1700,9 +1698,9 @@ fn package_prerelease_specified_only_final_available() -> Result<()> { /// prerelease releases are available. /// /// ```text -/// 6cc95bc8 +/// dd6b1e32 /// ├── environment -/// │ └── python3.7 +/// │ └── python3.8 /// ├── root /// │ └── requires a>=0.1.0a1 /// │ ├── satisfied by a-0.1.0a1 @@ -1717,12 +1715,12 @@ fn package_prerelease_specified_only_final_available() -> Result<()> { fn package_prerelease_specified_only_prerelease_available() -> Result<()> { let temp_dir = assert_fs::TempDir::new()?; let cache_dir = assert_fs::TempDir::new()?; - let venv = create_venv(&temp_dir, &cache_dir, "3.7"); + let venv = create_venv(&temp_dir, &cache_dir, "3.8"); // In addition to the standard filters, swap out package names for more realistic messages let mut filters = INSTA_FILTERS.to_vec(); - filters.push((r"a-6cc95bc8", "albatross")); - filters.push((r"-6cc95bc8", "")); + filters.push((r"a-dd6b1e32", "albatross")); + filters.push((r"-dd6b1e32", "")); insta::with_settings!({ filters => filters @@ -1730,7 +1728,7 @@ fn package_prerelease_specified_only_prerelease_available() -> Result<()> { assert_cmd_snapshot!(Command::new(get_cargo_bin(BIN_NAME)) .arg("pip") .arg("install") - .arg("a-6cc95bc8>=0.1.0a1") + .arg("a-dd6b1e32>=0.1.0a1") .arg("--extra-index-url") .arg("https://test.pypi.org/simple") .arg("--cache-dir") @@ -1751,7 +1749,7 @@ fn package_prerelease_specified_only_prerelease_available() -> Result<()> { }); // The latest prerelease version should be selected. - assert_installed(&venv, "a_6cc95bc8", "0.3.0a1", &temp_dir); + assert_installed(&venv, "a_dd6b1e32", "0.3.0a1", &temp_dir); Ok(()) } @@ -1762,9 +1760,9 @@ fn package_prerelease_specified_only_prerelease_available() -> Result<()> { /// prerelease and stable releases are available. /// /// ```text -/// c97845e2 +/// 794fce4d /// ├── environment -/// │ └── python3.7 +/// │ └── python3.8 /// ├── root /// │ └── requires a>=0.1.0a1 /// │ ├── satisfied by a-0.1.0 @@ -1781,12 +1779,12 @@ fn package_prerelease_specified_only_prerelease_available() -> Result<()> { fn package_prerelease_specified_mixed_available() -> Result<()> { let temp_dir = assert_fs::TempDir::new()?; let cache_dir = assert_fs::TempDir::new()?; - let venv = create_venv(&temp_dir, &cache_dir, "3.7"); + let venv = create_venv(&temp_dir, &cache_dir, "3.8"); // In addition to the standard filters, swap out package names for more realistic messages let mut filters = INSTA_FILTERS.to_vec(); - filters.push((r"a-c97845e2", "albatross")); - filters.push((r"-c97845e2", "")); + filters.push((r"a-794fce4d", "albatross")); + filters.push((r"-794fce4d", "")); insta::with_settings!({ filters => filters @@ -1794,7 +1792,7 @@ fn package_prerelease_specified_mixed_available() -> Result<()> { assert_cmd_snapshot!(Command::new(get_cargo_bin(BIN_NAME)) .arg("pip") .arg("install") - .arg("a-c97845e2>=0.1.0a1") + .arg("a-794fce4d>=0.1.0a1") .arg("--extra-index-url") .arg("https://test.pypi.org/simple") .arg("--cache-dir") @@ -1816,7 +1814,7 @@ fn package_prerelease_specified_mixed_available() -> Result<()> { // Since the user provided a prerelease specifier, the latest prerelease version // should be selected. - assert_installed(&venv, "a_c97845e2", "1.0.0a1", &temp_dir); + assert_installed(&venv, "a_794fce4d", "1.0.0a1", &temp_dir); Ok(()) } @@ -1827,9 +1825,9 @@ fn package_prerelease_specified_mixed_available() -> Result<()> { /// labels. /// /// ```text -/// e290bf29 +/// 256d4e16 /// ├── environment -/// │ └── python3.7 +/// │ └── python3.8 /// ├── root /// │ └── requires a>=1.0.0a1 /// │ ├── satisfied by a-1.0.0a1 @@ -1844,12 +1842,12 @@ fn package_prerelease_specified_mixed_available() -> Result<()> { fn package_multiple_prereleases_kinds() -> Result<()> { let temp_dir = assert_fs::TempDir::new()?; let cache_dir = assert_fs::TempDir::new()?; - let venv = create_venv(&temp_dir, &cache_dir, "3.7"); + let venv = create_venv(&temp_dir, &cache_dir, "3.8"); // In addition to the standard filters, swap out package names for more realistic messages let mut filters = INSTA_FILTERS.to_vec(); - filters.push((r"a-e290bf29", "albatross")); - filters.push((r"-e290bf29", "")); + filters.push((r"a-256d4e16", "albatross")); + filters.push((r"-256d4e16", "")); insta::with_settings!({ filters => filters @@ -1857,7 +1855,7 @@ fn package_multiple_prereleases_kinds() -> Result<()> { assert_cmd_snapshot!(Command::new(get_cargo_bin(BIN_NAME)) .arg("pip") .arg("install") - .arg("a-e290bf29>=1.0.0a1") + .arg("a-256d4e16>=1.0.0a1") .arg("--extra-index-url") .arg("https://test.pypi.org/simple") .arg("--cache-dir") @@ -1878,7 +1876,7 @@ fn package_multiple_prereleases_kinds() -> Result<()> { }); // Release candidates should be the highest precedence prerelease kind. - assert_installed(&venv, "a_e290bf29", "1.0.0rc1", &temp_dir); + assert_installed(&venv, "a_256d4e16", "1.0.0rc1", &temp_dir); Ok(()) } @@ -1888,9 +1886,9 @@ fn package_multiple_prereleases_kinds() -> Result<()> { /// The user requires `a` which has multiple alphas available. /// /// ```text -/// f5948c28 +/// ac82d3fb /// ├── environment -/// │ └── python3.7 +/// │ └── python3.8 /// ├── root /// │ └── requires a>=1.0.0a1 /// │ ├── satisfied by a-1.0.0a1 @@ -1905,12 +1903,12 @@ fn package_multiple_prereleases_kinds() -> Result<()> { fn package_multiple_prereleases_numbers() -> Result<()> { let temp_dir = assert_fs::TempDir::new()?; let cache_dir = assert_fs::TempDir::new()?; - let venv = create_venv(&temp_dir, &cache_dir, "3.7"); + let venv = create_venv(&temp_dir, &cache_dir, "3.8"); // In addition to the standard filters, swap out package names for more realistic messages let mut filters = INSTA_FILTERS.to_vec(); - filters.push((r"a-f5948c28", "albatross")); - filters.push((r"-f5948c28", "")); + filters.push((r"a-ac82d3fb", "albatross")); + filters.push((r"-ac82d3fb", "")); insta::with_settings!({ filters => filters @@ -1918,7 +1916,7 @@ fn package_multiple_prereleases_numbers() -> Result<()> { assert_cmd_snapshot!(Command::new(get_cargo_bin(BIN_NAME)) .arg("pip") .arg("install") - .arg("a-f5948c28>=1.0.0a1") + .arg("a-ac82d3fb>=1.0.0a1") .arg("--extra-index-url") .arg("https://test.pypi.org/simple") .arg("--cache-dir") @@ -1939,7 +1937,7 @@ fn package_multiple_prereleases_numbers() -> Result<()> { }); // The latest alpha version should be selected. - assert_installed(&venv, "a_f5948c28", "1.0.0a3", &temp_dir); + assert_installed(&venv, "a_ac82d3fb", "1.0.0a3", &temp_dir); Ok(()) } @@ -1950,9 +1948,9 @@ fn package_multiple_prereleases_numbers() -> Result<()> { /// prerelease versions available. /// /// ```text -/// 44ebef16 +/// 9da8532e /// ├── environment -/// │ └── python3.7 +/// │ └── python3.8 /// ├── root /// │ └── requires a /// │ └── satisfied by a-0.1.0 @@ -1967,13 +1965,13 @@ fn package_multiple_prereleases_numbers() -> Result<()> { fn transitive_package_only_prereleases() -> Result<()> { let temp_dir = assert_fs::TempDir::new()?; let cache_dir = assert_fs::TempDir::new()?; - let venv = create_venv(&temp_dir, &cache_dir, "3.7"); + let venv = create_venv(&temp_dir, &cache_dir, "3.8"); // In addition to the standard filters, swap out package names for more realistic messages let mut filters = INSTA_FILTERS.to_vec(); - filters.push((r"a-44ebef16", "albatross")); - filters.push((r"b-44ebef16", "bluebird")); - filters.push((r"-44ebef16", "")); + filters.push((r"a-9da8532e", "albatross")); + filters.push((r"b-9da8532e", "bluebird")); + filters.push((r"-9da8532e", "")); insta::with_settings!({ filters => filters @@ -1981,7 +1979,7 @@ fn transitive_package_only_prereleases() -> Result<()> { assert_cmd_snapshot!(Command::new(get_cargo_bin(BIN_NAME)) .arg("pip") .arg("install") - .arg("a-44ebef16") + .arg("a-9da8532e") .arg("--extra-index-url") .arg("https://test.pypi.org/simple") .arg("--cache-dir") @@ -2004,8 +2002,8 @@ fn transitive_package_only_prereleases() -> Result<()> { // Since there are only prerelease versions of `b` available, it should be selected // even though the user did not opt-in to prereleases. - assert_installed(&venv, "a_44ebef16", "0.1.0", &temp_dir); - assert_installed(&venv, "b_44ebef16", "1.0.0a1", &temp_dir); + assert_installed(&venv, "a_9da8532e", "0.1.0", &temp_dir); + assert_installed(&venv, "b_9da8532e", "1.0.0a1", &temp_dir); Ok(()) } @@ -2016,9 +2014,9 @@ fn transitive_package_only_prereleases() -> Result<()> { /// matches prerelease versions but they did not include a prerelease specifier. /// /// ```text -/// 27759187 +/// c41a54fc /// ├── environment -/// │ └── python3.7 +/// │ └── python3.8 /// ├── root /// │ └── requires a /// │ └── satisfied by a-0.1.0 @@ -2034,13 +2032,13 @@ fn transitive_package_only_prereleases() -> Result<()> { fn transitive_package_only_prereleases_in_range() -> Result<()> { let temp_dir = assert_fs::TempDir::new()?; let cache_dir = assert_fs::TempDir::new()?; - let venv = create_venv(&temp_dir, &cache_dir, "3.7"); + let venv = create_venv(&temp_dir, &cache_dir, "3.8"); // In addition to the standard filters, swap out package names for more realistic messages let mut filters = INSTA_FILTERS.to_vec(); - filters.push((r"a-27759187", "albatross")); - filters.push((r"b-27759187", "bluebird")); - filters.push((r"-27759187", "")); + filters.push((r"a-c41a54fc", "albatross")); + filters.push((r"b-c41a54fc", "bluebird")); + filters.push((r"-c41a54fc", "")); insta::with_settings!({ filters => filters @@ -2048,7 +2046,7 @@ fn transitive_package_only_prereleases_in_range() -> Result<()> { assert_cmd_snapshot!(Command::new(get_cargo_bin(BIN_NAME)) .arg("pip") .arg("install") - .arg("a-27759187") + .arg("a-c41a54fc") .arg("--extra-index-url") .arg("https://test.pypi.org/simple") .arg("--cache-dir") @@ -2072,7 +2070,7 @@ fn transitive_package_only_prereleases_in_range() -> Result<()> { // Since there are stable versions of `b` available, the prerelease version should // not be selected without explicit opt-in. The available version is excluded by // the range requested by the user. - assert_not_installed(&venv, "a_27759187", &temp_dir); + assert_not_installed(&venv, "a_c41a54fc", &temp_dir); Ok(()) } @@ -2084,9 +2082,9 @@ fn transitive_package_only_prereleases_in_range() -> Result<()> { /// explicitly. /// /// ```text -/// 26efb6c5 +/// 96f98f65 /// ├── environment -/// │ └── python3.7 +/// │ └── python3.8 /// ├── root /// │ ├── requires a /// │ │ └── satisfied by a-0.1.0 @@ -2104,13 +2102,13 @@ fn transitive_package_only_prereleases_in_range() -> Result<()> { fn transitive_package_only_prereleases_in_range_opt_in() -> Result<()> { let temp_dir = assert_fs::TempDir::new()?; let cache_dir = assert_fs::TempDir::new()?; - let venv = create_venv(&temp_dir, &cache_dir, "3.7"); + let venv = create_venv(&temp_dir, &cache_dir, "3.8"); // In addition to the standard filters, swap out package names for more realistic messages let mut filters = INSTA_FILTERS.to_vec(); - filters.push((r"a-26efb6c5", "albatross")); - filters.push((r"b-26efb6c5", "bluebird")); - filters.push((r"-26efb6c5", "")); + filters.push((r"a-96f98f65", "albatross")); + filters.push((r"b-96f98f65", "bluebird")); + filters.push((r"-96f98f65", "")); insta::with_settings!({ filters => filters @@ -2118,8 +2116,8 @@ fn transitive_package_only_prereleases_in_range_opt_in() -> Result<()> { assert_cmd_snapshot!(Command::new(get_cargo_bin(BIN_NAME)) .arg("pip") .arg("install") - .arg("a-26efb6c5") - .arg("b-26efb6c5>0.0.0a1") + .arg("a-96f98f65") + .arg("b-96f98f65>0.0.0a1") .arg("--extra-index-url") .arg("https://test.pypi.org/simple") .arg("--cache-dir") @@ -2142,8 +2140,8 @@ fn transitive_package_only_prereleases_in_range_opt_in() -> Result<()> { // Since the user included a dependency on `b` with a prerelease specifier, a // prerelease version can be selected. - assert_installed(&venv, "a_26efb6c5", "0.1.0", &temp_dir); - assert_installed(&venv, "b_26efb6c5", "1.0.0a1", &temp_dir); + assert_installed(&venv, "a_96f98f65", "0.1.0", &temp_dir); + assert_installed(&venv, "b_96f98f65", "1.0.0a1", &temp_dir); Ok(()) } @@ -2154,9 +2152,9 @@ fn transitive_package_only_prereleases_in_range_opt_in() -> Result<()> { /// only be satisfied by a prerelease /// /// ```text -/// f8aeea37 +/// 3d5eb91f /// ├── environment -/// │ └── python3.7 +/// │ └── python3.8 /// ├── root /// │ ├── requires a /// │ │ └── satisfied by a-1.0.0 @@ -2178,14 +2176,14 @@ fn transitive_package_only_prereleases_in_range_opt_in() -> Result<()> { fn transitive_prerelease_and_stable_dependency() -> Result<()> { let temp_dir = assert_fs::TempDir::new()?; let cache_dir = assert_fs::TempDir::new()?; - let venv = create_venv(&temp_dir, &cache_dir, "3.7"); + let venv = create_venv(&temp_dir, &cache_dir, "3.8"); // In addition to the standard filters, swap out package names for more realistic messages let mut filters = INSTA_FILTERS.to_vec(); - filters.push((r"a-f8aeea37", "albatross")); - filters.push((r"b-f8aeea37", "bluebird")); - filters.push((r"c-f8aeea37", "crow")); - filters.push((r"-f8aeea37", "")); + filters.push((r"a-3d5eb91f", "albatross")); + filters.push((r"b-3d5eb91f", "bluebird")); + filters.push((r"c-3d5eb91f", "crow")); + filters.push((r"-3d5eb91f", "")); insta::with_settings!({ filters => filters @@ -2193,8 +2191,8 @@ fn transitive_prerelease_and_stable_dependency() -> Result<()> { assert_cmd_snapshot!(Command::new(get_cargo_bin(BIN_NAME)) .arg("pip") .arg("install") - .arg("a-f8aeea37") - .arg("b-f8aeea37") + .arg("a-3d5eb91f") + .arg("b-3d5eb91f") .arg("--extra-index-url") .arg("https://test.pypi.org/simple") .arg("--cache-dir") @@ -2216,8 +2214,8 @@ fn transitive_prerelease_and_stable_dependency() -> Result<()> { }); // Since the user did not explicitly opt-in to a prerelease, it cannot be selected. - assert_not_installed(&venv, "a_f8aeea37", &temp_dir); - assert_not_installed(&venv, "b_f8aeea37", &temp_dir); + assert_not_installed(&venv, "a_3d5eb91f", &temp_dir); + assert_not_installed(&venv, "b_3d5eb91f", &temp_dir); Ok(()) } @@ -2229,9 +2227,9 @@ fn transitive_prerelease_and_stable_dependency() -> Result<()> { /// the transitive dependency. /// /// ```text -/// 184fc65f +/// 6192ec57 /// ├── environment -/// │ └── python3.7 +/// │ └── python3.8 /// ├── root /// │ ├── requires a /// │ │ └── satisfied by a-1.0.0 @@ -2256,14 +2254,14 @@ fn transitive_prerelease_and_stable_dependency() -> Result<()> { fn transitive_prerelease_and_stable_dependency_opt_in() -> Result<()> { let temp_dir = assert_fs::TempDir::new()?; let cache_dir = assert_fs::TempDir::new()?; - let venv = create_venv(&temp_dir, &cache_dir, "3.7"); + let venv = create_venv(&temp_dir, &cache_dir, "3.8"); // In addition to the standard filters, swap out package names for more realistic messages let mut filters = INSTA_FILTERS.to_vec(); - filters.push((r"a-184fc65f", "albatross")); - filters.push((r"b-184fc65f", "bluebird")); - filters.push((r"c-184fc65f", "crow")); - filters.push((r"-184fc65f", "")); + filters.push((r"a-6192ec57", "albatross")); + filters.push((r"b-6192ec57", "bluebird")); + filters.push((r"c-6192ec57", "crow")); + filters.push((r"-6192ec57", "")); insta::with_settings!({ filters => filters @@ -2271,9 +2269,9 @@ fn transitive_prerelease_and_stable_dependency_opt_in() -> Result<()> { assert_cmd_snapshot!(Command::new(get_cargo_bin(BIN_NAME)) .arg("pip") .arg("install") - .arg("a-184fc65f") - .arg("b-184fc65f") - .arg("c-184fc65f>=0.0.0a1") + .arg("a-6192ec57") + .arg("b-6192ec57") + .arg("c-6192ec57>=0.0.0a1") .arg("--extra-index-url") .arg("https://test.pypi.org/simple") .arg("--cache-dir") @@ -2296,9 +2294,9 @@ fn transitive_prerelease_and_stable_dependency_opt_in() -> Result<()> { }); // Since the user explicitly opted-in to a prerelease for `c`, it can be installed. - assert_installed(&venv, "a_184fc65f", "1.0.0", &temp_dir); - assert_installed(&venv, "b_184fc65f", "1.0.0", &temp_dir); - assert_installed(&venv, "c_184fc65f", "2.0.0b1", &temp_dir); + assert_installed(&venv, "a_6192ec57", "1.0.0", &temp_dir); + assert_installed(&venv, "b_6192ec57", "1.0.0", &temp_dir); + assert_installed(&venv, "c_6192ec57", "2.0.0b1", &temp_dir); Ok(()) } @@ -2309,9 +2307,9 @@ fn transitive_prerelease_and_stable_dependency_opt_in() -> Result<()> { /// only be satisfied by a prerelease. There are many prerelease versions. /// /// ```text -/// 7017673e +/// bcd0f988 /// ├── environment -/// │ └── python3.7 +/// │ └── python3.8 /// ├── root /// │ ├── requires a /// │ │ └── satisfied by a-1.0.0 @@ -2358,14 +2356,14 @@ fn transitive_prerelease_and_stable_dependency_opt_in() -> Result<()> { fn transitive_prerelease_and_stable_dependency_many_versions() -> Result<()> { let temp_dir = assert_fs::TempDir::new()?; let cache_dir = assert_fs::TempDir::new()?; - let venv = create_venv(&temp_dir, &cache_dir, "3.7"); + let venv = create_venv(&temp_dir, &cache_dir, "3.8"); // In addition to the standard filters, swap out package names for more realistic messages let mut filters = INSTA_FILTERS.to_vec(); - filters.push((r"a-7017673e", "albatross")); - filters.push((r"b-7017673e", "bluebird")); - filters.push((r"c-7017673e", "crow")); - filters.push((r"-7017673e", "")); + filters.push((r"a-bcd0f988", "albatross")); + filters.push((r"b-bcd0f988", "bluebird")); + filters.push((r"c-bcd0f988", "crow")); + filters.push((r"-bcd0f988", "")); insta::with_settings!({ filters => filters @@ -2373,8 +2371,8 @@ fn transitive_prerelease_and_stable_dependency_many_versions() -> Result<()> { assert_cmd_snapshot!(Command::new(get_cargo_bin(BIN_NAME)) .arg("pip") .arg("install") - .arg("a-7017673e") - .arg("b-7017673e") + .arg("a-bcd0f988") + .arg("b-bcd0f988") .arg("--extra-index-url") .arg("https://test.pypi.org/simple") .arg("--cache-dir") @@ -2398,8 +2396,8 @@ fn transitive_prerelease_and_stable_dependency_many_versions() -> Result<()> { }); // Since the user did not explicitly opt-in to a prerelease, it cannot be selected. - assert_not_installed(&venv, "a_7017673e", &temp_dir); - assert_not_installed(&venv, "b_7017673e", &temp_dir); + assert_not_installed(&venv, "a_bcd0f988", &temp_dir); + assert_not_installed(&venv, "b_bcd0f988", &temp_dir); Ok(()) } @@ -2411,9 +2409,9 @@ fn transitive_prerelease_and_stable_dependency_many_versions() -> Result<()> { /// are excluded. /// /// ```text -/// aaee5052 +/// 5cee052e /// ├── environment -/// │ └── python3.7 +/// │ └── python3.8 /// ├── root /// │ ├── requires a /// │ │ └── satisfied by a-1.0.0 @@ -2452,14 +2450,14 @@ fn transitive_prerelease_and_stable_dependency_many_versions() -> Result<()> { fn transitive_prerelease_and_stable_dependency_many_versions_holes() -> Result<()> { let temp_dir = assert_fs::TempDir::new()?; let cache_dir = assert_fs::TempDir::new()?; - let venv = create_venv(&temp_dir, &cache_dir, "3.7"); + let venv = create_venv(&temp_dir, &cache_dir, "3.8"); // In addition to the standard filters, swap out package names for more realistic messages let mut filters = INSTA_FILTERS.to_vec(); - filters.push((r"a-aaee5052", "albatross")); - filters.push((r"b-aaee5052", "bluebird")); - filters.push((r"c-aaee5052", "crow")); - filters.push((r"-aaee5052", "")); + filters.push((r"a-5cee052e", "albatross")); + filters.push((r"b-5cee052e", "bluebird")); + filters.push((r"c-5cee052e", "crow")); + filters.push((r"-5cee052e", "")); insta::with_settings!({ filters => filters @@ -2467,8 +2465,8 @@ fn transitive_prerelease_and_stable_dependency_many_versions_holes() -> Result<( assert_cmd_snapshot!(Command::new(get_cargo_bin(BIN_NAME)) .arg("pip") .arg("install") - .arg("a-aaee5052") - .arg("b-aaee5052") + .arg("a-5cee052e") + .arg("b-5cee052e") .arg("--extra-index-url") .arg("https://test.pypi.org/simple") .arg("--cache-dir") @@ -2502,8 +2500,8 @@ fn transitive_prerelease_and_stable_dependency_many_versions_holes() -> Result<( }); // Since the user did not explicitly opt-in to a prerelease, it cannot be selected. - assert_not_installed(&venv, "a_aaee5052", &temp_dir); - assert_not_installed(&venv, "b_aaee5052", &temp_dir); + assert_not_installed(&venv, "a_5cee052e", &temp_dir); + assert_not_installed(&venv, "b_5cee052e", &temp_dir); Ok(()) } @@ -2513,9 +2511,9 @@ fn transitive_prerelease_and_stable_dependency_many_versions_holes() -> Result<( /// The user requires a package which requires a Python version that does not exist /// /// ```text -/// 0825b69c +/// d004e577 /// ├── environment -/// │ └── python3.7 +/// │ └── python3.8 /// ├── root /// │ └── requires a==1.0.0 /// │ └── satisfied by a-1.0.0 @@ -2527,12 +2525,12 @@ fn transitive_prerelease_and_stable_dependency_many_versions_holes() -> Result<( fn requires_python_version_does_not_exist() -> Result<()> { let temp_dir = assert_fs::TempDir::new()?; let cache_dir = assert_fs::TempDir::new()?; - let venv = create_venv(&temp_dir, &cache_dir, "3.7"); + let venv = create_venv(&temp_dir, &cache_dir, "3.8"); // In addition to the standard filters, swap out package names for more realistic messages let mut filters = INSTA_FILTERS.to_vec(); - filters.push((r"a-0825b69c", "albatross")); - filters.push((r"-0825b69c", "")); + filters.push((r"a-d004e577", "albatross")); + filters.push((r"-d004e577", "")); insta::with_settings!({ filters => filters @@ -2540,7 +2538,7 @@ fn requires_python_version_does_not_exist() -> Result<()> { assert_cmd_snapshot!(Command::new(get_cargo_bin(BIN_NAME)) .arg("pip") .arg("install") - .arg("a-0825b69c==1.0.0") + .arg("a-d004e577==1.0.0") .arg("--extra-index-url") .arg("https://test.pypi.org/simple") .arg("--cache-dir") @@ -2554,12 +2552,12 @@ fn requires_python_version_does_not_exist() -> Result<()> { ----- stderr ----- × No solution found when resolving dependencies: - ╰─▶ Because the current Python version (3.7.17) does not satisfy Python>=4.0 and albatross==1.0.0 depends on Python>=4.0, we can conclude that albatross==1.0.0 cannot be used. + ╰─▶ Because the current Python version (3.8.18) does not satisfy Python>=4.0 and albatross==1.0.0 depends on Python>=4.0, we can conclude that albatross==1.0.0 cannot be used. And because you require albatross==1.0.0, we can conclude that the requirements are unsatisfiable. "###); }); - assert_not_installed(&venv, "a_0825b69c", &temp_dir); + assert_not_installed(&venv, "a_d004e577", &temp_dir); Ok(()) } @@ -2570,7 +2568,7 @@ fn requires_python_version_does_not_exist() -> Result<()> { /// current version /// /// ```text -/// f9296b84 +/// 5e520203 /// ├── environment /// │ └── python3.9 /// ├── root @@ -2588,8 +2586,8 @@ fn requires_python_version_less_than_current() -> Result<()> { // In addition to the standard filters, swap out package names for more realistic messages let mut filters = INSTA_FILTERS.to_vec(); - filters.push((r"a-f9296b84", "albatross")); - filters.push((r"-f9296b84", "")); + filters.push((r"a-5e520203", "albatross")); + filters.push((r"-5e520203", "")); insta::with_settings!({ filters => filters @@ -2597,7 +2595,7 @@ fn requires_python_version_less_than_current() -> Result<()> { assert_cmd_snapshot!(Command::new(get_cargo_bin(BIN_NAME)) .arg("pip") .arg("install") - .arg("a-f9296b84==1.0.0") + .arg("a-5e520203==1.0.0") .arg("--extra-index-url") .arg("https://test.pypi.org/simple") .arg("--cache-dir") @@ -2616,7 +2614,7 @@ fn requires_python_version_less_than_current() -> Result<()> { "###); }); - assert_not_installed(&venv, "a_f9296b84", &temp_dir); + assert_not_installed(&venv, "a_5e520203", &temp_dir); Ok(()) } @@ -2627,7 +2625,7 @@ fn requires_python_version_less_than_current() -> Result<()> { /// current version /// /// ```text -/// a11d5394 +/// 62394505 /// ├── environment /// │ └── python3.9 /// ├── root @@ -2645,8 +2643,8 @@ fn requires_python_version_greater_than_current() -> Result<()> { // In addition to the standard filters, swap out package names for more realistic messages let mut filters = INSTA_FILTERS.to_vec(); - filters.push((r"a-a11d5394", "albatross")); - filters.push((r"-a11d5394", "")); + filters.push((r"a-62394505", "albatross")); + filters.push((r"-62394505", "")); insta::with_settings!({ filters => filters @@ -2654,7 +2652,7 @@ fn requires_python_version_greater_than_current() -> Result<()> { assert_cmd_snapshot!(Command::new(get_cargo_bin(BIN_NAME)) .arg("pip") .arg("install") - .arg("a-a11d5394==1.0.0") + .arg("a-62394505==1.0.0") .arg("--extra-index-url") .arg("https://test.pypi.org/simple") .arg("--cache-dir") @@ -2673,7 +2671,64 @@ fn requires_python_version_greater_than_current() -> Result<()> { "###); }); - assert_not_installed(&venv, "a_a11d5394", &temp_dir); + assert_not_installed(&venv, "a_62394505", &temp_dir); + + Ok(()) +} + +/// requires-python-version-greater-than-current-patch +/// +/// The user requires a package which requires a Python version with a patch version +/// greater than the current patch version +/// +/// ```text +/// 7b98f5af +/// ├── environment +/// │ └── python3.8.12 +/// ├── root +/// │ └── requires a==1.0.0 +/// │ └── satisfied by a-1.0.0 +/// └── a +/// └── a-1.0.0 +/// └── requires python>=3.8.14 (incompatible with environment) +/// ``` +#[test] +fn requires_python_version_greater_than_current_patch() -> Result<()> { + let temp_dir = assert_fs::TempDir::new()?; + let cache_dir = assert_fs::TempDir::new()?; + let venv = create_venv(&temp_dir, &cache_dir, "3.8.12"); + + // In addition to the standard filters, swap out package names for more realistic messages + let mut filters = INSTA_FILTERS.to_vec(); + filters.push((r"a-7b98f5af", "albatross")); + filters.push((r"-7b98f5af", "")); + + insta::with_settings!({ + filters => filters + }, { + assert_cmd_snapshot!(Command::new(get_cargo_bin(BIN_NAME)) + .arg("pip") + .arg("install") + .arg("a-7b98f5af==1.0.0") + .arg("--extra-index-url") + .arg("https://test.pypi.org/simple") + .arg("--cache-dir") + .arg(cache_dir.path()) + .env("VIRTUAL_ENV", venv.as_os_str()) + .env("PUFFIN_NO_WRAP", "1") + .current_dir(&temp_dir), @r###" + success: false + exit_code: 1 + ----- stdout ----- + + ----- stderr ----- + × No solution found when resolving dependencies: + ╰─▶ Because the current Python version (3.8.12) does not satisfy Python>=3.8.14 and albatross==1.0.0 depends on Python>=3.8.14, we can conclude that albatross==1.0.0 cannot be used. + And because you require albatross==1.0.0, we can conclude that the requirements are unsatisfiable. + "###); + }); + + assert_not_installed(&venv, "a_7b98f5af", &temp_dir); Ok(()) } @@ -2684,7 +2739,7 @@ fn requires_python_version_greater_than_current() -> Result<()> { /// version greater than the current version /// /// ```text -/// 02dc550c +/// fd1f719c /// ├── environment /// │ └── python3.9 /// ├── root @@ -2724,8 +2779,8 @@ fn requires_python_version_greater_than_current_many() -> Result<()> { // In addition to the standard filters, swap out package names for more realistic messages let mut filters = INSTA_FILTERS.to_vec(); - filters.push((r"a-02dc550c", "albatross")); - filters.push((r"-02dc550c", "")); + filters.push((r"a-fd1f719c", "albatross")); + filters.push((r"-fd1f719c", "")); insta::with_settings!({ filters => filters @@ -2733,7 +2788,7 @@ fn requires_python_version_greater_than_current_many() -> Result<()> { assert_cmd_snapshot!(Command::new(get_cargo_bin(BIN_NAME)) .arg("pip") .arg("install") - .arg("a-02dc550c==1.0.0") + .arg("a-fd1f719c==1.0.0") .arg("--extra-index-url") .arg("https://test.pypi.org/simple") .arg("--cache-dir") @@ -2751,7 +2806,7 @@ fn requires_python_version_greater_than_current_many() -> Result<()> { "###); }); - assert_not_installed(&venv, "a_02dc550c", &temp_dir); + assert_not_installed(&venv, "a_fd1f719c", &temp_dir); Ok(()) } @@ -2762,7 +2817,7 @@ fn requires_python_version_greater_than_current_many() -> Result<()> { /// greater than the current version, but an older version is compatible. /// /// ```text -/// ef060cef +/// b2677f9a /// ├── environment /// │ └── python3.9 /// ├── root @@ -2788,8 +2843,8 @@ fn requires_python_version_greater_than_current_backtrack() -> Result<()> { // In addition to the standard filters, swap out package names for more realistic messages let mut filters = INSTA_FILTERS.to_vec(); - filters.push((r"a-ef060cef", "albatross")); - filters.push((r"-ef060cef", "")); + filters.push((r"a-b2677f9a", "albatross")); + filters.push((r"-b2677f9a", "")); insta::with_settings!({ filters => filters @@ -2797,7 +2852,7 @@ fn requires_python_version_greater_than_current_backtrack() -> Result<()> { assert_cmd_snapshot!(Command::new(get_cargo_bin(BIN_NAME)) .arg("pip") .arg("install") - .arg("a-ef060cef") + .arg("a-b2677f9a") .arg("--extra-index-url") .arg("https://test.pypi.org/simple") .arg("--cache-dir") @@ -2817,7 +2872,7 @@ fn requires_python_version_greater_than_current_backtrack() -> Result<()> { "###); }); - assert_installed(&venv, "a_ef060cef", "1.0.0", &temp_dir); + assert_installed(&venv, "a_b2677f9a", "1.0.0", &temp_dir); Ok(()) } @@ -2828,7 +2883,7 @@ fn requires_python_version_greater_than_current_backtrack() -> Result<()> { /// greater than the current version, but an excluded older version is compatible. /// /// ```text -/// 1bde0c18 +/// 34ee1c3e /// ├── environment /// │ └── python3.9 /// ├── root @@ -2853,8 +2908,8 @@ fn requires_python_version_greater_than_current_excluded() -> Result<()> { // In addition to the standard filters, swap out package names for more realistic messages let mut filters = INSTA_FILTERS.to_vec(); - filters.push((r"a-1bde0c18", "albatross")); - filters.push((r"-1bde0c18", "")); + filters.push((r"a-34ee1c3e", "albatross")); + filters.push((r"-34ee1c3e", "")); insta::with_settings!({ filters => filters @@ -2862,7 +2917,7 @@ fn requires_python_version_greater_than_current_excluded() -> Result<()> { assert_cmd_snapshot!(Command::new(get_cargo_bin(BIN_NAME)) .arg("pip") .arg("install") - .arg("a-1bde0c18>=2.0.0") + .arg("a-34ee1c3e>=2.0.0") .arg("--extra-index-url") .arg("https://test.pypi.org/simple") .arg("--cache-dir") @@ -2897,7 +2952,7 @@ fn requires_python_version_greater_than_current_excluded() -> Result<()> { "###); }); - assert_not_installed(&venv, "a_1bde0c18", &temp_dir); + assert_not_installed(&venv, "a_34ee1c3e", &temp_dir); Ok(()) } @@ -2907,9 +2962,9 @@ fn requires_python_version_greater_than_current_excluded() -> Result<()> { /// A wheel for a specific platform is available alongside the default. /// /// ```text -/// 74e4a459 +/// ce63fb65 /// ├── environment -/// │ └── python3.7 +/// │ └── python3.8 /// ├── root /// │ └── requires a /// │ └── satisfied by a-1.0.0 @@ -2920,12 +2975,12 @@ fn requires_python_version_greater_than_current_excluded() -> Result<()> { fn specific_tag_and_default() -> Result<()> { let temp_dir = assert_fs::TempDir::new()?; let cache_dir = assert_fs::TempDir::new()?; - let venv = create_venv(&temp_dir, &cache_dir, "3.7"); + let venv = create_venv(&temp_dir, &cache_dir, "3.8"); // In addition to the standard filters, swap out package names for more realistic messages let mut filters = INSTA_FILTERS.to_vec(); - filters.push((r"a-74e4a459", "albatross")); - filters.push((r"-74e4a459", "")); + filters.push((r"a-ce63fb65", "albatross")); + filters.push((r"-ce63fb65", "")); insta::with_settings!({ filters => filters @@ -2933,7 +2988,7 @@ fn specific_tag_and_default() -> Result<()> { assert_cmd_snapshot!(Command::new(get_cargo_bin(BIN_NAME)) .arg("pip") .arg("install") - .arg("a-74e4a459") + .arg("a-ce63fb65") .arg("--extra-index-url") .arg("https://test.pypi.org/simple") .arg("--cache-dir") @@ -2961,9 +3016,9 @@ fn specific_tag_and_default() -> Result<()> { /// No source distributions are available, only wheels. /// /// ```text -/// 4f019491 +/// 08df4319 /// ├── environment -/// │ └── python3.7 +/// │ └── python3.8 /// ├── root /// │ └── requires a /// │ └── satisfied by a-1.0.0 @@ -2974,12 +3029,12 @@ fn specific_tag_and_default() -> Result<()> { fn only_wheels() -> Result<()> { let temp_dir = assert_fs::TempDir::new()?; let cache_dir = assert_fs::TempDir::new()?; - let venv = create_venv(&temp_dir, &cache_dir, "3.7"); + let venv = create_venv(&temp_dir, &cache_dir, "3.8"); // In addition to the standard filters, swap out package names for more realistic messages let mut filters = INSTA_FILTERS.to_vec(); - filters.push((r"a-4f019491", "albatross")); - filters.push((r"-4f019491", "")); + filters.push((r"a-08df4319", "albatross")); + filters.push((r"-08df4319", "")); insta::with_settings!({ filters => filters @@ -2987,7 +3042,7 @@ fn only_wheels() -> Result<()> { assert_cmd_snapshot!(Command::new(get_cargo_bin(BIN_NAME)) .arg("pip") .arg("install") - .arg("a-4f019491") + .arg("a-08df4319") .arg("--extra-index-url") .arg("https://test.pypi.org/simple") .arg("--cache-dir") @@ -3015,9 +3070,9 @@ fn only_wheels() -> Result<()> { /// No wheels are available, only source distributions. /// /// ```text -/// 614d801c +/// 0a9090ba /// ├── environment -/// │ └── python3.7 +/// │ └── python3.8 /// ├── root /// │ └── requires a /// │ └── satisfied by a-1.0.0 @@ -3028,12 +3083,12 @@ fn only_wheels() -> Result<()> { fn no_wheels() -> Result<()> { let temp_dir = assert_fs::TempDir::new()?; let cache_dir = assert_fs::TempDir::new()?; - let venv = create_venv(&temp_dir, &cache_dir, "3.7"); + let venv = create_venv(&temp_dir, &cache_dir, "3.8"); // In addition to the standard filters, swap out package names for more realistic messages let mut filters = INSTA_FILTERS.to_vec(); - filters.push((r"a-614d801c", "albatross")); - filters.push((r"-614d801c", "")); + filters.push((r"a-0a9090ba", "albatross")); + filters.push((r"-0a9090ba", "")); insta::with_settings!({ filters => filters @@ -3041,7 +3096,7 @@ fn no_wheels() -> Result<()> { assert_cmd_snapshot!(Command::new(get_cargo_bin(BIN_NAME)) .arg("pip") .arg("install") - .arg("a-614d801c") + .arg("a-0a9090ba") .arg("--extra-index-url") .arg("https://test.pypi.org/simple") .arg("--cache-dir") @@ -3069,9 +3124,9 @@ fn no_wheels() -> Result<()> { /// No wheels with valid tags are available, just source distributions. /// /// ```text -/// 737bbfd4 +/// b595b358 /// ├── environment -/// │ └── python3.7 +/// │ └── python3.8 /// ├── root /// │ └── requires a /// │ └── satisfied by a-1.0.0 @@ -3082,12 +3137,12 @@ fn no_wheels() -> Result<()> { fn no_wheels_with_matching_platform() -> Result<()> { let temp_dir = assert_fs::TempDir::new()?; let cache_dir = assert_fs::TempDir::new()?; - let venv = create_venv(&temp_dir, &cache_dir, "3.7"); + let venv = create_venv(&temp_dir, &cache_dir, "3.8"); // In addition to the standard filters, swap out package names for more realistic messages let mut filters = INSTA_FILTERS.to_vec(); - filters.push((r"a-737bbfd4", "albatross")); - filters.push((r"-737bbfd4", "")); + filters.push((r"a-b595b358", "albatross")); + filters.push((r"-b595b358", "")); insta::with_settings!({ filters => filters @@ -3095,7 +3150,7 @@ fn no_wheels_with_matching_platform() -> Result<()> { assert_cmd_snapshot!(Command::new(get_cargo_bin(BIN_NAME)) .arg("pip") .arg("install") - .arg("a-737bbfd4") + .arg("a-b595b358") .arg("--extra-index-url") .arg("https://test.pypi.org/simple") .arg("--cache-dir") diff --git a/crates/puffin/tests/venv.rs b/crates/puffin/tests/venv.rs index bc02937af..d0ae43996 100644 --- a/crates/puffin/tests/venv.rs +++ b/crates/puffin/tests/venv.rs @@ -184,7 +184,7 @@ fn create_venv_unknown_python_patch() -> Result<()> { ----- stdout ----- ----- stderr ----- - × Couldn't find `3.8.0` in PATH + × Couldn't find `python3.8.0` in PATH ╰─▶ cannot find binary path "###); }); @@ -193,3 +193,39 @@ fn create_venv_unknown_python_patch() -> Result<()> { Ok(()) } + +#[test] +fn create_venv_python_patch() -> Result<()> { + let temp_dir = assert_fs::TempDir::new()?; + let cache_dir = assert_fs::TempDir::new()?; + let venv = temp_dir.child(".venv"); + + let filter_venv = regex::escape(&venv.display().to_string()); + insta::with_settings!({ + filters => vec![ + (r"interpreter at .+", "interpreter at [PATH]"), + (&filter_venv, "/home/ferris/project/.venv"), + ] + }, { + assert_cmd_snapshot!(Command::new(get_cargo_bin(BIN_NAME)) + .arg("venv") + .arg(venv.as_os_str()) + .arg("--python") + .arg("3.12.1") + .arg("--cache-dir") + .arg(cache_dir.path()) + .current_dir(&temp_dir), @r###" + success: true + exit_code: 0 + ----- stdout ----- + + ----- stderr ----- + Using Python 3.12.1 interpreter at [PATH] + Creating virtual environment at: /home/ferris/project/.venv + "###); + }); + + venv.assert(predicates::path::is_dir()); + + Ok(()) +} diff --git a/scripts/bootstrap/fetch-version-metadata.py b/scripts/bootstrap/fetch-version-metadata.py new file mode 100755 index 000000000..0867ac14e --- /dev/null +++ b/scripts/bootstrap/fetch-version-metadata.py @@ -0,0 +1,273 @@ +#!/usr/bin/env python3.12 +""" +Fetch Python version metadata. + +Generates the bootstrap `versions.json` file. + +Installation: + + pip install requests==2.31.0 + +Usage: + + scripts/bootstrap/fetch-versions + +Acknowledgements: + + Derived from https://github.com/mitsuhiko/rye/tree/f9822267a7f00332d15be8551f89a212e7bc9017 + Originally authored by Armin Ronacher under the MIT license +""" +import argparse +import hashlib +import json +import logging +import os +import re +import sys +from itertools import chain +from pathlib import Path +from urllib.parse import unquote + +try: + import requests +except ImportError: + print("ERROR: requests is required; install with `pip install requests==2.31.0`") + sys.exit(1) + +SELF_DIR = Path(__file__).parent +RELEASE_URL = "https://api.github.com/repos/indygreg/python-build-standalone/releases" +HEADERS = { + "X-GitHub-Api-Version": "2022-11-28", +} +VERSIONS_FILE = SELF_DIR / "versions.json" +FLAVOR_PREFERENCES = [ + "shared-pgo", + "shared-noopt", + "shared-noopt", + "static-noopt", + "gnu-pgo+lto", + "gnu-lto", + "gnu-pgo", + "pgo+lto", + "lto", + "pgo", +] +HIDDEN_FLAVORS = [ + "debug", + "noopt", + "install_only", +] +SPECIAL_TRIPLES = { + "macos": "x86_64-apple-darwin", + "linux64": "x86_64-unknown-linux", + "windows-amd64": "x86_64-pc-windows", + "windows-x86": "i686-pc-windows", + "linux64-musl": "x86_64-unknown-linux", +} + +_filename_re = re.compile( + r"""(?x) + ^ + cpython-(?P\d+\.\d+\.\d+?) + (?:\+\d+)? + -(?P.*?) + (?:-[\dT]+)?\.tar\.(?:gz|zst) + $ +""" +) +_suffix_re = re.compile( + r"""(?x)^(.*?)-(%s)$""" + % ( + "|".join( + map( + re.escape, + sorted(FLAVOR_PREFERENCES + HIDDEN_FLAVORS, key=len, reverse=True), + ) + ) + ) +) + +# to match the output of the `arch` command +ARCH_MAP = {"aarch64": "arm64"} + + +def parse_filename(filename): + match = _filename_re.match(filename) + if match is None: + return + version, triple = match.groups() + if triple.endswith("-full"): + triple = triple[:-5] + match = _suffix_re.match(triple) + if match is not None: + triple, suffix = match.groups() + else: + suffix = None + return (version, triple, suffix) + + +def normalize_triple(triple): + if "-musl" in triple or "-static" in triple: + logging.debug("Skipping %r: unknown triple", triple) + return + triple = SPECIAL_TRIPLES.get(triple, triple) + pieces = triple.split("-") + try: + arch = pieces[0] + # Normalize + arch = ARCH_MAP.get(arch, arch) + platform = pieces[2] + except IndexError: + logging.debug("Skipping %r: unknown triple", triple) + return + return "%s-%s" % (arch, platform) + + +def read_sha256(session, url): + resp = session.get(url + ".sha256") + if not resp.ok: + return None + return resp.text.strip() + + +def sha256(path): + h = hashlib.sha256() + + with open(path, "rb") as file: + while True: + # Reading is buffered, so we can read smaller chunks. + chunk = file.read(h.block_size) + if not chunk: + break + h.update(chunk) + + return h.hexdigest() + + +def _sort_key(info): + triple, flavor, url = info + try: + pref = FLAVOR_PREFERENCES.index(flavor) + except ValueError: + pref = len(FLAVOR_PREFERENCES) + 1 + return pref + + +def get_session() -> requests.Session: + session = requests.Session() + session.headers = HEADERS.copy() + + token = os.environ.get("GITHUB_TOKEN") + if token: + session.headers["Authorization"] = "Bearer " + token + else: + logging.warning( + "An authentication token was not found at `GITHUB_TOKEN`, rate limits may be encountered.", + ) + + return session + + +def find(args): + """ + Find available Python versions and write metadata to a file. + """ + results = {} + session = get_session() + + for page in range(1, 100): + logging.debug("Reading release page %s...", page) + resp = session.get("%s?page=%d" % (RELEASE_URL, page)) + rows = resp.json() + if not rows: + break + for row in rows: + for asset in row["assets"]: + url = asset["browser_download_url"] + base_name = unquote(url.rsplit("/")[-1]) + if base_name.endswith(".sha256"): + continue + info = parse_filename(base_name) + if info is None: + continue + py_ver, triple, flavor = info + if "-static" in triple or (flavor and "noopt" in flavor): + continue + triple = normalize_triple(triple) + if triple is None: + continue + results.setdefault(py_ver, []).append((triple, flavor, url)) + + cpython_results = {} + for py_ver, choices in results.items(): + choices.sort(key=_sort_key) + urls = {} + for triple, flavor, url in choices: + triple = tuple(triple.split("-")) + if triple in urls: + continue + urls[triple] = url + cpython_results[tuple(map(int, py_ver.split(".")))] = urls + + final_results = {} + for interpreter, py_ver, choices in sorted( + chain( + (("cpython",) + x for x in cpython_results.items()), + ), + key=lambda x: x[:2], + reverse=True, + ): + for (arch, platform), url in sorted(choices.items()): + key = "%s-%s.%s.%s-%s-%s" % (interpreter, *py_ver, platform, arch) + logging.info("Found %s", key) + sha256 = read_sha256(session, url) + + final_results[key] = { + "name": interpreter, + "arch": arch, + "os": platform, + "major": py_ver[0], + "minor": py_ver[1], + "patch": py_ver[2], + "url": url, + "sha256": sha256, + } + + VERSIONS_FILE.parent.mkdir(parents=True, exist_ok=True) + VERSIONS_FILE.write_text(json.dumps(final_results, indent=2)) + + +def main(): + parser = argparse.ArgumentParser(description="Fetch Python version metadata.") + parser.add_argument( + "-v", + "--verbose", + action="store_true", + help="Enable debug logging", + ) + parser.add_argument( + "-q", + "--quiet", + action="store_true", + help="Disable logging", + ) + args = parser.parse_args() + + if args.quiet: + log_level = logging.CRITICAL + elif args.verbose: + log_level = logging.DEBUG + else: + log_level = logging.INFO + + logging.basicConfig( + level=log_level, + format="%(asctime)s %(levelname)s %(message)s", + datefmt="%Y-%m-%d %H:%M:%S", + ) + + find(args) + + +if __name__ == "__main__": + main() diff --git a/scripts/bootstrap/install.sh b/scripts/bootstrap/install.sh new file mode 100755 index 000000000..b4a3d0ad9 --- /dev/null +++ b/scripts/bootstrap/install.sh @@ -0,0 +1,118 @@ +#!/usr/bin/env bash +# +# Download required Python versions and install to `bin` +# Uses prebuilt Python distributions from indygreg/python-build-standalone +# +# Requirements +# +# macOS +# +# brew install zstd jq coreutils +# +# Ubuntu +# +# apt install zstd jq +# +# Arch Linux +# +# pacman -S zstd jq +# +# Windows +# +# winget install jqlang.jq +# +# Usage +# +# ./scripts/bootstrap/install.sh +# +# The Python versions are installed from `.python_versions`. +# Python versions are linked in-order such that the _last_ defined version will be the default. +# +# Version metadata can be updated with `fetch-version-metadata.py` which requires Python 3.12 + +set -euo pipefail + +# Convenience function for displaying URLs +function urldecode() { : "${*//+/ }"; echo -e "${_//%/\\x}"; } + +# Convenience function for checking that a command exists. +requires() { + cmd="$1" + if ! command -v "$cmd" > /dev/null 2>&1; then + echo "DEPENDENCY MISSING: $(basename $0) requires $cmd to be installed" >&2 + exit 1 + fi +} + +requires jq +requires zstd + +# Setup some file paths +this_dir=$(realpath "$(dirname "$0")") +root_dir=$(dirname "$(dirname "$this_dir")") +bin_dir="$root_dir/bin" +install_dir="$bin_dir/versions" +versions_file="$root_dir/.python-versions" +versions_metadata="$this_dir/versions.json" + +# Determine system metadata +os=$(uname -s | tr '[:upper:]' '[:lower:]') +arch=$(uname -m) +interpreter='cpython' + +# On macOS, we need a newer version of `realpath` for `--relative-to` support +realpath="$(which grealpath || which realpath)" + +# Read requested versions into an array +readarray -t versions < "$versions_file" + +# Install each version +for version in "${versions[@]}"; do + key="$interpreter-$version-$os-$arch" + echo "Installing $key" + + url=$(jq --arg key "$key" '.[$key] | .url' -r < "$versions_metadata") + + if [ "$url" == 'null' ]; then + echo "No matching download for $key" + exit 1 + fi + + filename=$(basename "$url") + echo "Downloading $(urldecode "$filename")" + curl -L --progress-bar -o "$filename" "$url" --output-dir "$this_dir" + + expected_sha=$(jq --arg key "$key" '.[$key] | .sha256' -r < "$versions_metadata") + if [ "$expected_sha" == 'null' ]; then + echo "WARNING: no checksum for $key" + else + echo -n "Verifying checksum..." + echo "$expected_sha $this_dir/$filename" | sha256sum -c --quiet + echo " OK" + fi + + install_key="$install_dir/$interpreter@$version" + rm -rf "$install_key" + echo "Extracting to $($realpath --relative-to="$root_dir" "$install_key")" + mkdir -p "$install_key" + zstd -d "$this_dir/$filename" --stdout | tar -x -C "$install_key" + + # Setup the installation + mv "$install_key/python/"* "$install_key" + # Use relative paths for links so if the bin is moved they don't break + link=$($realpath --relative-to="$bin_dir" "$install_key/install/bin/python3") + minor=$(jq --arg key "$key" '.[$key] | .minor' -r < "$versions_metadata") + + # Link as all version tuples, later versions in the file will take precedence + ln -sf "./$link" "$bin_dir/python$version" + ln -sf "./$link" "$bin_dir/python3.$minor" + ln -sf "./$link" "$bin_dir/python3" + ln -sf "./$link" "$bin_dir/python" + echo "Installed as python$version" + + # Cleanup + rmdir "$install_key/python/" + rm "$this_dir/$filename" +done + +echo "Done!" diff --git a/scripts/bootstrap/versions.json b/scripts/bootstrap/versions.json new file mode 100644 index 000000000..2035a0788 --- /dev/null +++ b/scripts/bootstrap/versions.json @@ -0,0 +1,4652 @@ +{ + "cpython-3.12.1-darwin-arm64": { + "name": "cpython", + "arch": "arm64", + "os": "darwin", + "major": 3, + "minor": 12, + "patch": 1, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20240107/cpython-3.12.1%2B20240107-aarch64-apple-darwin-pgo%2Blto-full.tar.zst", + "sha256": "61e51e3490537b800fcefad718157cf775de41044e95aa538b63ab599f66f3a9" + }, + "cpython-3.12.1-linux-arm64": { + "name": "cpython", + "arch": "arm64", + "os": "linux", + "major": 3, + "minor": 12, + "patch": 1, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20240107/cpython-3.12.1%2B20240107-aarch64-unknown-linux-gnu-lto-full.tar.zst", + "sha256": "3621be2cd8b5686e10a022f04869911cad9197a3ef77b30879fe25e792d7c249" + }, + "cpython-3.12.1-windows-i686": { + "name": "cpython", + "arch": "i686", + "os": "windows", + "major": 3, + "minor": 12, + "patch": 1, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20240107/cpython-3.12.1%2B20240107-i686-pc-windows-msvc-shared-pgo-full.tar.zst", + "sha256": "22866d35fdf58e90e75d6ba9aa78c288b452ea7041fa9bc5549eca9daa431883" + }, + "cpython-3.12.1-linux-ppc64le": { + "name": "cpython", + "arch": "ppc64le", + "os": "linux", + "major": 3, + "minor": 12, + "patch": 1, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20240107/cpython-3.12.1%2B20240107-ppc64le-unknown-linux-gnu-lto-full.tar.zst", + "sha256": "a94a35ecf61e9e4e9b9b64dcf1540371f35dbb3ca004018119091ca460cfffba" + }, + "cpython-3.12.1-linux-s390x": { + "name": "cpython", + "arch": "s390x", + "os": "linux", + "major": 3, + "minor": 12, + "patch": 1, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20240107/cpython-3.12.1%2B20240107-s390x-unknown-linux-gnu-lto-full.tar.zst", + "sha256": "48aee32710363fffcad3a6fbe6461692a8b9ea23472e18fe030cca92506fff21" + }, + "cpython-3.12.1-darwin-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "darwin", + "major": 3, + "minor": 12, + "patch": 1, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20240107/cpython-3.12.1%2B20240107-x86_64-apple-darwin-pgo%2Blto-full.tar.zst", + "sha256": "bf2b176b0426d7b4d4909c1b19bbb25b4893f9ebdc61e32df144df2b10dcc800" + }, + "cpython-3.12.1-linux-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "linux", + "major": 3, + "minor": 12, + "patch": 1, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20240107/cpython-3.12.1%2B20240107-x86_64-unknown-linux-gnu-pgo%2Blto-full.tar.zst", + "sha256": "f267489a041daf4e523c03d32639de04ee59ca925dff49a8c3ce2f28a9f70a3b" + }, + "cpython-3.12.1-windows-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "windows", + "major": 3, + "minor": 12, + "patch": 1, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20240107/cpython-3.12.1%2B20240107-x86_64-pc-windows-msvc-shared-pgo-full.tar.zst", + "sha256": "d9bc1b566250bf51818976bf98bf50e1f4c59b2503b50d29250cac5ab5ef6b38" + }, + "cpython-3.12.1-linux-x86_64_v2": { + "name": "cpython", + "arch": "x86_64_v2", + "os": "linux", + "major": 3, + "minor": 12, + "patch": 1, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20240107/cpython-3.12.1%2B20240107-x86_64_v2-unknown-linux-gnu-pgo%2Blto-full.tar.zst", + "sha256": "1014f577276f4088748be20ce1c2aead66e43c83b62d19c60ab96d8c04bfbbdf" + }, + "cpython-3.12.1-linux-x86_64_v3": { + "name": "cpython", + "arch": "x86_64_v3", + "os": "linux", + "major": 3, + "minor": 12, + "patch": 1, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20240107/cpython-3.12.1%2B20240107-x86_64_v3-unknown-linux-gnu-pgo%2Blto-full.tar.zst", + "sha256": "9859793c937d495431f2a94a2724eab326617db18cf81f33ef1b6be67485bb4c" + }, + "cpython-3.12.1-linux-x86_64_v4": { + "name": "cpython", + "arch": "x86_64_v4", + "os": "linux", + "major": 3, + "minor": 12, + "patch": 1, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20240107/cpython-3.12.1%2B20240107-x86_64_v4-unknown-linux-gnu-lto-full.tar.zst", + "sha256": "77488c12ab493258df261e203627de7fe798fe0481f687bb0f1b3c336195e87d" + }, + "cpython-3.12.0-darwin-arm64": { + "name": "cpython", + "arch": "arm64", + "os": "darwin", + "major": 3, + "minor": 12, + "patch": 0, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20231002/cpython-3.12.0%2B20231002-aarch64-apple-darwin-pgo%2Blto-full.tar.zst", + "sha256": "25fc8cd41e975d18d13bcc8f8beffa096ff8a0b86c4a737e1c6617900092c966" + }, + "cpython-3.12.0-linux-arm64": { + "name": "cpython", + "arch": "arm64", + "os": "linux", + "major": 3, + "minor": 12, + "patch": 0, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20231002/cpython-3.12.0%2B20231002-aarch64-unknown-linux-gnu-lto-full.tar.zst", + "sha256": "86e16b6defbbd7db0b7f98879b2b381e0e5b0ec07126cb9f5fc0cafe9869dc36" + }, + "cpython-3.12.0-windows-i686": { + "name": "cpython", + "arch": "i686", + "os": "windows", + "major": 3, + "minor": 12, + "patch": 0, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20231002/cpython-3.12.0%2B20231002-i686-pc-windows-msvc-shared-pgo-full.tar.zst", + "sha256": "465e91b6e6d0d1c40c8a4bce3642c4adcb9b75cf03fbd5fd5a33a36358249289" + }, + "cpython-3.12.0-linux-ppc64le": { + "name": "cpython", + "arch": "ppc64le", + "os": "linux", + "major": 3, + "minor": 12, + "patch": 0, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20231002/cpython-3.12.0%2B20231002-ppc64le-unknown-linux-gnu-lto-full.tar.zst", + "sha256": "3178a7dd91ade5db6aa9023b476235f6b8224520ce0bda322131f26fd3fdb858" + }, + "cpython-3.12.0-linux-s390x": { + "name": "cpython", + "arch": "s390x", + "os": "linux", + "major": 3, + "minor": 12, + "patch": 0, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20231002/cpython-3.12.0%2B20231002-s390x-unknown-linux-gnu-lto-full.tar.zst", + "sha256": "aa02889eb40c9207cef648b41b6b80eb81a741a5a5f35dfa9fc2be0132b68e67" + }, + "cpython-3.12.0-darwin-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "darwin", + "major": 3, + "minor": 12, + "patch": 0, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20231002/cpython-3.12.0%2B20231002-x86_64-apple-darwin-pgo%2Blto-full.tar.zst", + "sha256": "3b4781e7fd4efabe574ba0954e54c35c7d5ac4dc5b2990b40796c1c6aec67d79" + }, + "cpython-3.12.0-linux-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "linux", + "major": 3, + "minor": 12, + "patch": 0, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20231002/cpython-3.12.0%2B20231002-x86_64-unknown-linux-gnu-pgo%2Blto-full.tar.zst", + "sha256": "5ce861907a2751a3a7395b1aaada830c2b072acc03f3dd0bcbaaa2b7a9166fc0" + }, + "cpython-3.12.0-windows-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "windows", + "major": 3, + "minor": 12, + "patch": 0, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20231002/cpython-3.12.0%2B20231002-x86_64-pc-windows-msvc-shared-pgo-full.tar.zst", + "sha256": "5bdff7ed56550d96f9b26a27a8c25f0cc58a03bff19e5f52bba84366183cab8b" + }, + "cpython-3.12.0-linux-x86_64_v2": { + "name": "cpython", + "arch": "x86_64_v2", + "os": "linux", + "major": 3, + "minor": 12, + "patch": 0, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20231002/cpython-3.12.0%2B20231002-x86_64_v2-unknown-linux-gnu-pgo%2Blto-full.tar.zst", + "sha256": "d0dce9731a9de1d9cc2528e9dd6389d4cbb6ca954a637593d2952e0849d50f07" + }, + "cpython-3.12.0-linux-x86_64_v3": { + "name": "cpython", + "arch": "x86_64_v3", + "os": "linux", + "major": 3, + "minor": 12, + "patch": 0, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20231002/cpython-3.12.0%2B20231002-x86_64_v3-unknown-linux-gnu-pgo%2Blto-full.tar.zst", + "sha256": "e9623e1e4cc852f67d35cf79890a2f01e7380c9f0df2fa15663ed317ac2d4e69" + }, + "cpython-3.12.0-linux-x86_64_v4": { + "name": "cpython", + "arch": "x86_64_v4", + "os": "linux", + "major": 3, + "minor": 12, + "patch": 0, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20231002/cpython-3.12.0%2B20231002-x86_64_v4-unknown-linux-gnu-lto-full.tar.zst", + "sha256": "50e9adbee814e47a919d3d21ba71d8088076dc76aab5db1439d6d89609691883" + }, + "cpython-3.11.7-darwin-arm64": { + "name": "cpython", + "arch": "arm64", + "os": "darwin", + "major": 3, + "minor": 11, + "patch": 7, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20240107/cpython-3.11.7%2B20240107-aarch64-apple-darwin-pgo%2Blto-full.tar.zst", + "sha256": "c1f3dd13825906a5eae23ed8de9b653edb620568b2e0226eef3784eb1cce7eed" + }, + "cpython-3.11.7-linux-arm64": { + "name": "cpython", + "arch": "arm64", + "os": "linux", + "major": 3, + "minor": 11, + "patch": 7, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20240107/cpython-3.11.7%2B20240107-aarch64-unknown-linux-gnu-lto-full.tar.zst", + "sha256": "e066d3fb69162e401d2bb1f3c20798fde7c2fffcba0912d792e46d569b591ab3" + }, + "cpython-3.11.7-windows-i686": { + "name": "cpython", + "arch": "i686", + "os": "windows", + "major": 3, + "minor": 11, + "patch": 7, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20240107/cpython-3.11.7%2B20240107-i686-pc-windows-msvc-shared-pgo-full.tar.zst", + "sha256": "6613f1f9238d19969d8a2827deec84611cb772503207056cc9f0deb89bea48cd" + }, + "cpython-3.11.7-linux-ppc64le": { + "name": "cpython", + "arch": "ppc64le", + "os": "linux", + "major": 3, + "minor": 11, + "patch": 7, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20240107/cpython-3.11.7%2B20240107-ppc64le-unknown-linux-gnu-lto-full.tar.zst", + "sha256": "fc2e32d265a11da50d6154a65ece5161055cfd0450cdc94d69e21f021ecff38c" + }, + "cpython-3.11.7-linux-s390x": { + "name": "cpython", + "arch": "s390x", + "os": "linux", + "major": 3, + "minor": 11, + "patch": 7, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20240107/cpython-3.11.7%2B20240107-s390x-unknown-linux-gnu-lto-full.tar.zst", + "sha256": "5fee1c4d7bf370f9b74896e7575b5a94b36aba3d2d9d6746db72c8d3a6e2a4c1" + }, + "cpython-3.11.7-darwin-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "darwin", + "major": 3, + "minor": 11, + "patch": 7, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20240107/cpython-3.11.7%2B20240107-x86_64-apple-darwin-pgo%2Blto-full.tar.zst", + "sha256": "3f8caf73f2bfe22efa9666974c119727e163716e88af8ed3caa1e0ae5493de61" + }, + "cpython-3.11.7-linux-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "linux", + "major": 3, + "minor": 11, + "patch": 7, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20240107/cpython-3.11.7%2B20240107-x86_64-unknown-linux-gnu-pgo%2Blto-full.tar.zst", + "sha256": "b7e19b262c19dfb82107e092ba3959b2da9b8bc53aafeb86727996afdb577221" + }, + "cpython-3.11.7-windows-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "windows", + "major": 3, + "minor": 11, + "patch": 7, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20240107/cpython-3.11.7%2B20240107-x86_64-pc-windows-msvc-shared-pgo-full.tar.zst", + "sha256": "89d1d8f080e5494ea57918fc5ecf3d483ffef943cd5a336e64da150cd44b4aa0" + }, + "cpython-3.11.7-linux-x86_64_v2": { + "name": "cpython", + "arch": "x86_64_v2", + "os": "linux", + "major": 3, + "minor": 11, + "patch": 7, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20240107/cpython-3.11.7%2B20240107-x86_64_v2-unknown-linux-gnu-pgo%2Blto-full.tar.zst", + "sha256": "20e132bb74b85d108bc1beeffa62b18bfe7abc6774b1447d18b77df5288776cb" + }, + "cpython-3.11.7-linux-x86_64_v3": { + "name": "cpython", + "arch": "x86_64_v3", + "os": "linux", + "major": 3, + "minor": 11, + "patch": 7, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20240107/cpython-3.11.7%2B20240107-x86_64_v3-unknown-linux-gnu-pgo%2Blto-full.tar.zst", + "sha256": "b44578614acb0e4f9f8778cfac094b9079b1b5330ecac3c51a7af1e1e334cd1a" + }, + "cpython-3.11.7-linux-x86_64_v4": { + "name": "cpython", + "arch": "x86_64_v4", + "os": "linux", + "major": 3, + "minor": 11, + "patch": 7, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20240107/cpython-3.11.7%2B20240107-x86_64_v4-unknown-linux-gnu-lto-full.tar.zst", + "sha256": "c6ed4abf6870feb30ab741fe51dad163bc3b334369d05aa8b162f212851a3ac4" + }, + "cpython-3.11.6-darwin-arm64": { + "name": "cpython", + "arch": "arm64", + "os": "darwin", + "major": 3, + "minor": 11, + "patch": 6, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20231002/cpython-3.11.6%2B20231002-aarch64-apple-darwin-pgo%2Blto-full.tar.zst", + "sha256": "6e9007bcbbf51203e89c34a87ed42561630a35bc4eb04a565c92ba7159fe5826" + }, + "cpython-3.11.6-linux-arm64": { + "name": "cpython", + "arch": "arm64", + "os": "linux", + "major": 3, + "minor": 11, + "patch": 6, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20231002/cpython-3.11.6%2B20231002-aarch64-unknown-linux-gnu-lto-full.tar.zst", + "sha256": "7c621a748a4fd6ae99d8ba7ec2da59173d31475838382a13df6d2b1bf95a7059" + }, + "cpython-3.11.6-windows-i686": { + "name": "cpython", + "arch": "i686", + "os": "windows", + "major": 3, + "minor": 11, + "patch": 6, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20231002/cpython-3.11.6%2B20231002-i686-pc-windows-msvc-shared-pgo-full.tar.zst", + "sha256": "2670731428191d4476bf260c8144ccf06f9e5f8ac6f2de1dc444ca96ab627082" + }, + "cpython-3.11.6-linux-ppc64le": { + "name": "cpython", + "arch": "ppc64le", + "os": "linux", + "major": 3, + "minor": 11, + "patch": 6, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20231002/cpython-3.11.6%2B20231002-ppc64le-unknown-linux-gnu-lto-full.tar.zst", + "sha256": "2b3fb2ea8ee2ca290c09dfbca43428b1e8f6853290a7bc99ec394091e2f4b228" + }, + "cpython-3.11.6-linux-s390x": { + "name": "cpython", + "arch": "s390x", + "os": "linux", + "major": 3, + "minor": 11, + "patch": 6, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20231002/cpython-3.11.6%2B20231002-s390x-unknown-linux-gnu-lto-full.tar.zst", + "sha256": "b7a95b4861caa2cd66c1e272796048711cf063fb84f1e5b4ba447dc7593718a8" + }, + "cpython-3.11.6-darwin-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "darwin", + "major": 3, + "minor": 11, + "patch": 6, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20231002/cpython-3.11.6%2B20231002-x86_64-apple-darwin-pgo%2Blto-full.tar.zst", + "sha256": "3685156e4139e89484c071ba1a1b85be0b4e302a786de5a170d3b0713863c2e8" + }, + "cpython-3.11.6-linux-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "linux", + "major": 3, + "minor": 11, + "patch": 6, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20231002/cpython-3.11.6%2B20231002-x86_64-unknown-linux-gnu-pgo%2Blto-full.tar.zst", + "sha256": "6da291720c9fe2f63c5c55f7acc8b6094a05488453a84cfcc012e92305099ee7" + }, + "cpython-3.11.6-windows-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "windows", + "major": 3, + "minor": 11, + "patch": 6, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20231002/cpython-3.11.6%2B20231002-x86_64-pc-windows-msvc-shared-pgo-full.tar.zst", + "sha256": "38d2c2fa2f9effbf486207bef7141d1b5c385ad30729ab0c976e6a852a2a9401" + }, + "cpython-3.11.6-linux-x86_64_v2": { + "name": "cpython", + "arch": "x86_64_v2", + "os": "linux", + "major": 3, + "minor": 11, + "patch": 6, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20231002/cpython-3.11.6%2B20231002-x86_64_v2-unknown-linux-gnu-pgo%2Blto-full.tar.zst", + "sha256": "029f2bcb4a87956e8d62ebd89e31079d659a877fd2814ce7ef6ae32a230d1bb0" + }, + "cpython-3.11.6-linux-x86_64_v3": { + "name": "cpython", + "arch": "x86_64_v3", + "os": "linux", + "major": 3, + "minor": 11, + "patch": 6, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20231002/cpython-3.11.6%2B20231002-x86_64_v3-unknown-linux-gnu-pgo%2Blto-full.tar.zst", + "sha256": "d11a21ee082536a800c32394b076d6b72a840b0d2e70b8e076c7831a4a1d5ed4" + }, + "cpython-3.11.6-linux-x86_64_v4": { + "name": "cpython", + "arch": "x86_64_v4", + "os": "linux", + "major": 3, + "minor": 11, + "patch": 6, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20231002/cpython-3.11.6%2B20231002-x86_64_v4-unknown-linux-gnu-lto-full.tar.zst", + "sha256": "0cb886edafddff9cb37607f7ec25cb10ecd68bc4741180d17513b7944430bb7b" + }, + "cpython-3.11.5-darwin-arm64": { + "name": "cpython", + "arch": "arm64", + "os": "darwin", + "major": 3, + "minor": 11, + "patch": 5, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20230826/cpython-3.11.5%2B20230826-aarch64-apple-darwin-pgo%2Blto-full.tar.zst", + "sha256": "7bee180b764722a73c2599fbe2c3a6121cf6bbcb08cb3082851e93c43fe130e7" + }, + "cpython-3.11.5-linux-arm64": { + "name": "cpython", + "arch": "arm64", + "os": "linux", + "major": 3, + "minor": 11, + "patch": 5, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20230826/cpython-3.11.5%2B20230826-aarch64-unknown-linux-gnu-lto-full.tar.zst", + "sha256": "cf131546383f0d9b81eca17c3fcb80508e01b11d9ca956d790c41baefb859d7d" + }, + "cpython-3.11.5-linux-i686": { + "name": "cpython", + "arch": "i686", + "os": "linux", + "major": 3, + "minor": 11, + "patch": 5, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20230826/cpython-3.11.5%2B20230826-i686-unknown-linux-gnu-pgo%2Blto-full.tar.zst", + "sha256": "e156b972b72ae2703c13da3335b16ce5db9f1f33bac27cb0c444a59d04d918fc" + }, + "cpython-3.11.5-windows-i686": { + "name": "cpython", + "arch": "i686", + "os": "windows", + "major": 3, + "minor": 11, + "patch": 5, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20230826/cpython-3.11.5%2B20230826-i686-pc-windows-msvc-shared-pgo-full.tar.zst", + "sha256": "c9ffe9c2c88685ce3064f734cbdfede0a07de7d826fada58f8045f3bd8f81a9d" + }, + "cpython-3.11.5-linux-ppc64le": { + "name": "cpython", + "arch": "ppc64le", + "os": "linux", + "major": 3, + "minor": 11, + "patch": 5, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20230826/cpython-3.11.5%2B20230826-ppc64le-unknown-linux-gnu-lto-full.tar.zst", + "sha256": "0d46418101588602d7d817c24fbab7d6ce2675f0fb13d758b6a09b68c343b29d" + }, + "cpython-3.11.5-linux-s390x": { + "name": "cpython", + "arch": "s390x", + "os": "linux", + "major": 3, + "minor": 11, + "patch": 5, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20230826/cpython-3.11.5%2B20230826-s390x-unknown-linux-gnu-lto-full.tar.zst", + "sha256": "a4453d38dc9293326741c8062f53527bd9781eace71c89e5453de308522aa23a" + }, + "cpython-3.11.5-darwin-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "darwin", + "major": 3, + "minor": 11, + "patch": 5, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20230826/cpython-3.11.5%2B20230826-x86_64-apple-darwin-pgo%2Blto-full.tar.zst", + "sha256": "e43d70a49919641ca2939a5a9107b13d5fef8c13af0f511a33a94bb6af2044f0" + }, + "cpython-3.11.5-linux-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "linux", + "major": 3, + "minor": 11, + "patch": 5, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20230826/cpython-3.11.5%2B20230826-x86_64-unknown-linux-gnu-pgo%2Blto-full.tar.zst", + "sha256": "556d7d46c2af6f9744da03cac5304975f60de1cd5846a109814dd5c396fe9042" + }, + "cpython-3.11.5-windows-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "windows", + "major": 3, + "minor": 11, + "patch": 5, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20230826/cpython-3.11.5%2B20230826-x86_64-pc-windows-msvc-shared-pgo-full.tar.zst", + "sha256": "6e4d20e6d498f9edeb3c28cb9541ad20f675f16da350b078e40a9dcfd93cdc3d" + }, + "cpython-3.11.5-linux-x86_64_v2": { + "name": "cpython", + "arch": "x86_64_v2", + "os": "linux", + "major": 3, + "minor": 11, + "patch": 5, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20230826/cpython-3.11.5%2B20230826-x86_64_v2-unknown-linux-gnu-pgo%2Blto-full.tar.zst", + "sha256": "8b684dcc304f056ad642257fc4987e6a943d0e54b01c3876f838dcc543a321e4" + }, + "cpython-3.11.5-linux-x86_64_v3": { + "name": "cpython", + "arch": "x86_64_v3", + "os": "linux", + "major": 3, + "minor": 11, + "patch": 5, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20230826/cpython-3.11.5%2B20230826-x86_64_v3-unknown-linux-gnu-pgo%2Blto-full.tar.zst", + "sha256": "856706fdb16151ac31127151e5c9aefc82061605812b009002141fe2cf137440" + }, + "cpython-3.11.5-linux-x86_64_v4": { + "name": "cpython", + "arch": "x86_64_v4", + "os": "linux", + "major": 3, + "minor": 11, + "patch": 5, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20230826/cpython-3.11.5%2B20230826-x86_64_v4-unknown-linux-gnu-lto-full.tar.zst", + "sha256": "6dafd07df2b82e4be32560d4b036a6f2fcaa983a49750ff546ccd9e24c93ac20" + }, + "cpython-3.11.4-darwin-arm64": { + "name": "cpython", + "arch": "arm64", + "os": "darwin", + "major": 3, + "minor": 11, + "patch": 4, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20230726/cpython-3.11.4%2B20230726-aarch64-apple-darwin-pgo%2Blto-full.tar.zst", + "sha256": "988d476c806f71a3233ff4266eda166a5d28cf83ba306ac88b4220554fc83e8c" + }, + "cpython-3.11.4-linux-arm64": { + "name": "cpython", + "arch": "arm64", + "os": "linux", + "major": 3, + "minor": 11, + "patch": 4, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20230726/cpython-3.11.4%2B20230726-aarch64-unknown-linux-gnu-lto-full.tar.zst", + "sha256": "46982228f02dc6d8a1227289de479f938567ec8acaa361909a998a0196823809" + }, + "cpython-3.11.4-linux-i686": { + "name": "cpython", + "arch": "i686", + "os": "linux", + "major": 3, + "minor": 11, + "patch": 4, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20230726/cpython-3.11.4%2B20230726-i686-unknown-linux-gnu-pgo%2Blto-full.tar.zst", + "sha256": "1bf5ba6806abbe70770e8e00b2902cbbb75dd4ff0c6e992de85e6752a9998e1a" + }, + "cpython-3.11.4-windows-i686": { + "name": "cpython", + "arch": "i686", + "os": "windows", + "major": 3, + "minor": 11, + "patch": 4, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20230726/cpython-3.11.4%2B20230726-i686-pc-windows-msvc-shared-pgo-full.tar.zst", + "sha256": "0d22f43c5bb3f27ff2f9e8c60b0d7abd391bb2cac1790b0960970ff5580f6e9a" + }, + "cpython-3.11.4-linux-ppc64le": { + "name": "cpython", + "arch": "ppc64le", + "os": "linux", + "major": 3, + "minor": 11, + "patch": 4, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20230726/cpython-3.11.4%2B20230726-ppc64le-unknown-linux-gnu-lto-full.tar.zst", + "sha256": "17ad84cbfbfee0ebfe309ca389fe176e75fd864c82671186e1fd9926a0c5cae9" + }, + "cpython-3.11.4-linux-s390x": { + "name": "cpython", + "arch": "s390x", + "os": "linux", + "major": 3, + "minor": 11, + "patch": 4, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20230726/cpython-3.11.4%2B20230726-s390x-unknown-linux-gnu-lto-full.tar.zst", + "sha256": "e7cdb6602dbb5d58d04fca13f55b70c86759bf86b606cc544974876a0fcf662b" + }, + "cpython-3.11.4-darwin-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "darwin", + "major": 3, + "minor": 11, + "patch": 4, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20230726/cpython-3.11.4%2B20230726-x86_64-apple-darwin-pgo%2Blto-full.tar.zst", + "sha256": "6d9765785316c7f1c07def71b413c92c84302f798b30ee09e2e0b5da28353a51" + }, + "cpython-3.11.4-linux-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "linux", + "major": 3, + "minor": 11, + "patch": 4, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20230726/cpython-3.11.4%2B20230726-x86_64-unknown-linux-gnu-pgo%2Blto-full.tar.zst", + "sha256": "b48061173c763971a28669585b47fa26cde98497eee6ebd8057849547b7282ee" + }, + "cpython-3.11.4-windows-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "windows", + "major": 3, + "minor": 11, + "patch": 4, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20230726/cpython-3.11.4%2B20230726-x86_64-pc-windows-msvc-shared-pgo-full.tar.zst", + "sha256": "1692d795d6199b2261161ae54250009ffad0317929302903f6f2c773befd4d76" + }, + "cpython-3.11.4-linux-x86_64_v2": { + "name": "cpython", + "arch": "x86_64_v2", + "os": "linux", + "major": 3, + "minor": 11, + "patch": 4, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20230726/cpython-3.11.4%2B20230726-x86_64_v2-unknown-linux-gnu-pgo%2Blto-full.tar.zst", + "sha256": "6626870973c017de0ab6aa89004398b993634c9bf08e8d85f0800d7506a8bef9" + }, + "cpython-3.11.4-linux-x86_64_v3": { + "name": "cpython", + "arch": "x86_64_v3", + "os": "linux", + "major": 3, + "minor": 11, + "patch": 4, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20230726/cpython-3.11.4%2B20230726-x86_64_v3-unknown-linux-gnu-pgo%2Blto-full.tar.zst", + "sha256": "a7d43d3b3620c7a14a99c087abe6ef43bc961799919e35c23faea676bcc40b98" + }, + "cpython-3.11.4-linux-x86_64_v4": { + "name": "cpython", + "arch": "x86_64_v4", + "os": "linux", + "major": 3, + "minor": 11, + "patch": 4, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20230726/cpython-3.11.4%2B20230726-x86_64_v4-unknown-linux-gnu-lto-full.tar.zst", + "sha256": "968e48b573f4a4c8468f58f287a8893cd0229eb2731a918b19ae0fa29be4a209" + }, + "cpython-3.11.3-darwin-arm64": { + "name": "cpython", + "arch": "arm64", + "os": "darwin", + "major": 3, + "minor": 11, + "patch": 3, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20230507/cpython-3.11.3%2B20230507-aarch64-apple-darwin-pgo%2Blto-full.tar.zst", + "sha256": "cd296d628ceebf55a78c7f6a7aed379eba9dbd72045d002e1c2c85af0d6f5049" + }, + "cpython-3.11.3-linux-arm64": { + "name": "cpython", + "arch": "arm64", + "os": "linux", + "major": 3, + "minor": 11, + "patch": 3, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20230507/cpython-3.11.3%2B20230507-aarch64-unknown-linux-gnu-lto-full.tar.zst", + "sha256": "8b8e4c58070f8ff372cf89080f24ecb9154ccfcc7674a8a46d67bdb766a1ee95" + }, + "cpython-3.11.3-linux-i686": { + "name": "cpython", + "arch": "i686", + "os": "linux", + "major": 3, + "minor": 11, + "patch": 3, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20230507/cpython-3.11.3%2B20230507-i686-unknown-linux-gnu-pgo%2Blto-full.tar.zst", + "sha256": "58734b66ee8d2762911f32c6bf59f36928990dc637e494f9ac8ebdd589d64547" + }, + "cpython-3.11.3-windows-i686": { + "name": "cpython", + "arch": "i686", + "os": "windows", + "major": 3, + "minor": 11, + "patch": 3, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20230507/cpython-3.11.3%2B20230507-i686-pc-windows-msvc-shared-pgo-full.tar.zst", + "sha256": "877c90ef778a526aa25ab417034f5e70728ac14e5eb1fa5cfd741f531203a3fc" + }, + "cpython-3.11.3-linux-ppc64le": { + "name": "cpython", + "arch": "ppc64le", + "os": "linux", + "major": 3, + "minor": 11, + "patch": 3, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20230507/cpython-3.11.3%2B20230507-ppc64le-unknown-linux-gnu-lto-full.tar.zst", + "sha256": "63a2f046e990bd2a790cc94a1cf04cb0dce9015a44bb633751bfb5b616fe01f2" + }, + "cpython-3.11.3-darwin-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "darwin", + "major": 3, + "minor": 11, + "patch": 3, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20230507/cpython-3.11.3%2B20230507-x86_64-apple-darwin-pgo%2Blto-full.tar.zst", + "sha256": "2fbb31a8bc6663e2d31d3054319b51a29b1915c03222a94b9d563233e11d1bef" + }, + "cpython-3.11.3-linux-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "linux", + "major": 3, + "minor": 11, + "patch": 3, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20230507/cpython-3.11.3%2B20230507-x86_64-unknown-linux-gnu-pgo%2Blto-full.tar.zst", + "sha256": "b9e2e889a5797b181f086c175a03a0e011277a708199b2b20270bacfca72fb91" + }, + "cpython-3.11.3-windows-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "windows", + "major": 3, + "minor": 11, + "patch": 3, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20230507/cpython-3.11.3%2B20230507-x86_64-pc-windows-msvc-shared-pgo-full.tar.zst", + "sha256": "9d27e607fb1cb2d766e17f27853013d8c0f0b09ac53127aaff03ec89ab13370d" + }, + "cpython-3.11.3-linux-x86_64_v2": { + "name": "cpython", + "arch": "x86_64_v2", + "os": "linux", + "major": 3, + "minor": 11, + "patch": 3, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20230507/cpython-3.11.3%2B20230507-x86_64_v2-unknown-linux-gnu-pgo%2Blto-full.tar.zst", + "sha256": "c44c216e1ca81df945136a77e470137397b7c5d7f092c1954d534b7818422e1a" + }, + "cpython-3.11.3-linux-x86_64_v3": { + "name": "cpython", + "arch": "x86_64_v3", + "os": "linux", + "major": 3, + "minor": 11, + "patch": 3, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20230507/cpython-3.11.3%2B20230507-x86_64_v3-unknown-linux-gnu-pgo%2Blto-full.tar.zst", + "sha256": "0c1f4ef6f20d8a8443f3d24b8d744ce91188450a6e5f7832d4c01725f933fdb3" + }, + "cpython-3.11.3-linux-x86_64_v4": { + "name": "cpython", + "arch": "x86_64_v4", + "os": "linux", + "major": 3, + "minor": 11, + "patch": 3, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20230507/cpython-3.11.3%2B20230507-x86_64_v4-unknown-linux-gnu-lto-full.tar.zst", + "sha256": "7957db46c217dc741fa7dca90e022afeeb4266242e0e87e264cb1c4b1acb95cf" + }, + "cpython-3.11.1-darwin-arm64": { + "name": "cpython", + "arch": "arm64", + "os": "darwin", + "major": 3, + "minor": 11, + "patch": 1, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20230116/cpython-3.11.1%2B20230116-aarch64-apple-darwin-pgo%2Blto-full.tar.zst", + "sha256": "da187194cc351d827232b1d2d85b2855d7e25a4ada3e47bc34b4f87b1d989be5" + }, + "cpython-3.11.1-linux-arm64": { + "name": "cpython", + "arch": "arm64", + "os": "linux", + "major": 3, + "minor": 11, + "patch": 1, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20230116/cpython-3.11.1%2B20230116-aarch64-unknown-linux-gnu-lto-full.tar.zst", + "sha256": "cd3b910dce032f0ec9b414156b391878010940368b5ea27c33b998016e9c1cb8" + }, + "cpython-3.11.1-linux-i686": { + "name": "cpython", + "arch": "i686", + "os": "linux", + "major": 3, + "minor": 11, + "patch": 1, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20230116/cpython-3.11.1%2B20230116-i686-unknown-linux-gnu-pgo%2Blto-full.tar.zst", + "sha256": "cce57c5fbd3ff10b91d86978b7ad15b9e02f57447d4f429c0bd4e00aa676d389" + }, + "cpython-3.11.1-windows-i686": { + "name": "cpython", + "arch": "i686", + "os": "windows", + "major": 3, + "minor": 11, + "patch": 1, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20230116/cpython-3.11.1%2B20230116-i686-pc-windows-msvc-shared-pgo-full.tar.zst", + "sha256": "b062ac2c72a85510fb9300675bd5c716baede21e9482ef6335247b4aa006584c" + }, + "cpython-3.11.1-darwin-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "darwin", + "major": 3, + "minor": 11, + "patch": 1, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20230116/cpython-3.11.1%2B20230116-x86_64-apple-darwin-pgo%2Blto-full.tar.zst", + "sha256": "0eb61be53ee13cf75a30b8a164ef513a2c7995b25b118a3a503245d46231b13a" + }, + "cpython-3.11.1-linux-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "linux", + "major": 3, + "minor": 11, + "patch": 1, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20230116/cpython-3.11.1%2B20230116-x86_64-unknown-linux-gnu-pgo%2Blto-full.tar.zst", + "sha256": "02332441cb610b1e1aa2d2972e261e2910cc6a950b7973cac22c0759a93c5fcd" + }, + "cpython-3.11.1-windows-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "windows", + "major": 3, + "minor": 11, + "patch": 1, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20230116/cpython-3.11.1%2B20230116-x86_64-pc-windows-msvc-shared-pgo-full.tar.zst", + "sha256": "f5c46fffda7d7894b975af728f739b02d1cec50fd4a3ea49f69de9ceaae74b17" + }, + "cpython-3.11.1-linux-x86_64_v2": { + "name": "cpython", + "arch": "x86_64_v2", + "os": "linux", + "major": 3, + "minor": 11, + "patch": 1, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20230116/cpython-3.11.1%2B20230116-x86_64_v2-unknown-linux-gnu-pgo%2Blto-full.tar.zst", + "sha256": "988315feb234a8c630ac4f73f47d16e172e3766166f3a7213a65f8cf7a75a713" + }, + "cpython-3.11.1-linux-x86_64_v3": { + "name": "cpython", + "arch": "x86_64_v3", + "os": "linux", + "major": 3, + "minor": 11, + "patch": 1, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20230116/cpython-3.11.1%2B20230116-x86_64_v3-unknown-linux-gnu-pgo%2Blto-full.tar.zst", + "sha256": "8e279b25388e47124a422f300db710cdc98c64cf24bf6903f6f6e8ddbc52d743" + }, + "cpython-3.11.1-linux-x86_64_v4": { + "name": "cpython", + "arch": "x86_64_v4", + "os": "linux", + "major": 3, + "minor": 11, + "patch": 1, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20230116/cpython-3.11.1%2B20230116-x86_64_v4-unknown-linux-gnu-lto-full.tar.zst", + "sha256": "07156373b5f910e00402ade33332141ec60bae4a2c2d0b47850b17ba50d5352d" + }, + "cpython-3.10.13-darwin-arm64": { + "name": "cpython", + "arch": "arm64", + "os": "darwin", + "major": 3, + "minor": 10, + "patch": 13, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20240107/cpython-3.10.13%2B20240107-aarch64-apple-darwin-pgo%2Blto-full.tar.zst", + "sha256": "d1a777a0688bafd2a62050c680508769d9b6c14779f64fee591f4e135c11e711" + }, + "cpython-3.10.13-linux-arm64": { + "name": "cpython", + "arch": "arm64", + "os": "linux", + "major": 3, + "minor": 10, + "patch": 13, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20240107/cpython-3.10.13%2B20240107-aarch64-unknown-linux-gnu-lto-full.tar.zst", + "sha256": "4e9fcb141a0c9af986f0819ab7a64c62ceb7b68f33df75753e669fc3d23a3412" + }, + "cpython-3.10.13-linux-i686": { + "name": "cpython", + "arch": "i686", + "os": "linux", + "major": 3, + "minor": 10, + "patch": 13, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20230826/cpython-3.10.13%2B20230826-i686-unknown-linux-gnu-pgo%2Blto-full.tar.zst", + "sha256": "cc5625a16fbec682d4ce40c0d185318164bd181efaa7eaf945ca63015db9fea3" + }, + "cpython-3.10.13-windows-i686": { + "name": "cpython", + "arch": "i686", + "os": "windows", + "major": 3, + "minor": 10, + "patch": 13, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20240107/cpython-3.10.13%2B20240107-i686-pc-windows-msvc-shared-pgo-full.tar.zst", + "sha256": "0e2e96365d06411a78bc1e1b19cc5a148034743fe6ecf5a5c8e890985fcadbb4" + }, + "cpython-3.10.13-linux-ppc64le": { + "name": "cpython", + "arch": "ppc64le", + "os": "linux", + "major": 3, + "minor": 10, + "patch": 13, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20240107/cpython-3.10.13%2B20240107-ppc64le-unknown-linux-gnu-lto-full.tar.zst", + "sha256": "9d090ea7f28366cdac01c4ae18b9ef7ca0220797af433deecb913b13cff92027" + }, + "cpython-3.10.13-linux-s390x": { + "name": "cpython", + "arch": "s390x", + "os": "linux", + "major": 3, + "minor": 10, + "patch": 13, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20240107/cpython-3.10.13%2B20240107-s390x-unknown-linux-gnu-lto-full.tar.zst", + "sha256": "c115631f1e849900e4c4cfb8c7ee83317c5499a5d54bbc4335643dd9013a7597" + }, + "cpython-3.10.13-darwin-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "darwin", + "major": 3, + "minor": 10, + "patch": 13, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20240107/cpython-3.10.13%2B20240107-x86_64-apple-darwin-pgo%2Blto-full.tar.zst", + "sha256": "b61f6f9cf0c35fd6df90b424e757a3bc1b483e8f8d8fadfa6c1ddd1a0c39c003" + }, + "cpython-3.10.13-linux-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "linux", + "major": 3, + "minor": 10, + "patch": 13, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20240107/cpython-3.10.13%2B20240107-x86_64-unknown-linux-gnu-pgo%2Blto-full.tar.zst", + "sha256": "60e7ca89d37dd8a630a5525bda6143a66a3949c4f03c8319295ddb1d1023b425" + }, + "cpython-3.10.13-windows-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "windows", + "major": 3, + "minor": 10, + "patch": 13, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20240107/cpython-3.10.13%2B20240107-x86_64-pc-windows-msvc-shared-pgo-full.tar.zst", + "sha256": "8271db063eea7a32f327121b4d828bd10b9ecd1447d01fcfe8c7518e587ede63" + }, + "cpython-3.10.13-linux-x86_64_v2": { + "name": "cpython", + "arch": "x86_64_v2", + "os": "linux", + "major": 3, + "minor": 10, + "patch": 13, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20240107/cpython-3.10.13%2B20240107-x86_64_v2-unknown-linux-gnu-pgo%2Blto-full.tar.zst", + "sha256": "83decf6de9f7b59bb85d874e0530bf109e098c79568577a30770c5a03f280dc6" + }, + "cpython-3.10.13-linux-x86_64_v3": { + "name": "cpython", + "arch": "x86_64_v3", + "os": "linux", + "major": 3, + "minor": 10, + "patch": 13, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20240107/cpython-3.10.13%2B20240107-x86_64_v3-unknown-linux-gnu-pgo%2Blto-full.tar.zst", + "sha256": "c21e444ec4ae31acc3c567e2a8b4a4acfa0431526a8efc86d48673b1aace7793" + }, + "cpython-3.10.13-linux-x86_64_v4": { + "name": "cpython", + "arch": "x86_64_v4", + "os": "linux", + "major": 3, + "minor": 10, + "patch": 13, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20240107/cpython-3.10.13%2B20240107-x86_64_v4-unknown-linux-gnu-lto-full.tar.zst", + "sha256": "662c0b46818e8af094156e1f1787bc877d6117ddceb338f58002c5ad17494fe0" + }, + "cpython-3.10.12-darwin-arm64": { + "name": "cpython", + "arch": "arm64", + "os": "darwin", + "major": 3, + "minor": 10, + "patch": 12, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20230726/cpython-3.10.12%2B20230726-aarch64-apple-darwin-pgo%2Blto-full.tar.zst", + "sha256": "a7d0cadbe867cc53dd47d7327244154157a7cca02edb88cf3bb760a4f91d4e44" + }, + "cpython-3.10.12-linux-arm64": { + "name": "cpython", + "arch": "arm64", + "os": "linux", + "major": 3, + "minor": 10, + "patch": 12, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20230726/cpython-3.10.12%2B20230726-aarch64-unknown-linux-gnu-lto-full.tar.zst", + "sha256": "bb5fa1d4ad202afc8ee4330f313c093760c9fb1af5be204dc0c6ba50c7610fea" + }, + "cpython-3.10.12-linux-i686": { + "name": "cpython", + "arch": "i686", + "os": "linux", + "major": 3, + "minor": 10, + "patch": 12, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20230726/cpython-3.10.12%2B20230726-i686-unknown-linux-gnu-pgo%2Blto-full.tar.zst", + "sha256": "159124ac71c86d8617eae17db6ed9b98f01078cc9bd76073261901826f2d940d" + }, + "cpython-3.10.12-windows-i686": { + "name": "cpython", + "arch": "i686", + "os": "windows", + "major": 3, + "minor": 10, + "patch": 12, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20230726/cpython-3.10.12%2B20230726-i686-pc-windows-msvc-shared-pgo-full.tar.zst", + "sha256": "0743b9976f20b06d9cf12de9d1b2dfe06b13f76978275e9dac73a275624bde2c" + }, + "cpython-3.10.12-linux-ppc64le": { + "name": "cpython", + "arch": "ppc64le", + "os": "linux", + "major": 3, + "minor": 10, + "patch": 12, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20230726/cpython-3.10.12%2B20230726-ppc64le-unknown-linux-gnu-lto-full.tar.zst", + "sha256": "bc23f5953c329b0155309e1ac40621da53cb3d1829912ff0616250410d876785" + }, + "cpython-3.10.12-linux-s390x": { + "name": "cpython", + "arch": "s390x", + "os": "linux", + "major": 3, + "minor": 10, + "patch": 12, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20230726/cpython-3.10.12%2B20230726-s390x-unknown-linux-gnu-lto-full.tar.zst", + "sha256": "068a3621662e806f142945b622ff2f588f7da65db4cd6282640e6f891bfe9b9e" + }, + "cpython-3.10.12-darwin-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "darwin", + "major": 3, + "minor": 10, + "patch": 12, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20230726/cpython-3.10.12%2B20230726-x86_64-apple-darwin-pgo%2Blto-full.tar.zst", + "sha256": "f1fa448384dd48033825e56ee6b5afc76c5dd67dcf2b73b61d2b252ae2e87bca" + }, + "cpython-3.10.12-linux-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "linux", + "major": 3, + "minor": 10, + "patch": 12, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20230726/cpython-3.10.12%2B20230726-x86_64-unknown-linux-gnu-pgo%2Blto-full.tar.zst", + "sha256": "79fe684338fa26e1af64de583cca77a3fd501d899420de398177952d5182d202" + }, + "cpython-3.10.12-windows-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "windows", + "major": 3, + "minor": 10, + "patch": 12, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20230726/cpython-3.10.12%2B20230726-x86_64-pc-windows-msvc-shared-pgo-full.tar.zst", + "sha256": "cb6e7c84d9e369a0ee76c9ea73d415a113ba9982db58f44e6bab5414838d35f3" + }, + "cpython-3.10.12-linux-x86_64_v2": { + "name": "cpython", + "arch": "x86_64_v2", + "os": "linux", + "major": 3, + "minor": 10, + "patch": 12, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20230726/cpython-3.10.12%2B20230726-x86_64_v2-unknown-linux-gnu-pgo%2Blto-full.tar.zst", + "sha256": "1f3d033b9202a50a376cc1cad51bf8d57cf126ef8b8a137fb39d621bd237bde7" + }, + "cpython-3.10.12-linux-x86_64_v3": { + "name": "cpython", + "arch": "x86_64_v3", + "os": "linux", + "major": 3, + "minor": 10, + "patch": 12, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20230726/cpython-3.10.12%2B20230726-x86_64_v3-unknown-linux-gnu-pgo%2Blto-full.tar.zst", + "sha256": "5de8b010ce9916504ee483541cab7ffcf394af4801f6a3a159103ae753fec5e7" + }, + "cpython-3.10.12-linux-x86_64_v4": { + "name": "cpython", + "arch": "x86_64_v4", + "os": "linux", + "major": 3, + "minor": 10, + "patch": 12, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20230726/cpython-3.10.12%2B20230726-x86_64_v4-unknown-linux-gnu-lto-full.tar.zst", + "sha256": "d5996ef14cdc7ff500a729564f7f6c689e02cdfa5c95f1116dbec06b429820f6" + }, + "cpython-3.10.11-darwin-arm64": { + "name": "cpython", + "arch": "arm64", + "os": "darwin", + "major": 3, + "minor": 10, + "patch": 11, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20230507/cpython-3.10.11%2B20230507-aarch64-apple-darwin-pgo%2Blto-full.tar.zst", + "sha256": "da9c8a3cd04485fd397387ea2fa56f3cac71827aafb51d8438b2868f86eb345b" + }, + "cpython-3.10.11-linux-arm64": { + "name": "cpython", + "arch": "arm64", + "os": "linux", + "major": 3, + "minor": 10, + "patch": 11, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20230507/cpython-3.10.11%2B20230507-aarch64-unknown-linux-gnu-lto-full.tar.zst", + "sha256": "2e304c39d8af27f9abf1cf44653f5e34e7d05b665cb68e5a5474559c145e7b33" + }, + "cpython-3.10.11-linux-i686": { + "name": "cpython", + "arch": "i686", + "os": "linux", + "major": 3, + "minor": 10, + "patch": 11, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20230507/cpython-3.10.11%2B20230507-i686-unknown-linux-gnu-pgo%2Blto-full.tar.zst", + "sha256": "f55942f89c54c90af53dba603a86f90956eec87c7fb91f5dc2ae543373224ccd" + }, + "cpython-3.10.11-windows-i686": { + "name": "cpython", + "arch": "i686", + "os": "windows", + "major": 3, + "minor": 10, + "patch": 11, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20230507/cpython-3.10.11%2B20230507-i686-pc-windows-msvc-shared-pgo-full.tar.zst", + "sha256": "60e76e136ab23b891ed1212e58bd11a73a19cd9fd884ec1c5653ca1c159d674e" + }, + "cpython-3.10.11-linux-ppc64le": { + "name": "cpython", + "arch": "ppc64le", + "os": "linux", + "major": 3, + "minor": 10, + "patch": 11, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20230507/cpython-3.10.11%2B20230507-ppc64le-unknown-linux-gnu-lto-full.tar.zst", + "sha256": "d800e3152cd53ca6cfa376e22d66b784cd07ca6ec3fec053a15c6c2b011b9a17" + }, + "cpython-3.10.11-darwin-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "darwin", + "major": 3, + "minor": 10, + "patch": 11, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20230507/cpython-3.10.11%2B20230507-x86_64-apple-darwin-pgo%2Blto-full.tar.zst", + "sha256": "e84c12aa0285235eed365971ceedf040f4d8014f5342d371e138a4da9e4e9b7c" + }, + "cpython-3.10.11-linux-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "linux", + "major": 3, + "minor": 10, + "patch": 11, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20230507/cpython-3.10.11%2B20230507-x86_64-unknown-linux-gnu-pgo%2Blto-full.tar.zst", + "sha256": "38931a156ed020f5c579af37b771871b99f31e74c34fa7e093e97eb1b2d4f978" + }, + "cpython-3.10.11-windows-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "windows", + "major": 3, + "minor": 10, + "patch": 11, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20230507/cpython-3.10.11%2B20230507-x86_64-pc-windows-msvc-shared-pgo-full.tar.zst", + "sha256": "9b4dc4a335b6122ce783bc80f5015b683e3ab1a56054751c5df494db0521da67" + }, + "cpython-3.10.11-linux-x86_64_v2": { + "name": "cpython", + "arch": "x86_64_v2", + "os": "linux", + "major": 3, + "minor": 10, + "patch": 11, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20230507/cpython-3.10.11%2B20230507-x86_64_v2-unknown-linux-gnu-pgo%2Blto-full.tar.zst", + "sha256": "071f282d9b013ff9c4ed7aefa742d8ad58f9ce025a1dae86c1b05f693e6b8b5f" + }, + "cpython-3.10.11-linux-x86_64_v3": { + "name": "cpython", + "arch": "x86_64_v3", + "os": "linux", + "major": 3, + "minor": 10, + "patch": 11, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20230507/cpython-3.10.11%2B20230507-x86_64_v3-unknown-linux-gnu-pgo%2Blto-full.tar.zst", + "sha256": "f1c08f668fecd54603f3616386db60eacac931a6ccde4f1d9af71e4351d49dbd" + }, + "cpython-3.10.11-linux-x86_64_v4": { + "name": "cpython", + "arch": "x86_64_v4", + "os": "linux", + "major": 3, + "minor": 10, + "patch": 11, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20230507/cpython-3.10.11%2B20230507-x86_64_v4-unknown-linux-gnu-lto-full.tar.zst", + "sha256": "1db0b39ce01b98dc25b1fee0ec9af02d0a695127713120678673e9d343148ce6" + }, + "cpython-3.10.9-darwin-arm64": { + "name": "cpython", + "arch": "arm64", + "os": "darwin", + "major": 3, + "minor": 10, + "patch": 9, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20230116/cpython-3.10.9%2B20230116-aarch64-apple-darwin-pgo%2Blto-full.tar.zst", + "sha256": "2508b8d4b725bb45c3e03d2ddd2b8441f1a74677cb6bd6076e692c0923135ded" + }, + "cpython-3.10.9-linux-arm64": { + "name": "cpython", + "arch": "arm64", + "os": "linux", + "major": 3, + "minor": 10, + "patch": 9, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20230116/cpython-3.10.9%2B20230116-aarch64-unknown-linux-gnu-lto-full.tar.zst", + "sha256": "3d20f40654e4356bd42c4e70ec28f4b8d8dd559884467a4e1745c08729fb740a" + }, + "cpython-3.10.9-linux-i686": { + "name": "cpython", + "arch": "i686", + "os": "linux", + "major": 3, + "minor": 10, + "patch": 9, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20230116/cpython-3.10.9%2B20230116-i686-unknown-linux-gnu-pgo%2Blto-full.tar.zst", + "sha256": "ae0745620168e65df44ae60b21622d488c9dd6ca83566083c565765256315283" + }, + "cpython-3.10.9-windows-i686": { + "name": "cpython", + "arch": "i686", + "os": "windows", + "major": 3, + "minor": 10, + "patch": 9, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20230116/cpython-3.10.9%2B20230116-i686-pc-windows-msvc-shared-pgo-full.tar.zst", + "sha256": "3d79cfd229ec12b678bbfd79c30fb4cbad9950d6bfb29741d2315b11839998b4" + }, + "cpython-3.10.9-darwin-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "darwin", + "major": 3, + "minor": 10, + "patch": 9, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20230116/cpython-3.10.9%2B20230116-x86_64-apple-darwin-pgo%2Blto-full.tar.zst", + "sha256": "1153b4d3b03cf1e1d8ec93c098160586f665fcc2d162c0812140a716a688df58" + }, + "cpython-3.10.9-linux-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "linux", + "major": 3, + "minor": 10, + "patch": 9, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20230116/cpython-3.10.9%2B20230116-x86_64-unknown-linux-gnu-pgo%2Blto-full.tar.zst", + "sha256": "c5f7ad956c8870573763ed58b59d7f145830a93378234b815c068c893c0d5c1e" + }, + "cpython-3.10.9-windows-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "windows", + "major": 3, + "minor": 10, + "patch": 9, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20230116/cpython-3.10.9%2B20230116-x86_64-pc-windows-msvc-shared-pgo-full.tar.zst", + "sha256": "4cfa6299a78a3959102c461d126e4869616f0a49c60b44220c000fc9aecddd78" + }, + "cpython-3.10.9-linux-x86_64_v2": { + "name": "cpython", + "arch": "x86_64_v2", + "os": "linux", + "major": 3, + "minor": 10, + "patch": 9, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20230116/cpython-3.10.9%2B20230116-x86_64_v2-unknown-linux-gnu-pgo%2Blto-full.tar.zst", + "sha256": "49f4a8c02efff2debbb258973b1f6efbd568e4be2e5dca07c7dcd754a7bff9cf" + }, + "cpython-3.10.9-linux-x86_64_v3": { + "name": "cpython", + "arch": "x86_64_v3", + "os": "linux", + "major": 3, + "minor": 10, + "patch": 9, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20230116/cpython-3.10.9%2B20230116-x86_64_v3-unknown-linux-gnu-pgo%2Blto-full.tar.zst", + "sha256": "366bdd71ae4a8cdd86060a8e44ccd7f30d5f72864c88204bf3acf5aecfe748ef" + }, + "cpython-3.10.9-linux-x86_64_v4": { + "name": "cpython", + "arch": "x86_64_v4", + "os": "linux", + "major": 3, + "minor": 10, + "patch": 9, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20230116/cpython-3.10.9%2B20230116-x86_64_v4-unknown-linux-gnu-lto-full.tar.zst", + "sha256": "1960c5a6fe7d351dacc9e133494789c575e47210e569254b9d8128a8ce6f8931" + }, + "cpython-3.10.8-darwin-arm64": { + "name": "cpython", + "arch": "arm64", + "os": "darwin", + "major": 3, + "minor": 10, + "patch": 8, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20221106/cpython-3.10.8%2B20221106-aarch64-apple-darwin-pgo%2Blto-full.tar.zst", + "sha256": "f8ba5f87153a17717e900ff7bba20e2eefe8a53a5bd3c78f9f6922d6d910912d" + }, + "cpython-3.10.8-linux-arm64": { + "name": "cpython", + "arch": "arm64", + "os": "linux", + "major": 3, + "minor": 10, + "patch": 8, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20221106/cpython-3.10.8%2B20221106-aarch64-unknown-linux-gnu-lto-full.tar.zst", + "sha256": "5710521ca6958dd2e50f30f2b1591eb7f6a4c55a64c9b66d3196f8257f40bc96" + }, + "cpython-3.10.8-linux-i686": { + "name": "cpython", + "arch": "i686", + "os": "linux", + "major": 3, + "minor": 10, + "patch": 8, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20221106/cpython-3.10.8%2B20221106-i686-unknown-linux-gnu-pgo%2Blto-full.tar.zst", + "sha256": "0ab3156bbdc87db8a9b938662a76bb405522b408b1f94d8eb20759f277f96cd8" + }, + "cpython-3.10.8-windows-i686": { + "name": "cpython", + "arch": "i686", + "os": "windows", + "major": 3, + "minor": 10, + "patch": 8, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20221106/cpython-3.10.8%2B20221106-i686-pc-windows-msvc-shared-pgo-full.tar.zst", + "sha256": "7547ea172f7fa3d7619855f28780da9feb615b6cb52c5c64d34f65b542799fee" + }, + "cpython-3.10.8-darwin-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "darwin", + "major": 3, + "minor": 10, + "patch": 8, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20221106/cpython-3.10.8%2B20221106-x86_64-apple-darwin-pgo%2Blto-full.tar.zst", + "sha256": "a18f81ecc7da0779be960ad35c561a834866c0e6d1310a4f742fddfd6163753f" + }, + "cpython-3.10.8-linux-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "linux", + "major": 3, + "minor": 10, + "patch": 8, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20221106/cpython-3.10.8%2B20221106-x86_64-unknown-linux-gnu-pgo%2Blto-full.tar.zst", + "sha256": "59630be21c77f87b4378f0cf887cbeb6bec64c988c93f3dc795afee782a3322e" + }, + "cpython-3.10.8-windows-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "windows", + "major": 3, + "minor": 10, + "patch": 8, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20221106/cpython-3.10.8%2B20221106-x86_64-pc-windows-msvc-shared-pgo-full.tar.zst", + "sha256": "ab40f9584be896c697c5fca351ab82d7b55f01b8eb0494f0a15a67562e49161a" + }, + "cpython-3.10.8-linux-x86_64_v2": { + "name": "cpython", + "arch": "x86_64_v2", + "os": "linux", + "major": 3, + "minor": 10, + "patch": 8, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20221106/cpython-3.10.8%2B20221106-x86_64_v2-unknown-linux-gnu-pgo%2Blto-full.tar.zst", + "sha256": "9e15b5a26c076a8f157e7077f4179d31c1eb6a5c58385b1a0ed9314f267c6acc" + }, + "cpython-3.10.8-linux-x86_64_v3": { + "name": "cpython", + "arch": "x86_64_v3", + "os": "linux", + "major": 3, + "minor": 10, + "patch": 8, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20221106/cpython-3.10.8%2B20221106-x86_64_v3-unknown-linux-gnu-pgo%2Blto-full.tar.zst", + "sha256": "74a4623b1d90e1ca661384442488fbed2cbb59cba9a891ff2f2fc2cdfeb423a9" + }, + "cpython-3.10.8-linux-x86_64_v4": { + "name": "cpython", + "arch": "x86_64_v4", + "os": "linux", + "major": 3, + "minor": 10, + "patch": 8, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20221106/cpython-3.10.8%2B20221106-x86_64_v4-unknown-linux-gnu-lto-full.tar.zst", + "sha256": "85c9504ee008c40f0a01a4e11a4ada6d2e4b1ac8f483068417b84c8a11bfefad" + }, + "cpython-3.10.7-darwin-arm64": { + "name": "cpython", + "arch": "arm64", + "os": "darwin", + "major": 3, + "minor": 10, + "patch": 7, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20221002/cpython-3.10.7%2B20221002-aarch64-apple-darwin-pgo%2Blto-full.tar.zst", + "sha256": "9f44cf63441a90f4ec99a032a2bda43971ae7964822daa0ee730a9cba15d50da" + }, + "cpython-3.10.7-linux-arm64": { + "name": "cpython", + "arch": "arm64", + "os": "linux", + "major": 3, + "minor": 10, + "patch": 7, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20221002/cpython-3.10.7%2B20221002-aarch64-unknown-linux-gnu-lto-full.tar.zst", + "sha256": "f92fb53661f2ceddeb7b15ae1f165671acf4e4d4f9519a87e033981b93ee33b8" + }, + "cpython-3.10.7-linux-i686": { + "name": "cpython", + "arch": "i686", + "os": "linux", + "major": 3, + "minor": 10, + "patch": 7, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20221002/cpython-3.10.7%2B20221002-i686-unknown-linux-gnu-pgo%2Blto-full.tar.zst", + "sha256": "c379f2ef58c8d83f1607357ad75e860770d748232a4eec4263564cbfa6a3efbb" + }, + "cpython-3.10.7-windows-i686": { + "name": "cpython", + "arch": "i686", + "os": "windows", + "major": 3, + "minor": 10, + "patch": 7, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20221002/cpython-3.10.7%2B20221002-i686-pc-windows-msvc-shared-pgo-full.tar.zst", + "sha256": "323532701cb468199d6f14031b991f945d4bbf986ca818185e17e132d3763bdf" + }, + "cpython-3.10.7-darwin-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "darwin", + "major": 3, + "minor": 10, + "patch": 7, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20221002/cpython-3.10.7%2B20221002-x86_64-apple-darwin-pgo%2Blto-full.tar.zst", + "sha256": "e03e28dc9fe55ea5ca06fece8f2f2a16646b217d28c0cd09ebcd512f444fdc90" + }, + "cpython-3.10.7-linux-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "linux", + "major": 3, + "minor": 10, + "patch": 7, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20221002/cpython-3.10.7%2B20221002-x86_64-unknown-linux-gnu-pgo%2Blto-full.tar.zst", + "sha256": "22e59fa43657dc3487392a44a33a815d507cdd244b6609b6ad08f2661c34169c" + }, + "cpython-3.10.7-windows-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "windows", + "major": 3, + "minor": 10, + "patch": 7, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20221002/cpython-3.10.7%2B20221002-x86_64-pc-windows-msvc-shared-pgo-full.tar.zst", + "sha256": "5363974e6ee6c91dbd6bc3533e38b02a26abc2ff1c9a095912f237b916be22d3" + }, + "cpython-3.10.7-linux-x86_64_v2": { + "name": "cpython", + "arch": "x86_64_v2", + "os": "linux", + "major": 3, + "minor": 10, + "patch": 7, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20221002/cpython-3.10.7%2B20221002-x86_64_v2-unknown-linux-gnu-pgo%2Blto-full.tar.zst", + "sha256": "c64eee679f3bd2b3f952020a516fa17d5cb42a645784762a3fdd623ad89791c9" + }, + "cpython-3.10.7-linux-x86_64_v3": { + "name": "cpython", + "arch": "x86_64_v3", + "os": "linux", + "major": 3, + "minor": 10, + "patch": 7, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20221002/cpython-3.10.7%2B20221002-x86_64_v3-unknown-linux-gnu-pgo%2Blto-full.tar.zst", + "sha256": "c54217b3df5f398e52e26e16683f642b245e36232d190ee9fec45a04923de9ca" + }, + "cpython-3.10.7-linux-x86_64_v4": { + "name": "cpython", + "arch": "x86_64_v4", + "os": "linux", + "major": 3, + "minor": 10, + "patch": 7, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20221002/cpython-3.10.7%2B20221002-x86_64_v4-unknown-linux-gnu-lto-full.tar.zst", + "sha256": "3a42f3e79715b8c89484cbf753dc769598d3683ebee5618beb81c55a70f23b6f" + }, + "cpython-3.10.6-darwin-arm64": { + "name": "cpython", + "arch": "arm64", + "os": "darwin", + "major": 3, + "minor": 10, + "patch": 6, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20220802/cpython-3.10.6%2B20220802-aarch64-apple-darwin-pgo%2Blto-full.tar.zst", + "sha256": "159230851a69cf5cab80318bce48674244d7c6304de81f44c22ff0abdf895cfa" + }, + "cpython-3.10.6-linux-arm64": { + "name": "cpython", + "arch": "arm64", + "os": "linux", + "major": 3, + "minor": 10, + "patch": 6, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20220802/cpython-3.10.6%2B20220802-aarch64-unknown-linux-gnu-lto-full.tar.zst", + "sha256": "6606be4283ebcfe2d83b49b05f6d06b958fe120a4d96c1eeeb072369db06b827" + }, + "cpython-3.10.6-linux-i686": { + "name": "cpython", + "arch": "i686", + "os": "linux", + "major": 3, + "minor": 10, + "patch": 6, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20220802/cpython-3.10.6%2B20220802-i686-unknown-linux-gnu-pgo%2Blto-full.tar.zst", + "sha256": "213374fd9845df5c1d3f1d2f5ac2610fe70ddba094aee0cbc2e91fd2dc808de2" + }, + "cpython-3.10.6-windows-i686": { + "name": "cpython", + "arch": "i686", + "os": "windows", + "major": 3, + "minor": 10, + "patch": 6, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20220802/cpython-3.10.6%2B20220802-i686-pc-windows-msvc-shared-pgo-full.tar.zst", + "sha256": "8d9a259e15d5a1be48ef13cd5627d7f6c15eadf41a3539e99ed1deee668c075e" + }, + "cpython-3.10.6-darwin-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "darwin", + "major": 3, + "minor": 10, + "patch": 6, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20220802/cpython-3.10.6%2B20220802-x86_64-apple-darwin-pgo%2Blto-full.tar.zst", + "sha256": "9405499573a7aa8b67d070d096ded4f3e571f18c2b34762606ecc8025290b122" + }, + "cpython-3.10.6-linux-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "linux", + "major": 3, + "minor": 10, + "patch": 6, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20220802/cpython-3.10.6%2B20220802-x86_64-unknown-linux-gnu-pgo%2Blto-full.tar.zst", + "sha256": "8072f01279e05bad7c8d1076715db243489d1c2598f7b7d0457d0cac44fcb8b2" + }, + "cpython-3.10.6-windows-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "windows", + "major": 3, + "minor": 10, + "patch": 6, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20220802/cpython-3.10.6%2B20220802-x86_64-pc-windows-msvc-shared-pgo-full.tar.zst", + "sha256": "01dc349721594b1bb5b582651f81479a24352f718fdf6279101caa0f377b160a" + }, + "cpython-3.10.6-linux-x86_64_v2": { + "name": "cpython", + "arch": "x86_64_v2", + "os": "linux", + "major": 3, + "minor": 10, + "patch": 6, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20220802/cpython-3.10.6%2B20220802-x86_64_v2-unknown-linux-gnu-pgo%2Blto-full.tar.zst", + "sha256": "948c79667c6af3f4f859feca539cad9f940d484792edac6b30e4e1d6b022fa96" + }, + "cpython-3.10.6-linux-x86_64_v3": { + "name": "cpython", + "arch": "x86_64_v3", + "os": "linux", + "major": 3, + "minor": 10, + "patch": 6, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20220802/cpython-3.10.6%2B20220802-x86_64_v3-unknown-linux-gnu-pgo%2Blto-full.tar.zst", + "sha256": "17f6cf57a42eb8fa4619e268cac77ca1e4aef96a294efa0bdf91ab067c055d8e" + }, + "cpython-3.10.6-linux-x86_64_v4": { + "name": "cpython", + "arch": "x86_64_v4", + "os": "linux", + "major": 3, + "minor": 10, + "patch": 6, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20220802/cpython-3.10.6%2B20220802-x86_64_v4-unknown-linux-gnu-lto-full.tar.zst", + "sha256": "cc554275377d0b55f43162d52752087180a51d5063e720fc7671c867442706b3" + }, + "cpython-3.10.5-darwin-arm64": { + "name": "cpython", + "arch": "arm64", + "os": "darwin", + "major": 3, + "minor": 10, + "patch": 5, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20220630/cpython-3.10.5%2B20220630-aarch64-apple-darwin-pgo%2Blto-full.tar.zst", + "sha256": "f68d25dbe9daa96187fa9e05dd8969f46685547fecf1861a99af898f96a5379e" + }, + "cpython-3.10.5-linux-arm64": { + "name": "cpython", + "arch": "arm64", + "os": "linux", + "major": 3, + "minor": 10, + "patch": 5, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20220630/cpython-3.10.5%2B20220630-aarch64-unknown-linux-gnu-lto-full.tar.zst", + "sha256": "6e5e1050549c1aa629924b1b6a3080655d9e110f88dfa734d9b1c98af924cc7d" + }, + "cpython-3.10.5-linux-i686": { + "name": "cpython", + "arch": "i686", + "os": "linux", + "major": 3, + "minor": 10, + "patch": 5, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20220630/cpython-3.10.5%2B20220630-i686-unknown-linux-gnu-pgo%2Blto-full.tar.zst", + "sha256": "dea116554852261e4a9e79c8926a0e4ac483f9e624084ded73b30705e221b62d" + }, + "cpython-3.10.5-windows-i686": { + "name": "cpython", + "arch": "i686", + "os": "windows", + "major": 3, + "minor": 10, + "patch": 5, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20220630/cpython-3.10.5%2B20220630-i686-pc-windows-msvc-shared-pgo-full.tar.zst", + "sha256": "e201192f0aa73904bc5a5f43d1ce4c9fb243dfe02138e690676713fe02c7d662" + }, + "cpython-3.10.5-darwin-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "darwin", + "major": 3, + "minor": 10, + "patch": 5, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20220630/cpython-3.10.5%2B20220630-x86_64-apple-darwin-pgo%2Blto-full.tar.zst", + "sha256": "5e372e6738a733532aa985730d9a47ee4c77b7c706e91ef61d37aacbb2e54845" + }, + "cpython-3.10.5-linux-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "linux", + "major": 3, + "minor": 10, + "patch": 5, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20220630/cpython-3.10.5%2B20220630-x86_64-unknown-linux-gnu-pgo%2Blto-full.tar.zst", + "sha256": "2a71e32ef8e1bbffbbfcd1825620d6a8944f97e76851bf1a14dc4fa48b626db8" + }, + "cpython-3.10.5-windows-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "windows", + "major": 3, + "minor": 10, + "patch": 5, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20220630/cpython-3.10.5%2B20220630-x86_64-pc-windows-msvc-shared-pgo-full.tar.zst", + "sha256": "cff35feefe423d4282e9a3e1bb756d0acbb2f776b1ada82c44c71ac3e1491448" + }, + "cpython-3.10.5-linux-x86_64_v2": { + "name": "cpython", + "arch": "x86_64_v2", + "os": "linux", + "major": 3, + "minor": 10, + "patch": 5, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20220630/cpython-3.10.5%2B20220630-x86_64_v2-unknown-linux-gnu-pgo%2Blto-full.tar.zst", + "sha256": "ede8d575d06ec7256756220fd7195cd7c6026e1f563e07062238e692e6f1f1c5" + }, + "cpython-3.10.5-linux-x86_64_v3": { + "name": "cpython", + "arch": "x86_64_v3", + "os": "linux", + "major": 3, + "minor": 10, + "patch": 5, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20220630/cpython-3.10.5%2B20220630-x86_64_v3-unknown-linux-gnu-pgo%2Blto-full.tar.zst", + "sha256": "2b1374df2117b3fe774d3ee8a4ca73878ea19328d8b190e12adbe5d185aef5ea" + }, + "cpython-3.10.5-linux-x86_64_v4": { + "name": "cpython", + "arch": "x86_64_v4", + "os": "linux", + "major": 3, + "minor": 10, + "patch": 5, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20220630/cpython-3.10.5%2B20220630-x86_64_v4-unknown-linux-gnu-lto-full.tar.zst", + "sha256": "0df06da66b1fbff38e0ea4e3e55d7929a368132fb105d21bd57474abe9c9160e" + }, + "cpython-3.10.4-darwin-arm64": { + "name": "cpython", + "arch": "arm64", + "os": "darwin", + "major": 3, + "minor": 10, + "patch": 4, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20220528/cpython-3.10.4%2B20220528-aarch64-apple-darwin-pgo%2Blto-full.tar.zst", + "sha256": "c404f226195d79933b1e0a3ec88f0b79d35c873de592e223e11008f3a37f83d6" + }, + "cpython-3.10.4-linux-arm64": { + "name": "cpython", + "arch": "arm64", + "os": "linux", + "major": 3, + "minor": 10, + "patch": 4, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20220528/cpython-3.10.4%2B20220528-aarch64-unknown-linux-gnu-lto-full.tar.zst", + "sha256": "5d2ccef5a45d2287d73a6ff63a466b21a197beb373792e644b8881bce3b6aa55" + }, + "cpython-3.10.4-linux-i686": { + "name": "cpython", + "arch": "i686", + "os": "linux", + "major": 3, + "minor": 10, + "patch": 4, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20220528/cpython-3.10.4%2B20220528-i686-unknown-linux-gnu-pgo%2Blto-full.tar.zst", + "sha256": "b28224a798dea965cb090f831d31aa531c6b9a14028344be6df53ab426497bb4" + }, + "cpython-3.10.4-windows-i686": { + "name": "cpython", + "arch": "i686", + "os": "windows", + "major": 3, + "minor": 10, + "patch": 4, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20220528/cpython-3.10.4%2B20220528-i686-pc-windows-msvc-shared-pgo-full.tar.zst", + "sha256": "c37a47e46de93473916f700a790cb43515f00745fba6790004e2731ec934f4d3" + }, + "cpython-3.10.4-darwin-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "darwin", + "major": 3, + "minor": 10, + "patch": 4, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20220528/cpython-3.10.4%2B20220528-x86_64-apple-darwin-pgo%2Blto-full.tar.zst", + "sha256": "e447f00fe53168d18cbfe110645dbf33982a17580b9e4424a411f9245d99cd21" + }, + "cpython-3.10.4-linux-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "linux", + "major": 3, + "minor": 10, + "patch": 4, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20220528/cpython-3.10.4%2B20220528-x86_64-unknown-linux-gnu-pgo%2Blto-full.tar.zst", + "sha256": "15f961b087c6145f326fee30041db4af3ce0a8d24bbdefbd8d24973825728a0e" + }, + "cpython-3.10.4-windows-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "windows", + "major": 3, + "minor": 10, + "patch": 4, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20220528/cpython-3.10.4%2B20220528-x86_64-pc-windows-msvc-shared-pgo-full.tar.zst", + "sha256": "d636dc1bcca74dd9c6e3b26f7c081b3e229336e8378fe554bf8ba65fe780a2ac" + }, + "cpython-3.10.4-linux-x86_64_v2": { + "name": "cpython", + "arch": "x86_64_v2", + "os": "linux", + "major": 3, + "minor": 10, + "patch": 4, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20220528/cpython-3.10.4%2B20220528-x86_64_v2-unknown-linux-gnu-pgo%2Blto-full.tar.zst", + "sha256": "7f93c009038a195e9e5c22dfb42d6c8bb62438438d5c5cfb3d64bb3f0066d88f" + }, + "cpython-3.10.4-linux-x86_64_v3": { + "name": "cpython", + "arch": "x86_64_v3", + "os": "linux", + "major": 3, + "minor": 10, + "patch": 4, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20220528/cpython-3.10.4%2B20220528-x86_64_v3-unknown-linux-gnu-pgo%2Blto-full.tar.zst", + "sha256": "afd3e5ca794e3297807391610ce4011e459bafad5296b87156cc8b316a23d1c1" + }, + "cpython-3.10.4-linux-x86_64_v4": { + "name": "cpython", + "arch": "x86_64_v4", + "os": "linux", + "major": 3, + "minor": 10, + "patch": 4, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20220528/cpython-3.10.4%2B20220528-x86_64_v4-unknown-linux-gnu-lto-full.tar.zst", + "sha256": "bafc29f780ce8c50d6881e2f8f9dbc3be7896b2dd98c7056cbc6072aa47fdb39" + }, + "cpython-3.10.3-darwin-arm64": { + "name": "cpython", + "arch": "arm64", + "os": "darwin", + "major": 3, + "minor": 10, + "patch": 3, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20220318/cpython-3.10.3%2B20220318-aarch64-apple-darwin-pgo%2Blto-full.tar.zst", + "sha256": "b1abefd0fc66922cf9749e4d5ceb97df4d3cfad0cd9cdc4bd04262a68d565698" + }, + "cpython-3.10.3-linux-arm64": { + "name": "cpython", + "arch": "arm64", + "os": "linux", + "major": 3, + "minor": 10, + "patch": 3, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20220318/cpython-3.10.3%2B20220318-aarch64-unknown-linux-gnu-lto-full.tar.zst", + "sha256": "88d2bfc8b714b9e36e95e68129799527077827dd752357934f9d3d0ce756871e" + }, + "cpython-3.10.3-linux-i686": { + "name": "cpython", + "arch": "i686", + "os": "linux", + "major": 3, + "minor": 10, + "patch": 3, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20220318/cpython-3.10.3%2B20220318-i686-unknown-linux-gnu-pgo%2Blto-full.tar.zst", + "sha256": "ea82b0b12e03fdc461c2337e59cb901ecc763194588db5a97372d26f242f4951" + }, + "cpython-3.10.3-windows-i686": { + "name": "cpython", + "arch": "i686", + "os": "windows", + "major": 3, + "minor": 10, + "patch": 3, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20220318/cpython-3.10.3%2B20220318-i686-pc-windows-msvc-shared-pgo-full.tar.zst", + "sha256": "fbc0924a138937fe435fcdb20b0c6241290558e07f158e5578bd91cc8acef469" + }, + "cpython-3.10.3-darwin-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "darwin", + "major": 3, + "minor": 10, + "patch": 3, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20220318/cpython-3.10.3%2B20220318-x86_64-apple-darwin-pgo%2Blto-full.tar.zst", + "sha256": "bc5d6f284b506104ff6b4e36cec84cbdb4602dfed4c6fe19971a808eb8c439ec" + }, + "cpython-3.10.3-linux-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "linux", + "major": 3, + "minor": 10, + "patch": 3, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20220318/cpython-3.10.3%2B20220318-x86_64-unknown-linux-gnu-pgo%2Blto-full.tar.zst", + "sha256": "ee2251d5e59045c6fa1d4431c8a5cd0ed18923a785e7e0f47aa9d32ae0ca344e" + }, + "cpython-3.10.3-windows-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "windows", + "major": 3, + "minor": 10, + "patch": 3, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20220318/cpython-3.10.3%2B20220318-x86_64-pc-windows-msvc-shared-pgo-full.tar.zst", + "sha256": "72b91d26f54321ba90a86a3bbc711fa1ac31e0704fec352b36e70b0251ffb13c" + }, + "cpython-3.10.3-linux-x86_64_v2": { + "name": "cpython", + "arch": "x86_64_v2", + "os": "linux", + "major": 3, + "minor": 10, + "patch": 3, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20220318/cpython-3.10.3%2B20220318-x86_64_v2-unknown-linux-gnu-pgo%2Blto-full.tar.zst", + "sha256": "aac77225a0530ec6d8c5d1c6ed04d44e0a3f2173bddc3d871c595d2b82912178" + }, + "cpython-3.10.3-linux-x86_64_v3": { + "name": "cpython", + "arch": "x86_64_v3", + "os": "linux", + "major": 3, + "minor": 10, + "patch": 3, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20220318/cpython-3.10.3%2B20220318-x86_64_v3-unknown-linux-gnu-pgo%2Blto-full.tar.zst", + "sha256": "e2ba74badcc2651e65ea6adbd12699e8aced8250b5723408756266558b9bc000" + }, + "cpython-3.10.3-linux-x86_64_v4": { + "name": "cpython", + "arch": "x86_64_v4", + "os": "linux", + "major": 3, + "minor": 10, + "patch": 3, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20220318/cpython-3.10.3%2B20220318-x86_64_v4-unknown-linux-gnu-lto-full.tar.zst", + "sha256": "88a55ea1ac274efdc13cd059f2176e0c697bb7271cf7f22019aca59f63a5ca65" + }, + "cpython-3.10.2-darwin-arm64": { + "name": "cpython", + "arch": "arm64", + "os": "darwin", + "major": 3, + "minor": 10, + "patch": 2, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20220227/cpython-3.10.2%2B20220227-aarch64-apple-darwin-pgo%2Blto-full.tar.zst", + "sha256": "1ef939fd471a9d346a7bc43d2c16fb483ddc4f98af6dad7f08a009e299977a1a" + }, + "cpython-3.10.2-linux-arm64": { + "name": "cpython", + "arch": "arm64", + "os": "linux", + "major": 3, + "minor": 10, + "patch": 2, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20220227/cpython-3.10.2%2B20220227-aarch64-unknown-linux-gnu-lto-full.tar.zst", + "sha256": "fb714771145a49482a113f532e4cbc21d601cf0dee4186a57fbc66ddd8d85aef" + }, + "cpython-3.10.2-linux-i686": { + "name": "cpython", + "arch": "i686", + "os": "linux", + "major": 3, + "minor": 10, + "patch": 2, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20220227/cpython-3.10.2%2B20220227-i686-unknown-linux-gnu-pgo%2Blto-full.tar.zst", + "sha256": "817cc2720c9c67cf87e5c0e41e44111098ceb6372d8140c8adbdd2f0397f1e02" + }, + "cpython-3.10.2-windows-i686": { + "name": "cpython", + "arch": "i686", + "os": "windows", + "major": 3, + "minor": 10, + "patch": 2, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20220227/cpython-3.10.2%2B20220227-i686-pc-windows-msvc-shared-pgo-full.tar.zst", + "sha256": "698b09b1b8321a4dc43d62f6230b62adcd0df018b2bcf5f1b4a7ce53dcf23bcc" + }, + "cpython-3.10.2-darwin-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "darwin", + "major": 3, + "minor": 10, + "patch": 2, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20220227/cpython-3.10.2%2B20220227-x86_64-apple-darwin-pgo%2Blto-full.tar.zst", + "sha256": "bacf720c13ab67685a384f1417e9c2420972d88f29c8b7c26e72874177f2d120" + }, + "cpython-3.10.2-linux-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "linux", + "major": 3, + "minor": 10, + "patch": 2, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20220227/cpython-3.10.2%2B20220227-x86_64-unknown-linux-gnu-pgo%2Blto-full.tar.zst", + "sha256": "65d2a31c3181ab15342e60a2ef92d6a0df6945200191115d0303d6e77428521c" + }, + "cpython-3.10.2-windows-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "windows", + "major": 3, + "minor": 10, + "patch": 2, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20220227/cpython-3.10.2%2B20220227-x86_64-pc-windows-msvc-shared-pgo-full.tar.zst", + "sha256": "7397e78a4fbe429144adc1f33af942bdd5175184e082ac88f3023b3a740dd1a0" + }, + "cpython-3.10.2-linux-x86_64_v2": { + "name": "cpython", + "arch": "x86_64_v2", + "os": "linux", + "major": 3, + "minor": 10, + "patch": 2, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20220227/cpython-3.10.2%2B20220227-x86_64_v2-unknown-linux-gnu-pgo%2Blto-full.tar.zst", + "sha256": "73854deefa02896c3c30dfd8ebbff384561fe28c5b0d8d0a60f5c3543ea16ed0" + }, + "cpython-3.10.2-linux-x86_64_v3": { + "name": "cpython", + "arch": "x86_64_v3", + "os": "linux", + "major": 3, + "minor": 10, + "patch": 2, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20220227/cpython-3.10.2%2B20220227-x86_64_v3-unknown-linux-gnu-pgo%2Blto-full.tar.zst", + "sha256": "f6a8c8fd758006fcdf91f81c4b753bcaaddb436d44c6a38df04a9f6d48b6bb38" + }, + "cpython-3.10.2-linux-x86_64_v4": { + "name": "cpython", + "arch": "x86_64_v4", + "os": "linux", + "major": 3, + "minor": 10, + "patch": 2, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20220227/cpython-3.10.2%2B20220227-x86_64_v4-unknown-linux-gnu-lto-full.tar.zst", + "sha256": "16987dd579183ca538ae6cc7928cbe3165fd0fd401d822bda5c8d5ea27ce428b" + }, + "cpython-3.10.0-darwin-arm64": { + "name": "cpython", + "arch": "arm64", + "os": "darwin", + "major": 3, + "minor": 10, + "patch": 0, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20211017/cpython-3.10.0-aarch64-apple-darwin-pgo%2Blto-20211017T1616.tar.zst", + "sha256": null + }, + "cpython-3.10.0-linux-arm64": { + "name": "cpython", + "arch": "arm64", + "os": "linux", + "major": 3, + "minor": 10, + "patch": 0, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20211017/cpython-3.10.0-aarch64-unknown-linux-gnu-lto-20211017T1616.tar.zst", + "sha256": null + }, + "cpython-3.10.0-linux-i686": { + "name": "cpython", + "arch": "i686", + "os": "linux", + "major": 3, + "minor": 10, + "patch": 0, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20211017/cpython-3.10.0-i686-unknown-linux-gnu-pgo%2Blto-20211017T1616.tar.zst", + "sha256": null + }, + "cpython-3.10.0-windows-i686": { + "name": "cpython", + "arch": "i686", + "os": "windows", + "major": 3, + "minor": 10, + "patch": 0, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20211017/cpython-3.10.0-i686-pc-windows-msvc-shared-pgo-20211017T1616.tar.zst", + "sha256": null + }, + "cpython-3.10.0-darwin-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "darwin", + "major": 3, + "minor": 10, + "patch": 0, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20211017/cpython-3.10.0-x86_64-apple-darwin-pgo%2Blto-20211017T1616.tar.zst", + "sha256": null + }, + "cpython-3.10.0-linux-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "linux", + "major": 3, + "minor": 10, + "patch": 0, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20211017/cpython-3.10.0-x86_64-unknown-linux-gnu-pgo%2Blto-20211017T1616.tar.zst", + "sha256": null + }, + "cpython-3.10.0-windows-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "windows", + "major": 3, + "minor": 10, + "patch": 0, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20211017/cpython-3.10.0-x86_64-pc-windows-msvc-shared-pgo-20211017T1616.tar.zst", + "sha256": null + }, + "cpython-3.9.18-darwin-arm64": { + "name": "cpython", + "arch": "arm64", + "os": "darwin", + "major": 3, + "minor": 9, + "patch": 18, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20240107/cpython-3.9.18%2B20240107-aarch64-apple-darwin-pgo%2Blto-full.tar.zst", + "sha256": "b7d31a15f7af359c59b01ed9c8accb4b6bdd1237b910699e6b2d14df8e2c1cdc" + }, + "cpython-3.9.18-linux-arm64": { + "name": "cpython", + "arch": "arm64", + "os": "linux", + "major": 3, + "minor": 9, + "patch": 18, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20240107/cpython-3.9.18%2B20240107-aarch64-unknown-linux-gnu-lto-full.tar.zst", + "sha256": "e8938f26837a5654a4ceec1e5385d49f4c56af7fa86255fede416980bd28a34f" + }, + "cpython-3.9.18-linux-i686": { + "name": "cpython", + "arch": "i686", + "os": "linux", + "major": 3, + "minor": 9, + "patch": 18, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20230826/cpython-3.9.18%2B20230826-i686-unknown-linux-gnu-pgo%2Blto-full.tar.zst", + "sha256": "9e40a541b4eb6eb0a5e2f35724a18332aea91c61e18dec77ca40da5cf2496839" + }, + "cpython-3.9.18-windows-i686": { + "name": "cpython", + "arch": "i686", + "os": "windows", + "major": 3, + "minor": 9, + "patch": 18, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20240107/cpython-3.9.18%2B20240107-i686-pc-windows-msvc-shared-pgo-full.tar.zst", + "sha256": "063c531d3c65f49212c9644ab0f00360a65d7c45bc1e6f78174685e2c165b260" + }, + "cpython-3.9.18-linux-ppc64le": { + "name": "cpython", + "arch": "ppc64le", + "os": "linux", + "major": 3, + "minor": 9, + "patch": 18, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20240107/cpython-3.9.18%2B20240107-ppc64le-unknown-linux-gnu-lto-full.tar.zst", + "sha256": "52b37a2977a15ae5dbce77bd0c3ac45fe18ebafcc35b10b3f6d97ff58e841827" + }, + "cpython-3.9.18-linux-s390x": { + "name": "cpython", + "arch": "s390x", + "os": "linux", + "major": 3, + "minor": 9, + "patch": 18, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20240107/cpython-3.9.18%2B20240107-s390x-unknown-linux-gnu-lto-full.tar.zst", + "sha256": "691470ca8a6a7f2b13e503153c499571f3ee3e5201d536bd071a36b30d32a68b" + }, + "cpython-3.9.18-darwin-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "darwin", + "major": 3, + "minor": 9, + "patch": 18, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20240107/cpython-3.9.18%2B20240107-x86_64-apple-darwin-pgo%2Blto-full.tar.zst", + "sha256": "aa2e549186ab9f831169ccc32965c81ba0fa62e471129f51988f40eaa9552309" + }, + "cpython-3.9.18-linux-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "linux", + "major": 3, + "minor": 9, + "patch": 18, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20240107/cpython-3.9.18%2B20240107-x86_64-unknown-linux-gnu-pgo%2Blto-full.tar.zst", + "sha256": "2cc59d95934240859e2c67fce02018d00882deb860cabbc3162501f7adfdf16f" + }, + "cpython-3.9.18-windows-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "windows", + "major": 3, + "minor": 9, + "patch": 18, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20240107/cpython-3.9.18%2B20240107-x86_64-pc-windows-msvc-shared-pgo-full.tar.zst", + "sha256": "3b9c7d6ed94260b83ed8f44ee9a7b8fce392259ce6591e538601f7353061a884" + }, + "cpython-3.9.18-linux-x86_64_v2": { + "name": "cpython", + "arch": "x86_64_v2", + "os": "linux", + "major": 3, + "minor": 9, + "patch": 18, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20240107/cpython-3.9.18%2B20240107-x86_64_v2-unknown-linux-gnu-pgo%2Blto-full.tar.zst", + "sha256": "8c10de7b0c47031ac124201bb77be4e1a5f763f9285633c857b096511a050d9d" + }, + "cpython-3.9.18-linux-x86_64_v3": { + "name": "cpython", + "arch": "x86_64_v3", + "os": "linux", + "major": 3, + "minor": 9, + "patch": 18, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20240107/cpython-3.9.18%2B20240107-x86_64_v3-unknown-linux-gnu-pgo%2Blto-full.tar.zst", + "sha256": "5beaec009e95a6cf1daf4197caebacd86cb7be3e524b528ac4efd3fc583467c8" + }, + "cpython-3.9.18-linux-x86_64_v4": { + "name": "cpython", + "arch": "x86_64_v4", + "os": "linux", + "major": 3, + "minor": 9, + "patch": 18, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20240107/cpython-3.9.18%2B20240107-x86_64_v4-unknown-linux-gnu-lto-full.tar.zst", + "sha256": "348f32e3b453efbdb3dc6c39508d84bd8cddb9cad26433bccb22b5cae4b4cc0c" + }, + "cpython-3.9.17-darwin-arm64": { + "name": "cpython", + "arch": "arm64", + "os": "darwin", + "major": 3, + "minor": 9, + "patch": 17, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20230726/cpython-3.9.17%2B20230726-aarch64-apple-darwin-pgo%2Blto-full.tar.zst", + "sha256": "2902e2a0add6d584999fa27896b721a359f7308404e936e80b01b07aa06e8f5e" + }, + "cpython-3.9.17-linux-arm64": { + "name": "cpython", + "arch": "arm64", + "os": "linux", + "major": 3, + "minor": 9, + "patch": 17, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20230726/cpython-3.9.17%2B20230726-aarch64-unknown-linux-gnu-lto-full.tar.zst", + "sha256": "de2eab48ca487550258db38b38cb9372143283f757b3cf9ec522eb657e41a035" + }, + "cpython-3.9.17-linux-i686": { + "name": "cpython", + "arch": "i686", + "os": "linux", + "major": 3, + "minor": 9, + "patch": 17, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20230726/cpython-3.9.17%2B20230726-i686-unknown-linux-gnu-pgo%2Blto-full.tar.zst", + "sha256": "9984f59284048608f6734b032ff76e6bc3cb208e2235fdb511b0e478158fdb2b" + }, + "cpython-3.9.17-windows-i686": { + "name": "cpython", + "arch": "i686", + "os": "windows", + "major": 3, + "minor": 9, + "patch": 17, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20230726/cpython-3.9.17%2B20230726-i686-pc-windows-msvc-shared-pgo-full.tar.zst", + "sha256": "ffac27bfb8bdf615d0fc6cbbe0becaa65b6ae73feec417919601497fce2be0ab" + }, + "cpython-3.9.17-linux-ppc64le": { + "name": "cpython", + "arch": "ppc64le", + "os": "linux", + "major": 3, + "minor": 9, + "patch": 17, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20230726/cpython-3.9.17%2B20230726-ppc64le-unknown-linux-gnu-lto-full.tar.zst", + "sha256": "c3233f54dd4719c98559a92725b89bd42d68bebd4e4065a4d567a30c7a98ca28" + }, + "cpython-3.9.17-linux-s390x": { + "name": "cpython", + "arch": "s390x", + "os": "linux", + "major": 3, + "minor": 9, + "patch": 17, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20230726/cpython-3.9.17%2B20230726-s390x-unknown-linux-gnu-lto-full.tar.zst", + "sha256": "4e06fb7047b92a694638ee622e8d1da9d1df2f604a2726fe8a087f748032ee7c" + }, + "cpython-3.9.17-darwin-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "darwin", + "major": 3, + "minor": 9, + "patch": 17, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20230726/cpython-3.9.17%2B20230726-x86_64-apple-darwin-pgo%2Blto-full.tar.zst", + "sha256": "ba04f9813b78b61d60a27857949403a1b1dd8ac053e1f1aff72fe2689c238d3c" + }, + "cpython-3.9.17-linux-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "linux", + "major": 3, + "minor": 9, + "patch": 17, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20230726/cpython-3.9.17%2B20230726-x86_64-unknown-linux-gnu-pgo%2Blto-full.tar.zst", + "sha256": "cec2385699c047e77d32b93442417ab7d49c3e78c946cf586380dfe0b12a36dd" + }, + "cpython-3.9.17-windows-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "windows", + "major": 3, + "minor": 9, + "patch": 17, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20230726/cpython-3.9.17%2B20230726-x86_64-pc-windows-msvc-shared-pgo-full.tar.zst", + "sha256": "209983b8227e4755197dfed4f6887e45b6a133f61e7eb913c0a934b0d0c3e00f" + }, + "cpython-3.9.17-linux-x86_64_v2": { + "name": "cpython", + "arch": "x86_64_v2", + "os": "linux", + "major": 3, + "minor": 9, + "patch": 17, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20230726/cpython-3.9.17%2B20230726-x86_64_v2-unknown-linux-gnu-pgo%2Blto-full.tar.zst", + "sha256": "f50a158e8731f3d4f371c8c2bc660dea0dc7701e6d43335e6fcbf6ad90518346" + }, + "cpython-3.9.17-linux-x86_64_v3": { + "name": "cpython", + "arch": "x86_64_v3", + "os": "linux", + "major": 3, + "minor": 9, + "patch": 17, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20230726/cpython-3.9.17%2B20230726-x86_64_v3-unknown-linux-gnu-pgo%2Blto-full.tar.zst", + "sha256": "f939b8bf843e6969b90f96d46c3a8460fb910745264dbc0e3d680c671cdfd543" + }, + "cpython-3.9.17-linux-x86_64_v4": { + "name": "cpython", + "arch": "x86_64_v4", + "os": "linux", + "major": 3, + "minor": 9, + "patch": 17, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20230726/cpython-3.9.17%2B20230726-x86_64_v4-unknown-linux-gnu-lto-full.tar.zst", + "sha256": "4ad5b65d5f654dc8f1a8e4244707da5e0affbab55c95eb019111eb6498d36e94" + }, + "cpython-3.9.16-darwin-arm64": { + "name": "cpython", + "arch": "arm64", + "os": "darwin", + "major": 3, + "minor": 9, + "patch": 16, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20230507/cpython-3.9.16%2B20230507-aarch64-apple-darwin-pgo%2Blto-full.tar.zst", + "sha256": "c86ed2bf3ff290af10f96183c53e2b29e954abb520806fbe01d3ef2f9d809a75" + }, + "cpython-3.9.16-linux-arm64": { + "name": "cpython", + "arch": "arm64", + "os": "linux", + "major": 3, + "minor": 9, + "patch": 16, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20230507/cpython-3.9.16%2B20230507-aarch64-unknown-linux-gnu-lto-full.tar.zst", + "sha256": "6c516ed541e7f84ba8b322aa15006082701456bba7c57e68e7263d702927a76d" + }, + "cpython-3.9.16-linux-i686": { + "name": "cpython", + "arch": "i686", + "os": "linux", + "major": 3, + "minor": 9, + "patch": 16, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20230507/cpython-3.9.16%2B20230507-i686-unknown-linux-gnu-pgo%2Blto-full.tar.zst", + "sha256": "4df4cae277ba3ff8de7a16ef3b38f7214c2b0e4cc992f09505b859b0c94f2fd8" + }, + "cpython-3.9.16-windows-i686": { + "name": "cpython", + "arch": "i686", + "os": "windows", + "major": 3, + "minor": 9, + "patch": 16, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20230507/cpython-3.9.16%2B20230507-i686-pc-windows-msvc-shared-pgo-full.tar.zst", + "sha256": "d7994b5febb375bb131d028f98f4902ba308913c77095457ccd159b521e20c52" + }, + "cpython-3.9.16-linux-ppc64le": { + "name": "cpython", + "arch": "ppc64le", + "os": "linux", + "major": 3, + "minor": 9, + "patch": 16, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20230507/cpython-3.9.16%2B20230507-ppc64le-unknown-linux-gnu-lto-full.tar.zst", + "sha256": "3fcbf3e1090461a16cb33c66e973ea2e918fe1373e51a84892268df6b7155648" + }, + "cpython-3.9.16-darwin-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "darwin", + "major": 3, + "minor": 9, + "patch": 16, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20230507/cpython-3.9.16%2B20230507-x86_64-apple-darwin-pgo%2Blto-full.tar.zst", + "sha256": "5809626ca7907c8ea397341f3d5eafb280ed5b19cc5622e57b14d9b4362eba50" + }, + "cpython-3.9.16-linux-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "linux", + "major": 3, + "minor": 9, + "patch": 16, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20230507/cpython-3.9.16%2B20230507-x86_64-unknown-linux-gnu-pgo%2Blto-full.tar.zst", + "sha256": "9fc89e1f3e1c03b4f5cd3c289f52e53a7c5fc8779113c2af5a10b19b2e8a2c2f" + }, + "cpython-3.9.16-windows-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "windows", + "major": 3, + "minor": 9, + "patch": 16, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20230507/cpython-3.9.16%2B20230507-x86_64-pc-windows-msvc-shared-pgo-full.tar.zst", + "sha256": "199c821505e287c004c3796ba9ac4bd129d7793e1d833e9a7672ed03bdb397d4" + }, + "cpython-3.9.16-linux-x86_64_v2": { + "name": "cpython", + "arch": "x86_64_v2", + "os": "linux", + "major": 3, + "minor": 9, + "patch": 16, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20230507/cpython-3.9.16%2B20230507-x86_64_v2-unknown-linux-gnu-pgo%2Blto-full.tar.zst", + "sha256": "3ce0c3901a12abe123469839855b57f89d910bc4094b818b18860cdf3248bcda" + }, + "cpython-3.9.16-linux-x86_64_v3": { + "name": "cpython", + "arch": "x86_64_v3", + "os": "linux", + "major": 3, + "minor": 9, + "patch": 16, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20230507/cpython-3.9.16%2B20230507-x86_64_v3-unknown-linux-gnu-pgo%2Blto-full.tar.zst", + "sha256": "dc1c5190c8fb33bf315aad4c4af6342a95976610dadfe4e1218810e63a611431" + }, + "cpython-3.9.16-linux-x86_64_v4": { + "name": "cpython", + "arch": "x86_64_v4", + "os": "linux", + "major": 3, + "minor": 9, + "patch": 16, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20230507/cpython-3.9.16%2B20230507-x86_64_v4-unknown-linux-gnu-lto-full.tar.zst", + "sha256": "54ce41739fa946e91b91d0e8d234acb4d4cfb7c4cc9f0aaf3ac6cbfb6b34ca8f" + }, + "cpython-3.9.15-darwin-arm64": { + "name": "cpython", + "arch": "arm64", + "os": "darwin", + "major": 3, + "minor": 9, + "patch": 15, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20221106/cpython-3.9.15%2B20221106-aarch64-apple-darwin-pgo%2Blto-full.tar.zst", + "sha256": "1799b97619572ad595cd6d309bbcc57606138a57f4e90af04e04ee31d187e22f" + }, + "cpython-3.9.15-linux-arm64": { + "name": "cpython", + "arch": "arm64", + "os": "linux", + "major": 3, + "minor": 9, + "patch": 15, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20221106/cpython-3.9.15%2B20221106-aarch64-unknown-linux-gnu-lto-full.tar.zst", + "sha256": "4012279410b28c2688b4acfbc9189cdc8c81ef4c4f83c5e4532c39cb8685530e" + }, + "cpython-3.9.15-linux-i686": { + "name": "cpython", + "arch": "i686", + "os": "linux", + "major": 3, + "minor": 9, + "patch": 15, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20221106/cpython-3.9.15%2B20221106-i686-unknown-linux-gnu-pgo%2Blto-full.tar.zst", + "sha256": "7c5d8e6a4255115e96c4b987b76c203ae9c7e6655b2d52c880680f13d2f1af36" + }, + "cpython-3.9.15-windows-i686": { + "name": "cpython", + "arch": "i686", + "os": "windows", + "major": 3, + "minor": 9, + "patch": 15, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20221106/cpython-3.9.15%2B20221106-i686-pc-windows-msvc-shared-pgo-full.tar.zst", + "sha256": "a5ad2a6ace97d458ad7b2857fba519c5c332362442d88e2b23ed818f243b8a78" + }, + "cpython-3.9.15-darwin-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "darwin", + "major": 3, + "minor": 9, + "patch": 15, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20221106/cpython-3.9.15%2B20221106-x86_64-apple-darwin-pgo%2Blto-full.tar.zst", + "sha256": "50fd795eac55c4485e2fefbb8e7b365461817733c45becb50a7480a243e6000e" + }, + "cpython-3.9.15-linux-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "linux", + "major": 3, + "minor": 9, + "patch": 15, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20221106/cpython-3.9.15%2B20221106-x86_64-unknown-linux-gnu-pgo%2Blto-full.tar.zst", + "sha256": "b6860b9872f361af78021dd2e1fe7edfe821963deab91b9a813d12d706288d3d" + }, + "cpython-3.9.15-windows-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "windows", + "major": 3, + "minor": 9, + "patch": 15, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20221106/cpython-3.9.15%2B20221106-x86_64-pc-windows-msvc-shared-pgo-full.tar.zst", + "sha256": "d0f3ce1748a51779eedf155aea617c39426e3f7bfd93b4876cb172576b6e8bda" + }, + "cpython-3.9.15-linux-x86_64_v2": { + "name": "cpython", + "arch": "x86_64_v2", + "os": "linux", + "major": 3, + "minor": 9, + "patch": 15, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20221106/cpython-3.9.15%2B20221106-x86_64_v2-unknown-linux-gnu-pgo%2Blto-full.tar.zst", + "sha256": "f8a7eed2e7c63398f3ea7a714127c32bbdd9ca473af29cc10a39cb0c2340b419" + }, + "cpython-3.9.15-linux-x86_64_v3": { + "name": "cpython", + "arch": "x86_64_v3", + "os": "linux", + "major": 3, + "minor": 9, + "patch": 15, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20221106/cpython-3.9.15%2B20221106-x86_64_v3-unknown-linux-gnu-pgo%2Blto-full.tar.zst", + "sha256": "03d7368bb700a9f246806931f9fae5013dc66674a19ba544e71eda4a553ec32a" + }, + "cpython-3.9.15-linux-x86_64_v4": { + "name": "cpython", + "arch": "x86_64_v4", + "os": "linux", + "major": 3, + "minor": 9, + "patch": 15, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20221106/cpython-3.9.15%2B20221106-x86_64_v4-unknown-linux-gnu-lto-full.tar.zst", + "sha256": "4d6f17202f93f6128e47a101e84f64214e0157a97d83cc699b8039f09967086f" + }, + "cpython-3.9.14-darwin-arm64": { + "name": "cpython", + "arch": "arm64", + "os": "darwin", + "major": 3, + "minor": 9, + "patch": 14, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20221002/cpython-3.9.14%2B20221002-aarch64-apple-darwin-pgo%2Blto-full.tar.zst", + "sha256": "6b9d2ff724aff88a4d0790c86f2e5d17037736f35a796e71732624191ddd6e38" + }, + "cpython-3.9.14-linux-arm64": { + "name": "cpython", + "arch": "arm64", + "os": "linux", + "major": 3, + "minor": 9, + "patch": 14, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20221002/cpython-3.9.14%2B20221002-aarch64-unknown-linux-gnu-lto-full.tar.zst", + "sha256": "b099375504383b3a30af02dcf3a9ce01b0e6fecba5b3a8729b4a0a374fee7984" + }, + "cpython-3.9.14-linux-i686": { + "name": "cpython", + "arch": "i686", + "os": "linux", + "major": 3, + "minor": 9, + "patch": 14, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20221002/cpython-3.9.14%2B20221002-i686-unknown-linux-gnu-pgo%2Blto-full.tar.zst", + "sha256": "612031ffd5b6dee7f4fe205afeee62a996bbd8df338ae7d0f3731a825aee04fb" + }, + "cpython-3.9.14-windows-i686": { + "name": "cpython", + "arch": "i686", + "os": "windows", + "major": 3, + "minor": 9, + "patch": 14, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20221002/cpython-3.9.14%2B20221002-i686-pc-windows-msvc-shared-pgo-full.tar.zst", + "sha256": "fae990eb312314102408cb0c0453dae670f0eb468f4cbf3e72327ceaa1276b46" + }, + "cpython-3.9.14-darwin-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "darwin", + "major": 3, + "minor": 9, + "patch": 14, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20221002/cpython-3.9.14%2B20221002-x86_64-apple-darwin-pgo%2Blto-full.tar.zst", + "sha256": "186155e19b63da3248347415f888fbcf982c7587f6f927922ca243ae3f23ed2f" + }, + "cpython-3.9.14-linux-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "linux", + "major": 3, + "minor": 9, + "patch": 14, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20221002/cpython-3.9.14%2B20221002-x86_64-unknown-linux-gnu-pgo%2Blto-full.tar.zst", + "sha256": "7f88ff09b2b57c19f4262026b0919aca59558971838093c63b68dfce7834e84d" + }, + "cpython-3.9.14-windows-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "windows", + "major": 3, + "minor": 9, + "patch": 14, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20221002/cpython-3.9.14%2B20221002-x86_64-pc-windows-msvc-shared-pgo-full.tar.zst", + "sha256": "49f27a3a18b4c2d765b0656c6529378a20b3e37fdb0aca9490576ff7a67243a9" + }, + "cpython-3.9.14-linux-x86_64_v2": { + "name": "cpython", + "arch": "x86_64_v2", + "os": "linux", + "major": 3, + "minor": 9, + "patch": 14, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20221002/cpython-3.9.14%2B20221002-x86_64_v2-unknown-linux-gnu-pgo%2Blto-full.tar.zst", + "sha256": "47e654a6dd5ad3bfd2a77341482a06c3bf25598f8ac76cfb95d2aa124f03f0c2" + }, + "cpython-3.9.14-linux-x86_64_v3": { + "name": "cpython", + "arch": "x86_64_v3", + "os": "linux", + "major": 3, + "minor": 9, + "patch": 14, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20221002/cpython-3.9.14%2B20221002-x86_64_v3-unknown-linux-gnu-pgo%2Blto-full.tar.zst", + "sha256": "fcb08f826412496a672512d07f8ab19b0a6d201f31514989b63502f50ac633e1" + }, + "cpython-3.9.14-linux-x86_64_v4": { + "name": "cpython", + "arch": "x86_64_v4", + "os": "linux", + "major": 3, + "minor": 9, + "patch": 14, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20221002/cpython-3.9.14%2B20221002-x86_64_v4-unknown-linux-gnu-lto-full.tar.zst", + "sha256": "f23a4d657ff6577405513e28101801c2b224ff0a1d1380e8a6d1b96a03c75572" + }, + "cpython-3.9.13-darwin-arm64": { + "name": "cpython", + "arch": "arm64", + "os": "darwin", + "major": 3, + "minor": 9, + "patch": 13, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20220802/cpython-3.9.13%2B20220802-aarch64-apple-darwin-pgo%2Blto-full.tar.zst", + "sha256": "8612e9328663c0747d1eae36b218d11c2fbc53c39ec7512c7ad6b1b57374a5dc" + }, + "cpython-3.9.13-linux-arm64": { + "name": "cpython", + "arch": "arm64", + "os": "linux", + "major": 3, + "minor": 9, + "patch": 13, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20220802/cpython-3.9.13%2B20220802-aarch64-unknown-linux-gnu-lto-full.tar.zst", + "sha256": "e27d88c3c3424a3694f9f111dc4e881c3925aa5d9ec60ec8395a82da2d7c2f31" + }, + "cpython-3.9.13-linux-i686": { + "name": "cpython", + "arch": "i686", + "os": "linux", + "major": 3, + "minor": 9, + "patch": 13, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20220802/cpython-3.9.13%2B20220802-i686-unknown-linux-gnu-pgo%2Blto-full.tar.zst", + "sha256": "066d4722bcc75fb16000afd745b11fb5c02847471695c67db633918969e3936b" + }, + "cpython-3.9.13-windows-i686": { + "name": "cpython", + "arch": "i686", + "os": "windows", + "major": 3, + "minor": 9, + "patch": 13, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20220802/cpython-3.9.13%2B20220802-i686-pc-windows-msvc-shared-pgo-full.tar.zst", + "sha256": "3860abee418825c6a33f76fe88773fb05eb4bc724d246f1af063106d9ea3f999" + }, + "cpython-3.9.13-darwin-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "darwin", + "major": 3, + "minor": 9, + "patch": 13, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20220802/cpython-3.9.13%2B20220802-x86_64-apple-darwin-pgo%2Blto-full.tar.zst", + "sha256": "16d21a6e62c19c574a4a225961e80966449095a8eb2c4150905e30d4e807cf86" + }, + "cpython-3.9.13-linux-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "linux", + "major": 3, + "minor": 9, + "patch": 13, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20220802/cpython-3.9.13%2B20220802-x86_64-unknown-linux-gnu-pgo%2Blto-full.tar.zst", + "sha256": "e586b6fef3943adff4e74fbc3fe276dfbca12e9d883e273ed0c8d781b24d7d6e" + }, + "cpython-3.9.13-windows-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "windows", + "major": 3, + "minor": 9, + "patch": 13, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20220802/cpython-3.9.13%2B20220802-x86_64-pc-windows-msvc-shared-pgo-full.tar.zst", + "sha256": "6ef2b164cae483c61da30fb6d245762b8d6d91346d66cb421989d6d1462e5a48" + }, + "cpython-3.9.13-linux-x86_64_v2": { + "name": "cpython", + "arch": "x86_64_v2", + "os": "linux", + "major": 3, + "minor": 9, + "patch": 13, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20220802/cpython-3.9.13%2B20220802-x86_64_v2-unknown-linux-gnu-pgo%2Blto-full.tar.zst", + "sha256": "d226227c7fb70ec46c4f29d108a7024e093b2639368ab1117d7e460beebdb36a" + }, + "cpython-3.9.13-linux-x86_64_v3": { + "name": "cpython", + "arch": "x86_64_v3", + "os": "linux", + "major": 3, + "minor": 9, + "patch": 13, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20220802/cpython-3.9.13%2B20220802-x86_64_v3-unknown-linux-gnu-pgo%2Blto-full.tar.zst", + "sha256": "57685a2f1c96a7b5156276f499e70a7eaa8a8fa17a1475c9d3b9cc1035e6e3f3" + }, + "cpython-3.9.13-linux-x86_64_v4": { + "name": "cpython", + "arch": "x86_64_v4", + "os": "linux", + "major": 3, + "minor": 9, + "patch": 13, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20220802/cpython-3.9.13%2B20220802-x86_64_v4-unknown-linux-gnu-lto-full.tar.zst", + "sha256": "1cab8345431762dec6bd9cc3e95377bb73b04997d3d831c4b4e304923e62f81e" + }, + "cpython-3.9.12-darwin-arm64": { + "name": "cpython", + "arch": "arm64", + "os": "darwin", + "major": 3, + "minor": 9, + "patch": 12, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20220502/cpython-3.9.12%2B20220502-aarch64-apple-darwin-pgo%2Blto-full.tar.zst", + "sha256": "b3d09b3c12295e893ee8f2cb60e8af94d8a21fc5c65016282925220f5270b85b" + }, + "cpython-3.9.12-linux-arm64": { + "name": "cpython", + "arch": "arm64", + "os": "linux", + "major": 3, + "minor": 9, + "patch": 12, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20220502/cpython-3.9.12%2B20220502-aarch64-unknown-linux-gnu-lto-full.tar.zst", + "sha256": "0749e4f8169b45051c440c81c17449549710d0e5821d4fdb5170b704ddd165c4" + }, + "cpython-3.9.12-linux-i686": { + "name": "cpython", + "arch": "i686", + "os": "linux", + "major": 3, + "minor": 9, + "patch": 12, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20220502/cpython-3.9.12%2B20220502-i686-unknown-linux-gnu-pgo%2Blto-full.tar.zst", + "sha256": "4a32d5f827e9c1fbed68e51974d78f090ccdd8c83f777a2c9f80644a96d53c3f" + }, + "cpython-3.9.12-windows-i686": { + "name": "cpython", + "arch": "i686", + "os": "windows", + "major": 3, + "minor": 9, + "patch": 12, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20220502/cpython-3.9.12%2B20220502-i686-pc-windows-msvc-shared-pgo-full.tar.zst", + "sha256": "361b8fa66d6b5d5623fd5e64af29cf220a693ba86d031bf7ce2b61e1ea50f568" + }, + "cpython-3.9.12-darwin-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "darwin", + "major": 3, + "minor": 9, + "patch": 12, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20220502/cpython-3.9.12%2B20220502-x86_64-apple-darwin-pgo%2Blto-full.tar.zst", + "sha256": "825970ae30ae7a30a5b039aa25f1b965e2d1fe046e196e61fa2a3af8fef8c5d9" + }, + "cpython-3.9.12-linux-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "linux", + "major": 3, + "minor": 9, + "patch": 12, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20220502/cpython-3.9.12%2B20220502-x86_64-unknown-linux-gnu-pgo%2Blto-full.tar.zst", + "sha256": "9af4ad8e87d1d24352163d519df44f652efefe018b8c7b48ca57604054950abe" + }, + "cpython-3.9.12-windows-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "windows", + "major": 3, + "minor": 9, + "patch": 12, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20220502/cpython-3.9.12%2B20220502-x86_64-pc-windows-msvc-shared-pgo-full.tar.zst", + "sha256": "c49f8b07e9c4dcfd7a5b55c131e882a4ebdf9f37fef1c7820c3ce9eb23bab8ab" + }, + "cpython-3.9.12-linux-x86_64_v2": { + "name": "cpython", + "arch": "x86_64_v2", + "os": "linux", + "major": 3, + "minor": 9, + "patch": 12, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20220502/cpython-3.9.12%2B20220502-x86_64_v2-unknown-linux-gnu-pgo%2Blto-full.tar.zst", + "sha256": "ce232a6ab127d5310101d1279adb8e1aaf1486b646d8d16a24c5317204e7655d" + }, + "cpython-3.9.12-linux-x86_64_v3": { + "name": "cpython", + "arch": "x86_64_v3", + "os": "linux", + "major": 3, + "minor": 9, + "patch": 12, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20220502/cpython-3.9.12%2B20220502-x86_64_v3-unknown-linux-gnu-pgo%2Blto-full.tar.zst", + "sha256": "8a0817588c787ea08dfa0c2bcc29dfb85020762d199ae0450b7ccaaa03dea177" + }, + "cpython-3.9.12-linux-x86_64_v4": { + "name": "cpython", + "arch": "x86_64_v4", + "os": "linux", + "major": 3, + "minor": 9, + "patch": 12, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20220502/cpython-3.9.12%2B20220502-x86_64_v4-unknown-linux-gnu-lto-full.tar.zst", + "sha256": "e53aea4000d55570087890662dd574e634c0271ae662b97df98307d5329a1429" + }, + "cpython-3.9.11-darwin-arm64": { + "name": "cpython", + "arch": "arm64", + "os": "darwin", + "major": 3, + "minor": 9, + "patch": 11, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20220318/cpython-3.9.11%2B20220318-aarch64-apple-darwin-pgo%2Blto-full.tar.zst", + "sha256": "6d9f20607a20e2cc5ad1428f7366832dc68403fc15f2e4f195817187e7b6dbbf" + }, + "cpython-3.9.11-linux-arm64": { + "name": "cpython", + "arch": "arm64", + "os": "linux", + "major": 3, + "minor": 9, + "patch": 11, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20220318/cpython-3.9.11%2B20220318-aarch64-unknown-linux-gnu-lto-full.tar.zst", + "sha256": "e540f92f78cc84a52a77ce621c3da5a427367205884ab4210e763bc7fdaf889c" + }, + "cpython-3.9.11-linux-i686": { + "name": "cpython", + "arch": "i686", + "os": "linux", + "major": 3, + "minor": 9, + "patch": 11, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20220318/cpython-3.9.11%2B20220318-i686-unknown-linux-gnu-pgo%2Blto-full.tar.zst", + "sha256": "aeb50fcc54214780244dd64c0d66bf5dec30db075c999cf2c5a58134f8d21c33" + }, + "cpython-3.9.11-windows-i686": { + "name": "cpython", + "arch": "i686", + "os": "windows", + "major": 3, + "minor": 9, + "patch": 11, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20220318/cpython-3.9.11%2B20220318-i686-pc-windows-msvc-shared-pgo-full.tar.zst", + "sha256": "f06338422e7e3ad25d0cd61864bdb36d565d46440dd363cbb98821d388ed377a" + }, + "cpython-3.9.11-darwin-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "darwin", + "major": 3, + "minor": 9, + "patch": 11, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20220318/cpython-3.9.11%2B20220318-x86_64-apple-darwin-pgo%2Blto-full.tar.zst", + "sha256": "35e649618e7e602778e72b91c9c50c97d01a0c3509d16225a1f41dd0fd6575f0" + }, + "cpython-3.9.11-linux-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "linux", + "major": 3, + "minor": 9, + "patch": 11, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20220318/cpython-3.9.11%2B20220318-x86_64-unknown-linux-gnu-pgo%2Blto-full.tar.zst", + "sha256": "49dfa5cb99d4f71657dc651ad68d0fce7cc011beb59499141138ef062bd62b49" + }, + "cpython-3.9.11-windows-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "windows", + "major": 3, + "minor": 9, + "patch": 11, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20220318/cpython-3.9.11%2B20220318-x86_64-pc-windows-msvc-shared-pgo-full.tar.zst", + "sha256": "1fe3c519d43737dc7743aec43f72735e1429c79e06e3901b21bad67b642f1a10" + }, + "cpython-3.9.11-linux-x86_64_v2": { + "name": "cpython", + "arch": "x86_64_v2", + "os": "linux", + "major": 3, + "minor": 9, + "patch": 11, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20220318/cpython-3.9.11%2B20220318-x86_64_v2-unknown-linux-gnu-pgo%2Blto-full.tar.zst", + "sha256": "039a1cd370a0865945abec8bec2db81067497cfeeb9be8fe7a0dcdd0c9a92361" + }, + "cpython-3.9.11-linux-x86_64_v3": { + "name": "cpython", + "arch": "x86_64_v3", + "os": "linux", + "major": 3, + "minor": 9, + "patch": 11, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20220318/cpython-3.9.11%2B20220318-x86_64_v3-unknown-linux-gnu-pgo%2Blto-full.tar.zst", + "sha256": "19d87980827f146e7eb6f276ec2fb5d99c26cc0a5e11120a533fbcda75498c98" + }, + "cpython-3.9.11-linux-x86_64_v4": { + "name": "cpython", + "arch": "x86_64_v4", + "os": "linux", + "major": 3, + "minor": 9, + "patch": 11, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20220318/cpython-3.9.11%2B20220318-x86_64_v4-unknown-linux-gnu-lto-full.tar.zst", + "sha256": "c21c52e659d54177b69cb939129ae20e22d00aa754d2883445fc60baa750f430" + }, + "cpython-3.9.10-darwin-arm64": { + "name": "cpython", + "arch": "arm64", + "os": "darwin", + "major": 3, + "minor": 9, + "patch": 10, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20220227/cpython-3.9.10%2B20220227-aarch64-apple-darwin-pgo%2Blto-full.tar.zst", + "sha256": "ba1b63600ed8d9f3b8d739657bd8e7f5ca167de29a1a58d04b2cd9940b289464" + }, + "cpython-3.9.10-linux-arm64": { + "name": "cpython", + "arch": "arm64", + "os": "linux", + "major": 3, + "minor": 9, + "patch": 10, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20220227/cpython-3.9.10%2B20220227-aarch64-unknown-linux-gnu-lto-full.tar.zst", + "sha256": "a40dc3f12bbcaeb487d2ece8c5415f94f3856b400f78202b6055cd514c5e9a24" + }, + "cpython-3.9.10-linux-i686": { + "name": "cpython", + "arch": "i686", + "os": "linux", + "major": 3, + "minor": 9, + "patch": 10, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20220227/cpython-3.9.10%2B20220227-i686-unknown-linux-gnu-pgo%2Blto-full.tar.zst", + "sha256": "218a79ef09d599d95a04819311ee27ab0fd34dd80d3722347003fec0139dca7b" + }, + "cpython-3.9.10-windows-i686": { + "name": "cpython", + "arch": "i686", + "os": "windows", + "major": 3, + "minor": 9, + "patch": 10, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20220227/cpython-3.9.10%2B20220227-i686-pc-windows-msvc-shared-pgo-full.tar.zst", + "sha256": "7f3ca15f89775f76a32e6ea9b2c9778ebf0cde753c5973d4493959e75dd92488" + }, + "cpython-3.9.10-darwin-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "darwin", + "major": 3, + "minor": 9, + "patch": 10, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20220227/cpython-3.9.10%2B20220227-x86_64-apple-darwin-pgo%2Blto-full.tar.zst", + "sha256": "ef2f090ff920708b4b9aa5d6adf0dc930c09a4bf638d71e6883091f9e629193d" + }, + "cpython-3.9.10-linux-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "linux", + "major": 3, + "minor": 9, + "patch": 10, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20220227/cpython-3.9.10%2B20220227-x86_64-unknown-linux-gnu-pgo%2Blto-full.tar.zst", + "sha256": "de0a1b11f56cd6acdbc4b369a023377fd830946726f3abbbce8fc11dcb56cac0" + }, + "cpython-3.9.10-windows-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "windows", + "major": 3, + "minor": 9, + "patch": 10, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20220227/cpython-3.9.10%2B20220227-x86_64-pc-windows-msvc-shared-pgo-full.tar.zst", + "sha256": "56b2738599131d03b39b914ea0597862fd9096e5e64816bf19466bf026e74f0c" + }, + "cpython-3.9.10-linux-x86_64_v2": { + "name": "cpython", + "arch": "x86_64_v2", + "os": "linux", + "major": 3, + "minor": 9, + "patch": 10, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20220227/cpython-3.9.10%2B20220227-x86_64_v2-unknown-linux-gnu-pgo%2Blto-full.tar.zst", + "sha256": "b06b7ca295b5a838a4fbc2bf67c43e28b761a0548b8b6181ddfa61bc1deaf0b9" + }, + "cpython-3.9.10-linux-x86_64_v3": { + "name": "cpython", + "arch": "x86_64_v3", + "os": "linux", + "major": 3, + "minor": 9, + "patch": 10, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20220227/cpython-3.9.10%2B20220227-x86_64_v3-unknown-linux-gnu-pgo%2Blto-full.tar.zst", + "sha256": "7a912ec0220da389b6d3b9a2373aee2a9fb9f24e975c358292c266ab6e775150" + }, + "cpython-3.9.10-linux-x86_64_v4": { + "name": "cpython", + "arch": "x86_64_v4", + "os": "linux", + "major": 3, + "minor": 9, + "patch": 10, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20220227/cpython-3.9.10%2B20220227-x86_64_v4-unknown-linux-gnu-lto-full.tar.zst", + "sha256": "eb8fa11710f6fbdb3e3c1323068fbcce1296d862eed30216946b1d573ce989b4" + }, + "cpython-3.9.7-darwin-arm64": { + "name": "cpython", + "arch": "arm64", + "os": "darwin", + "major": 3, + "minor": 9, + "patch": 7, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20211017/cpython-3.9.7-aarch64-apple-darwin-pgo%2Blto-20211017T1616.tar.zst", + "sha256": null + }, + "cpython-3.9.7-linux-arm64": { + "name": "cpython", + "arch": "arm64", + "os": "linux", + "major": 3, + "minor": 9, + "patch": 7, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20211017/cpython-3.9.7-aarch64-unknown-linux-gnu-lto-20211017T1616.tar.zst", + "sha256": null + }, + "cpython-3.9.7-linux-i686": { + "name": "cpython", + "arch": "i686", + "os": "linux", + "major": 3, + "minor": 9, + "patch": 7, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20211017/cpython-3.9.7-i686-unknown-linux-gnu-pgo%2Blto-20211017T1616.tar.zst", + "sha256": null + }, + "cpython-3.9.7-windows-i686": { + "name": "cpython", + "arch": "i686", + "os": "windows", + "major": 3, + "minor": 9, + "patch": 7, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20211017/cpython-3.9.7-i686-pc-windows-msvc-shared-pgo-20211017T1616.tar.zst", + "sha256": null + }, + "cpython-3.9.7-darwin-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "darwin", + "major": 3, + "minor": 9, + "patch": 7, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20211017/cpython-3.9.7-x86_64-apple-darwin-pgo%2Blto-20211017T1616.tar.zst", + "sha256": null + }, + "cpython-3.9.7-linux-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "linux", + "major": 3, + "minor": 9, + "patch": 7, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20211017/cpython-3.9.7-x86_64-unknown-linux-gnu-pgo%2Blto-20211017T1616.tar.zst", + "sha256": null + }, + "cpython-3.9.7-windows-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "windows", + "major": 3, + "minor": 9, + "patch": 7, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20211017/cpython-3.9.7-x86_64-pc-windows-msvc-shared-pgo-20211017T1616.tar.zst", + "sha256": null + }, + "cpython-3.9.6-darwin-arm64": { + "name": "cpython", + "arch": "arm64", + "os": "darwin", + "major": 3, + "minor": 9, + "patch": 6, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20210724/cpython-3.9.6-aarch64-apple-darwin-pgo%2Blto-20210724T1424.tar.zst", + "sha256": null + }, + "cpython-3.9.6-linux-arm64": { + "name": "cpython", + "arch": "arm64", + "os": "linux", + "major": 3, + "minor": 9, + "patch": 6, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20210724/cpython-3.9.6-aarch64-unknown-linux-gnu-lto-20210724T1424.tar.zst", + "sha256": null + }, + "cpython-3.9.6-linux-i686": { + "name": "cpython", + "arch": "i686", + "os": "linux", + "major": 3, + "minor": 9, + "patch": 6, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20210724/cpython-3.9.6-i686-unknown-linux-gnu-pgo%2Blto-20210724T1424.tar.zst", + "sha256": null + }, + "cpython-3.9.6-windows-i686": { + "name": "cpython", + "arch": "i686", + "os": "windows", + "major": 3, + "minor": 9, + "patch": 6, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20210724/cpython-3.9.6-i686-pc-windows-msvc-shared-pgo-20210724T1424.tar.zst", + "sha256": null + }, + "cpython-3.9.6-darwin-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "darwin", + "major": 3, + "minor": 9, + "patch": 6, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20210724/cpython-3.9.6-x86_64-apple-darwin-pgo%2Blto-20210724T1424.tar.zst", + "sha256": null + }, + "cpython-3.9.6-linux-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "linux", + "major": 3, + "minor": 9, + "patch": 6, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20210724/cpython-3.9.6-x86_64-unknown-linux-gnu-pgo%2Blto-20210724T1424.tar.zst", + "sha256": null + }, + "cpython-3.9.6-windows-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "windows", + "major": 3, + "minor": 9, + "patch": 6, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20210724/cpython-3.9.6-x86_64-pc-windows-msvc-shared-pgo-20210724T1424.tar.zst", + "sha256": null + }, + "cpython-3.9.5-darwin-arm64": { + "name": "cpython", + "arch": "arm64", + "os": "darwin", + "major": 3, + "minor": 9, + "patch": 5, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20210506/cpython-3.9.5-aarch64-apple-darwin-pgo%2Blto-20210506T0943.tar.zst", + "sha256": null + }, + "cpython-3.9.5-linux-i686": { + "name": "cpython", + "arch": "i686", + "os": "linux", + "major": 3, + "minor": 9, + "patch": 5, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20210506/cpython-3.9.5-i686-unknown-linux-gnu-pgo%2Blto-20210506T0943.tar.zst", + "sha256": null + }, + "cpython-3.9.5-windows-i686": { + "name": "cpython", + "arch": "i686", + "os": "windows", + "major": 3, + "minor": 9, + "patch": 5, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20210506/cpython-3.9.5-i686-pc-windows-msvc-shared-pgo-20210506T0943.tar.zst", + "sha256": null + }, + "cpython-3.9.5-darwin-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "darwin", + "major": 3, + "minor": 9, + "patch": 5, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20210506/cpython-3.9.5-x86_64-apple-darwin-pgo%2Blto-20210506T0943.tar.zst", + "sha256": null + }, + "cpython-3.9.5-linux-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "linux", + "major": 3, + "minor": 9, + "patch": 5, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20210506/cpython-3.9.5-x86_64-unknown-linux-gnu-pgo%2Blto-20210506T0943.tar.zst", + "sha256": null + }, + "cpython-3.9.5-windows-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "windows", + "major": 3, + "minor": 9, + "patch": 5, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20210506/cpython-3.9.5-x86_64-pc-windows-msvc-shared-pgo-20210506T0943.tar.zst", + "sha256": null + }, + "cpython-3.9.4-darwin-arm64": { + "name": "cpython", + "arch": "arm64", + "os": "darwin", + "major": 3, + "minor": 9, + "patch": 4, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20210415/cpython-3.9.4-aarch64-apple-darwin-pgo%2Blto-20210414T1515.tar.zst", + "sha256": null + }, + "cpython-3.9.4-linux-i686": { + "name": "cpython", + "arch": "i686", + "os": "linux", + "major": 3, + "minor": 9, + "patch": 4, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20210415/cpython-3.9.4-i686-unknown-linux-gnu-pgo%2Blto-20210414T1515.tar.zst", + "sha256": null + }, + "cpython-3.9.4-windows-i686": { + "name": "cpython", + "arch": "i686", + "os": "windows", + "major": 3, + "minor": 9, + "patch": 4, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20210415/cpython-3.9.4-i686-pc-windows-msvc-shared-pgo-20210414T1515.tar.zst", + "sha256": null + }, + "cpython-3.9.4-darwin-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "darwin", + "major": 3, + "minor": 9, + "patch": 4, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20210415/cpython-3.9.4-x86_64-apple-darwin-pgo%2Blto-20210414T1515.tar.zst", + "sha256": null + }, + "cpython-3.9.4-linux-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "linux", + "major": 3, + "minor": 9, + "patch": 4, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20210415/cpython-3.9.4-x86_64-unknown-linux-gnu-pgo%2Blto-20210414T1515.tar.zst", + "sha256": null + }, + "cpython-3.9.4-windows-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "windows", + "major": 3, + "minor": 9, + "patch": 4, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20210415/cpython-3.9.4-x86_64-pc-windows-msvc-shared-pgo-20210414T1515.tar.zst", + "sha256": null + }, + "cpython-3.9.3-darwin-arm64": { + "name": "cpython", + "arch": "arm64", + "os": "darwin", + "major": 3, + "minor": 9, + "patch": 3, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20210414/cpython-3.9.3-aarch64-apple-darwin-pgo%2Blto-20210413T2055.tar.zst", + "sha256": null + }, + "cpython-3.9.3-windows-i686": { + "name": "cpython", + "arch": "i686", + "os": "windows", + "major": 3, + "minor": 9, + "patch": 3, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20210414/cpython-3.9.3-i686-pc-windows-msvc-shared-pgo-20210413T2055.tar.zst", + "sha256": null + }, + "cpython-3.9.3-darwin-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "darwin", + "major": 3, + "minor": 9, + "patch": 3, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20210414/cpython-3.9.3-x86_64-apple-darwin-pgo%2Blto-20210413T2055.tar.zst", + "sha256": null + }, + "cpython-3.9.3-linux-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "linux", + "major": 3, + "minor": 9, + "patch": 3, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20210414/cpython-3.9.3-x86_64-unknown-linux-gnu-pgo%2Blto-20210413T2055.tar.zst", + "sha256": null + }, + "cpython-3.9.3-windows-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "windows", + "major": 3, + "minor": 9, + "patch": 3, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20210414/cpython-3.9.3-x86_64-pc-windows-msvc-shared-pgo-20210413T2055.tar.zst", + "sha256": null + }, + "cpython-3.9.2-darwin-arm64": { + "name": "cpython", + "arch": "arm64", + "os": "darwin", + "major": 3, + "minor": 9, + "patch": 2, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20210327/cpython-3.9.2-aarch64-apple-darwin-pgo%2Blto-20210327T1202.tar.zst", + "sha256": null + }, + "cpython-3.9.2-linux-i686": { + "name": "cpython", + "arch": "i686", + "os": "linux", + "major": 3, + "minor": 9, + "patch": 2, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20210327/cpython-3.9.2-i686-unknown-linux-gnu-pgo%2Blto-20210327T1202.tar.zst", + "sha256": null + }, + "cpython-3.9.2-windows-i686": { + "name": "cpython", + "arch": "i686", + "os": "windows", + "major": 3, + "minor": 9, + "patch": 2, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20210327/cpython-3.9.2-i686-pc-windows-msvc-shared-pgo-20210327T1202.tar.zst", + "sha256": null + }, + "cpython-3.9.2-darwin-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "darwin", + "major": 3, + "minor": 9, + "patch": 2, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20210327/cpython-3.9.2-x86_64-apple-darwin-pgo%2Blto-20210327T1202.tar.zst", + "sha256": null + }, + "cpython-3.9.2-linux-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "linux", + "major": 3, + "minor": 9, + "patch": 2, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20210327/cpython-3.9.2-x86_64-unknown-linux-gnu-pgo%2Blto-20210327T1202.tar.zst", + "sha256": null + }, + "cpython-3.9.2-windows-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "windows", + "major": 3, + "minor": 9, + "patch": 2, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20210327/cpython-3.9.2-x86_64-pc-windows-msvc-shared-pgo-20210327T1202.tar.zst", + "sha256": null + }, + "cpython-3.9.1-windows-i686": { + "name": "cpython", + "arch": "i686", + "os": "windows", + "major": 3, + "minor": 9, + "patch": 1, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20210103/cpython-3.9.1-i686-pc-windows-msvc-shared-pgo-20210103T1125.tar.zst", + "sha256": null + }, + "cpython-3.9.1-darwin-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "darwin", + "major": 3, + "minor": 9, + "patch": 1, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20210103/cpython-3.9.1-x86_64-apple-darwin-pgo-20210103T1125.tar.zst", + "sha256": null + }, + "cpython-3.9.1-linux-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "linux", + "major": 3, + "minor": 9, + "patch": 1, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20210103/cpython-3.9.1-x86_64-unknown-linux-gnu-pgo-20210103T1125.tar.zst", + "sha256": null + }, + "cpython-3.9.1-windows-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "windows", + "major": 3, + "minor": 9, + "patch": 1, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20210103/cpython-3.9.1-x86_64-pc-windows-msvc-shared-pgo-20210103T1125.tar.zst", + "sha256": null + }, + "cpython-3.9.0-windows-i686": { + "name": "cpython", + "arch": "i686", + "os": "windows", + "major": 3, + "minor": 9, + "patch": 0, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20201020/cpython-3.9.0-i686-pc-windows-msvc-shared-pgo-20201021T0245.tar.zst", + "sha256": null + }, + "cpython-3.9.0-darwin-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "darwin", + "major": 3, + "minor": 9, + "patch": 0, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20201020/cpython-3.9.0-x86_64-apple-darwin-pgo-20201020T0626.tar.zst", + "sha256": null + }, + "cpython-3.9.0-linux-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "linux", + "major": 3, + "minor": 9, + "patch": 0, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20201020/cpython-3.9.0-x86_64-unknown-linux-gnu-pgo-20201020T0627.tar.zst", + "sha256": null + }, + "cpython-3.9.0-windows-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "windows", + "major": 3, + "minor": 9, + "patch": 0, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20201020/cpython-3.9.0-x86_64-pc-windows-msvc-shared-pgo-20201021T0245.tar.zst", + "sha256": null + }, + "cpython-3.8.18-darwin-arm64": { + "name": "cpython", + "arch": "arm64", + "os": "darwin", + "major": 3, + "minor": 8, + "patch": 18, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20240107/cpython-3.8.18%2B20240107-aarch64-apple-darwin-pgo%2Blto-full.tar.zst", + "sha256": "f426349265897fb3715f19f474f45e17406d77701eb1b60953f9b32e51c779b9" + }, + "cpython-3.8.18-linux-arm64": { + "name": "cpython", + "arch": "arm64", + "os": "linux", + "major": 3, + "minor": 8, + "patch": 18, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20240107/cpython-3.8.18%2B20240107-aarch64-unknown-linux-gnu-lto-full.tar.zst", + "sha256": "a3d6f2dcaf43b7549e6c0965debdc8ccb958e662b4a3d95b506816dc99624e68" + }, + "cpython-3.8.18-windows-i686": { + "name": "cpython", + "arch": "i686", + "os": "windows", + "major": 3, + "minor": 8, + "patch": 18, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20240107/cpython-3.8.18%2B20240107-i686-pc-windows-msvc-shared-pgo-full.tar.zst", + "sha256": "875983fccf91310805164528150adfde1ac63564d0c3967d48086c6fdb9f568b" + }, + "cpython-3.8.18-darwin-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "darwin", + "major": 3, + "minor": 8, + "patch": 18, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20240107/cpython-3.8.18%2B20240107-x86_64-apple-darwin-pgo%2Blto-full.tar.zst", + "sha256": "bfcd4a61998e105a78dbac2b68f1f264cd7bedc5ef11f89ec10911f23b445616" + }, + "cpython-3.8.18-linux-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "linux", + "major": 3, + "minor": 8, + "patch": 18, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20240107/cpython-3.8.18%2B20240107-x86_64-unknown-linux-gnu-pgo%2Blto-full.tar.zst", + "sha256": "954b52b1d93a1f4f016b5e5f1f9683617f7de112ff0cf53ca3002dcd45eff4ef" + }, + "cpython-3.8.18-windows-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "windows", + "major": 3, + "minor": 8, + "patch": 18, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20240107/cpython-3.8.18%2B20240107-x86_64-pc-windows-msvc-shared-pgo-full.tar.zst", + "sha256": "0675bf51ad66c149c311e8da4a358b0e0fc28801770163d8053d9aadf6bdb556" + }, + "cpython-3.8.17-darwin-arm64": { + "name": "cpython", + "arch": "arm64", + "os": "darwin", + "major": 3, + "minor": 8, + "patch": 17, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20230826/cpython-3.8.17%2B20230826-aarch64-apple-darwin-pgo%2Blto-full.tar.zst", + "sha256": "d08a542bed35fc74ac6e8f6884c8aa29a77ff2f4ed04a06dcf91578dea622f9a" + }, + "cpython-3.8.17-linux-arm64": { + "name": "cpython", + "arch": "arm64", + "os": "linux", + "major": 3, + "minor": 8, + "patch": 17, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20230826/cpython-3.8.17%2B20230826-aarch64-unknown-linux-gnu-lto-full.tar.zst", + "sha256": "efdf69695af469da13f86d5be23556fee6c03f417f8810fca55307a63aabf08d" + }, + "cpython-3.8.17-linux-i686": { + "name": "cpython", + "arch": "i686", + "os": "linux", + "major": 3, + "minor": 8, + "patch": 17, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20230826/cpython-3.8.17%2B20230826-i686-unknown-linux-gnu-pgo%2Blto-full.tar.zst", + "sha256": "aaf4b15bdc35674dbe25d4538c9e75e243796a0cc8841fd31d7bbbee6703342a" + }, + "cpython-3.8.17-windows-i686": { + "name": "cpython", + "arch": "i686", + "os": "windows", + "major": 3, + "minor": 8, + "patch": 17, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20230826/cpython-3.8.17%2B20230826-i686-pc-windows-msvc-shared-pgo-full.tar.zst", + "sha256": "0931d8ca0e060c6ac1dfcf6bb9b6dea0ac3a9d95daf7906a88128045f4464bf8" + }, + "cpython-3.8.17-darwin-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "darwin", + "major": 3, + "minor": 8, + "patch": 17, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20230826/cpython-3.8.17%2B20230826-x86_64-apple-darwin-pgo%2Blto-full.tar.zst", + "sha256": "2c4925f5cf37d498e0d8cfe7b10591cc5f0cd80d2582f566b12006e6f96958b1" + }, + "cpython-3.8.17-linux-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "linux", + "major": 3, + "minor": 8, + "patch": 17, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20230826/cpython-3.8.17%2B20230826-x86_64-unknown-linux-gnu-pgo%2Blto-full.tar.zst", + "sha256": "4bfe1055dee03d4357b3dca5b334df3076b8aab066cdd84596199b9712ee3632" + }, + "cpython-3.8.17-windows-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "windows", + "major": 3, + "minor": 8, + "patch": 17, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20230826/cpython-3.8.17%2B20230826-x86_64-pc-windows-msvc-shared-pgo-full.tar.zst", + "sha256": "68c7d03de5283c4812f2706c797b2139999a28cec647bc662d1459a922059318" + }, + "cpython-3.8.16-darwin-arm64": { + "name": "cpython", + "arch": "arm64", + "os": "darwin", + "major": 3, + "minor": 8, + "patch": 16, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20230726/cpython-3.8.16%2B20230726-aarch64-apple-darwin-pgo%2Blto-full.tar.zst", + "sha256": "bfc91d0a1d6d6dfaa5a31c925aa6adae82bd1ae5eb17813a9f0a50bf9d3e6305" + }, + "cpython-3.8.16-linux-arm64": { + "name": "cpython", + "arch": "arm64", + "os": "linux", + "major": 3, + "minor": 8, + "patch": 16, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20230726/cpython-3.8.16%2B20230726-aarch64-unknown-linux-gnu-lto-full.tar.zst", + "sha256": "62c3e7b417a9c11fb7d251ee6f763c7dd2ae681017a82686122a8167f1b8c081" + }, + "cpython-3.8.16-linux-i686": { + "name": "cpython", + "arch": "i686", + "os": "linux", + "major": 3, + "minor": 8, + "patch": 16, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20230726/cpython-3.8.16%2B20230726-i686-unknown-linux-gnu-pgo%2Blto-full.tar.zst", + "sha256": "e8d832f16548e199e7c622eec9e06f746ba9dbbdf562dac8810c4e64e1f5115a" + }, + "cpython-3.8.16-windows-i686": { + "name": "cpython", + "arch": "i686", + "os": "windows", + "major": 3, + "minor": 8, + "patch": 16, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20230726/cpython-3.8.16%2B20230726-i686-pc-windows-msvc-shared-pgo-full.tar.zst", + "sha256": "5de953621402c11cc7db65ba15d45779e838d7ce78e7aa8d43c7d78fff177f13" + }, + "cpython-3.8.16-darwin-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "darwin", + "major": 3, + "minor": 8, + "patch": 16, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20230726/cpython-3.8.16%2B20230726-x86_64-apple-darwin-pgo%2Blto-full.tar.zst", + "sha256": "21c0f4a0fa6ee518b9f2f1901c9667e3baf45d9f84235408b7ca50499d19f56d" + }, + "cpython-3.8.16-linux-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "linux", + "major": 3, + "minor": 8, + "patch": 16, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20230726/cpython-3.8.16%2B20230726-x86_64-unknown-linux-gnu-pgo%2Blto-full.tar.zst", + "sha256": "446a1f600698167a3e70448787f61dd8b1e6fb8f50f50558c901a0f4d3c7a6d6" + }, + "cpython-3.8.16-windows-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "windows", + "major": 3, + "minor": 8, + "patch": 16, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20230726/cpython-3.8.16%2B20230726-x86_64-pc-windows-msvc-shared-pgo-full.tar.zst", + "sha256": "6316713c2dcb30127b38ced249fa9608830a33459580b71275a935aaa8cd5d5f" + }, + "cpython-3.8.15-darwin-arm64": { + "name": "cpython", + "arch": "arm64", + "os": "darwin", + "major": 3, + "minor": 8, + "patch": 15, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20221106/cpython-3.8.15%2B20221106-aarch64-apple-darwin-pgo%2Blto-full.tar.zst", + "sha256": "fc0f944e6f01ed649f79c873af1c317db61d2136b82081b4d7cbb7755f878035" + }, + "cpython-3.8.15-linux-arm64": { + "name": "cpython", + "arch": "arm64", + "os": "linux", + "major": 3, + "minor": 8, + "patch": 15, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20221106/cpython-3.8.15%2B20221106-aarch64-unknown-linux-gnu-lto-full.tar.zst", + "sha256": "3a4975f1b0c196c98b4867ad41d2f1ba211b52dc6a2965c56acbb00eb7f69aa7" + }, + "cpython-3.8.15-linux-i686": { + "name": "cpython", + "arch": "i686", + "os": "linux", + "major": 3, + "minor": 8, + "patch": 15, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20221106/cpython-3.8.15%2B20221106-i686-unknown-linux-gnu-pgo%2Blto-full.tar.zst", + "sha256": "f76c0d13f600e819696035851ec47cf5a233cf053d2de85fbd8e5e12a8146f5f" + }, + "cpython-3.8.15-windows-i686": { + "name": "cpython", + "arch": "i686", + "os": "windows", + "major": 3, + "minor": 8, + "patch": 15, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20221106/cpython-3.8.15%2B20221106-i686-pc-windows-msvc-shared-pgo-full.tar.zst", + "sha256": "98bb2315c3567316c30b060d613c8d6067b368b64f08ef8fe6196341637c1d78" + }, + "cpython-3.8.15-darwin-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "darwin", + "major": 3, + "minor": 8, + "patch": 15, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20221106/cpython-3.8.15%2B20221106-x86_64-apple-darwin-pgo%2Blto-full.tar.zst", + "sha256": "e4fd2fa2255295fbdcfadb8b48014fa80810305eccb246d355880aabb45cbe93" + }, + "cpython-3.8.15-linux-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "linux", + "major": 3, + "minor": 8, + "patch": 15, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20221106/cpython-3.8.15%2B20221106-x86_64-unknown-linux-gnu-pgo%2Blto-full.tar.zst", + "sha256": "1fd71062d9b7d632af202972c4488fa9c2255d2ef072b80766ab059b37473ea5" + }, + "cpython-3.8.15-windows-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "windows", + "major": 3, + "minor": 8, + "patch": 15, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20221106/cpython-3.8.15%2B20221106-x86_64-pc-windows-msvc-shared-pgo-full.tar.zst", + "sha256": "59beac5610e6da0848ebaccd72f91f6aaaeed65ef59606d006af909e9e79beba" + }, + "cpython-3.8.14-darwin-arm64": { + "name": "cpython", + "arch": "arm64", + "os": "darwin", + "major": 3, + "minor": 8, + "patch": 14, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20221002/cpython-3.8.14%2B20221002-aarch64-apple-darwin-pgo%2Blto-full.tar.zst", + "sha256": "d17a3fcc161345efa2ec0b4ab9c9ed6c139d29128f2e34bb636338a484aa7b72" + }, + "cpython-3.8.14-linux-arm64": { + "name": "cpython", + "arch": "arm64", + "os": "linux", + "major": 3, + "minor": 8, + "patch": 14, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20221002/cpython-3.8.14%2B20221002-aarch64-unknown-linux-gnu-lto-full.tar.zst", + "sha256": "650821c45386e7727b6e682620007d2532d9ee599b2caf4b4356575bee3c77a0" + }, + "cpython-3.8.14-linux-i686": { + "name": "cpython", + "arch": "i686", + "os": "linux", + "major": 3, + "minor": 8, + "patch": 14, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20221002/cpython-3.8.14%2B20221002-i686-unknown-linux-gnu-pgo%2Blto-full.tar.zst", + "sha256": "adb5a08f8dd700bc2d8260226354137349939e9bc5ccfdb8c16493e97b593a19" + }, + "cpython-3.8.14-windows-i686": { + "name": "cpython", + "arch": "i686", + "os": "windows", + "major": 3, + "minor": 8, + "patch": 14, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20221002/cpython-3.8.14%2B20221002-i686-pc-windows-msvc-shared-pgo-full.tar.zst", + "sha256": "e43f7a5044eac91e95df59fd08bf96f13245898876fc2afd90a081cfcd847e35" + }, + "cpython-3.8.14-darwin-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "darwin", + "major": 3, + "minor": 8, + "patch": 14, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20221002/cpython-3.8.14%2B20221002-x86_64-apple-darwin-pgo%2Blto-full.tar.zst", + "sha256": "62edfea77b42e87ca2d85c482319211cd2dd68d55ba85c99f1834f7b64a60133" + }, + "cpython-3.8.14-linux-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "linux", + "major": 3, + "minor": 8, + "patch": 14, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20221002/cpython-3.8.14%2B20221002-x86_64-unknown-linux-gnu-pgo%2Blto-full.tar.zst", + "sha256": "5ca1c591ffb019fad3978018f68d69d4b6c73ce629fb7e42bc2c594cd8344d4f" + }, + "cpython-3.8.14-windows-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "windows", + "major": 3, + "minor": 8, + "patch": 14, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20221002/cpython-3.8.14%2B20221002-x86_64-pc-windows-msvc-shared-pgo-full.tar.zst", + "sha256": "6986b3e6edf7b37f96ea940b7ccba7b767ed3ea9b3faec2a2a60e5b2c4443314" + }, + "cpython-3.8.13-darwin-arm64": { + "name": "cpython", + "arch": "arm64", + "os": "darwin", + "major": 3, + "minor": 8, + "patch": 13, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20220802/cpython-3.8.13%2B20220802-aarch64-apple-darwin-pgo%2Blto-full.tar.zst", + "sha256": "a204e5f9e1566bdc170b163300a29fc9580d5c65cd6e896caf6500cd64471373" + }, + "cpython-3.8.13-linux-arm64": { + "name": "cpython", + "arch": "arm64", + "os": "linux", + "major": 3, + "minor": 8, + "patch": 13, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20220802/cpython-3.8.13%2B20220802-aarch64-unknown-linux-gnu-lto-full.tar.zst", + "sha256": "ad2b859fb502491f72f8d74ed3410bfb78a8886f8a1baa6908faea6128d91265" + }, + "cpython-3.8.13-linux-i686": { + "name": "cpython", + "arch": "i686", + "os": "linux", + "major": 3, + "minor": 8, + "patch": 13, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20220802/cpython-3.8.13%2B20220802-i686-unknown-linux-gnu-pgo%2Blto-full.tar.zst", + "sha256": "9191ac9858eddfc727fa5ebadc654a57a719ac96b9dee4e1e48e6498a27499f4" + }, + "cpython-3.8.13-windows-i686": { + "name": "cpython", + "arch": "i686", + "os": "windows", + "major": 3, + "minor": 8, + "patch": 13, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20220802/cpython-3.8.13%2B20220802-i686-pc-windows-msvc-shared-pgo-full.tar.zst", + "sha256": "5630739d1c6fcfbf90311d236c5e46314fc4b439364429bee12d0ffc95e134fb" + }, + "cpython-3.8.13-darwin-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "darwin", + "major": 3, + "minor": 8, + "patch": 13, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20220802/cpython-3.8.13%2B20220802-x86_64-apple-darwin-pgo%2Blto-full.tar.zst", + "sha256": "f706a62de8582bf84b8b693c993314cd786f3e78639892cfd9a7283a526696f9" + }, + "cpython-3.8.13-linux-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "linux", + "major": 3, + "minor": 8, + "patch": 13, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20220802/cpython-3.8.13%2B20220802-x86_64-unknown-linux-gnu-pgo%2Blto-full.tar.zst", + "sha256": "31c98d8329746c19739558f164e6374a2cd9c5c93c9e213d2548c993566a593c" + }, + "cpython-3.8.13-windows-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "windows", + "major": 3, + "minor": 8, + "patch": 13, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20220802/cpython-3.8.13%2B20220802-x86_64-pc-windows-msvc-shared-pgo-full.tar.zst", + "sha256": "c36b703b8b806a047ba71e5e85734ac78d204d3a2b7ebc2efcdc7d4af6f6c263" + }, + "cpython-3.8.12-darwin-arm64": { + "name": "cpython", + "arch": "arm64", + "os": "darwin", + "major": 3, + "minor": 8, + "patch": 12, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20220227/cpython-3.8.12%2B20220227-aarch64-apple-darwin-pgo%2Blto-full.tar.zst", + "sha256": "386f667f8d49b6c34aee1910cdc0b5b41883f9406f98e7d59a3753990b1cdbac" + }, + "cpython-3.8.12-linux-i686": { + "name": "cpython", + "arch": "i686", + "os": "linux", + "major": 3, + "minor": 8, + "patch": 12, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20220227/cpython-3.8.12%2B20220227-i686-unknown-linux-gnu-pgo%2Blto-full.tar.zst", + "sha256": "61024acdfe5aef07ba4246ea07dba9962770ec1f3d137c54835c0e5b6e040149" + }, + "cpython-3.8.12-windows-i686": { + "name": "cpython", + "arch": "i686", + "os": "windows", + "major": 3, + "minor": 8, + "patch": 12, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20220227/cpython-3.8.12%2B20220227-i686-pc-windows-msvc-shared-pgo-full.tar.zst", + "sha256": "3e2e6c7de78b1924aad37904fed7bfbac6efa2bef05348e9be92180b2f2b1ae1" + }, + "cpython-3.8.12-darwin-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "darwin", + "major": 3, + "minor": 8, + "patch": 12, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20220227/cpython-3.8.12%2B20220227-x86_64-apple-darwin-pgo%2Blto-full.tar.zst", + "sha256": "cf614d96e2001d526061b3ce0569c79057fd0074ace472ff4f5f601262e08cdb" + }, + "cpython-3.8.12-linux-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "linux", + "major": 3, + "minor": 8, + "patch": 12, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20220227/cpython-3.8.12%2B20220227-x86_64-unknown-linux-gnu-pgo%2Blto-full.tar.zst", + "sha256": "a014cf132a642a5d585f37da0c56f7e6672699811726af18e8905d652b261a3f" + }, + "cpython-3.8.12-windows-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "windows", + "major": 3, + "minor": 8, + "patch": 12, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20220227/cpython-3.8.12%2B20220227-x86_64-pc-windows-msvc-shared-pgo-full.tar.zst", + "sha256": "33f278416ba8074f2ca6d7f8c17b311b60537c9e6431fd47948784c2a78ea227" + }, + "cpython-3.8.11-linux-i686": { + "name": "cpython", + "arch": "i686", + "os": "linux", + "major": 3, + "minor": 8, + "patch": 11, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20210724/cpython-3.8.11-i686-unknown-linux-gnu-pgo%2Blto-20210724T1424.tar.zst", + "sha256": null + }, + "cpython-3.8.11-windows-i686": { + "name": "cpython", + "arch": "i686", + "os": "windows", + "major": 3, + "minor": 8, + "patch": 11, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20210724/cpython-3.8.11-i686-pc-windows-msvc-shared-pgo-20210724T1424.tar.zst", + "sha256": null + }, + "cpython-3.8.11-darwin-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "darwin", + "major": 3, + "minor": 8, + "patch": 11, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20210724/cpython-3.8.11-x86_64-apple-darwin-pgo%2Blto-20210724T1424.tar.zst", + "sha256": null + }, + "cpython-3.8.11-linux-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "linux", + "major": 3, + "minor": 8, + "patch": 11, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20210724/cpython-3.8.11-x86_64-unknown-linux-gnu-pgo%2Blto-20210724T1424.tar.zst", + "sha256": null + }, + "cpython-3.8.11-windows-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "windows", + "major": 3, + "minor": 8, + "patch": 11, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20210724/cpython-3.8.11-x86_64-pc-windows-msvc-shared-pgo-20210724T1424.tar.zst", + "sha256": null + }, + "cpython-3.8.10-linux-i686": { + "name": "cpython", + "arch": "i686", + "os": "linux", + "major": 3, + "minor": 8, + "patch": 10, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20210506/cpython-3.8.10-i686-unknown-linux-gnu-pgo%2Blto-20210506T0943.tar.zst", + "sha256": null + }, + "cpython-3.8.10-windows-i686": { + "name": "cpython", + "arch": "i686", + "os": "windows", + "major": 3, + "minor": 8, + "patch": 10, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20210506/cpython-3.8.10-i686-pc-windows-msvc-shared-pgo-20210506T0943.tar.zst", + "sha256": null + }, + "cpython-3.8.10-darwin-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "darwin", + "major": 3, + "minor": 8, + "patch": 10, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20210506/cpython-3.8.10-x86_64-apple-darwin-pgo%2Blto-20210506T0943.tar.zst", + "sha256": null + }, + "cpython-3.8.10-linux-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "linux", + "major": 3, + "minor": 8, + "patch": 10, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20210506/cpython-3.8.10-x86_64-unknown-linux-gnu-pgo%2Blto-20210506T0943.tar.zst", + "sha256": null + }, + "cpython-3.8.10-windows-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "windows", + "major": 3, + "minor": 8, + "patch": 10, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20210506/cpython-3.8.10-x86_64-pc-windows-msvc-shared-pgo-20210506T0943.tar.zst", + "sha256": null + }, + "cpython-3.8.9-linux-i686": { + "name": "cpython", + "arch": "i686", + "os": "linux", + "major": 3, + "minor": 8, + "patch": 9, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20210415/cpython-3.8.9-i686-unknown-linux-gnu-pgo%2Blto-20210414T1515.tar.zst", + "sha256": null + }, + "cpython-3.8.9-windows-i686": { + "name": "cpython", + "arch": "i686", + "os": "windows", + "major": 3, + "minor": 8, + "patch": 9, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20210415/cpython-3.8.9-i686-pc-windows-msvc-shared-pgo-20210414T1515.tar.zst", + "sha256": null + }, + "cpython-3.8.9-darwin-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "darwin", + "major": 3, + "minor": 8, + "patch": 9, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20210415/cpython-3.8.9-x86_64-apple-darwin-pgo%2Blto-20210414T1515.tar.zst", + "sha256": null + }, + "cpython-3.8.9-linux-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "linux", + "major": 3, + "minor": 8, + "patch": 9, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20210415/cpython-3.8.9-x86_64-unknown-linux-gnu-pgo%2Blto-20210414T1515.tar.zst", + "sha256": null + }, + "cpython-3.8.9-windows-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "windows", + "major": 3, + "minor": 8, + "patch": 9, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20210415/cpython-3.8.9-x86_64-pc-windows-msvc-shared-pgo-20210414T1515.tar.zst", + "sha256": null + }, + "cpython-3.8.8-linux-i686": { + "name": "cpython", + "arch": "i686", + "os": "linux", + "major": 3, + "minor": 8, + "patch": 8, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20210327/cpython-3.8.8-i686-unknown-linux-gnu-pgo%2Blto-20210327T1202.tar.zst", + "sha256": null + }, + "cpython-3.8.8-windows-i686": { + "name": "cpython", + "arch": "i686", + "os": "windows", + "major": 3, + "minor": 8, + "patch": 8, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20210327/cpython-3.8.8-i686-pc-windows-msvc-shared-pgo-20210327T1202.tar.zst", + "sha256": null + }, + "cpython-3.8.8-darwin-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "darwin", + "major": 3, + "minor": 8, + "patch": 8, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20210327/cpython-3.8.8-x86_64-apple-darwin-pgo%2Blto-20210327T1202.tar.zst", + "sha256": null + }, + "cpython-3.8.8-linux-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "linux", + "major": 3, + "minor": 8, + "patch": 8, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20210327/cpython-3.8.8-x86_64-unknown-linux-gnu-pgo%2Blto-20210327T1202.tar.zst", + "sha256": null + }, + "cpython-3.8.8-windows-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "windows", + "major": 3, + "minor": 8, + "patch": 8, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20210327/cpython-3.8.8-x86_64-pc-windows-msvc-shared-pgo-20210327T1202.tar.zst", + "sha256": null + }, + "cpython-3.8.7-windows-i686": { + "name": "cpython", + "arch": "i686", + "os": "windows", + "major": 3, + "minor": 8, + "patch": 7, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20210103/cpython-3.8.7-i686-pc-windows-msvc-shared-pgo-20210103T1125.tar.zst", + "sha256": null + }, + "cpython-3.8.7-darwin-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "darwin", + "major": 3, + "minor": 8, + "patch": 7, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20210103/cpython-3.8.7-x86_64-apple-darwin-pgo-20210103T1125.tar.zst", + "sha256": null + }, + "cpython-3.8.7-linux-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "linux", + "major": 3, + "minor": 8, + "patch": 7, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20210103/cpython-3.8.7-x86_64-unknown-linux-gnu-pgo-20210103T1125.tar.zst", + "sha256": null + }, + "cpython-3.8.7-windows-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "windows", + "major": 3, + "minor": 8, + "patch": 7, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20210103/cpython-3.8.7-x86_64-pc-windows-msvc-shared-pgo-20210103T1125.tar.zst", + "sha256": null + }, + "cpython-3.8.6-windows-i686": { + "name": "cpython", + "arch": "i686", + "os": "windows", + "major": 3, + "minor": 8, + "patch": 6, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20201020/cpython-3.8.6-i686-pc-windows-msvc-shared-pgo-20201021T0233.tar.zst", + "sha256": null + }, + "cpython-3.8.6-darwin-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "darwin", + "major": 3, + "minor": 8, + "patch": 6, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20201020/cpython-3.8.6-x86_64-apple-darwin-pgo-20201020T0626.tar.zst", + "sha256": null + }, + "cpython-3.8.6-linux-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "linux", + "major": 3, + "minor": 8, + "patch": 6, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20201020/cpython-3.8.6-x86_64-unknown-linux-gnu-pgo-20201020T0627.tar.zst", + "sha256": null + }, + "cpython-3.8.6-windows-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "windows", + "major": 3, + "minor": 8, + "patch": 6, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20201020/cpython-3.8.6-x86_64-pc-windows-msvc-shared-pgo-20201021T0232.tar.zst", + "sha256": null + }, + "cpython-3.8.5-windows-i686": { + "name": "cpython", + "arch": "i686", + "os": "windows", + "major": 3, + "minor": 8, + "patch": 5, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20200830/cpython-3.8.5-i686-pc-windows-msvc-shared-pgo-20200830T2311.tar.zst", + "sha256": null + }, + "cpython-3.8.5-darwin-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "darwin", + "major": 3, + "minor": 8, + "patch": 5, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20200823/cpython-3.8.5-x86_64-apple-darwin-pgo-20200823T2228.tar.zst", + "sha256": null + }, + "cpython-3.8.5-linux-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "linux", + "major": 3, + "minor": 8, + "patch": 5, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20200822/cpython-3.8.5-x86_64-unknown-linux-gnu-pgo-20200823T0036.tar.zst", + "sha256": null + }, + "cpython-3.8.5-windows-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "windows", + "major": 3, + "minor": 8, + "patch": 5, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20200830/cpython-3.8.5-x86_64-pc-windows-msvc-shared-pgo-20200830T2254.tar.zst", + "sha256": null + }, + "cpython-3.8.3-windows-i686": { + "name": "cpython", + "arch": "i686", + "os": "windows", + "major": 3, + "minor": 8, + "patch": 3, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20200517/cpython-3.8.3-i686-pc-windows-msvc-shared-pgo-20200518T0154.tar.zst", + "sha256": null + }, + "cpython-3.8.3-darwin-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "darwin", + "major": 3, + "minor": 8, + "patch": 3, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20200530/cpython-3.8.3-x86_64-apple-darwin-pgo-20200530T1845.tar.zst", + "sha256": null + }, + "cpython-3.8.3-linux-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "linux", + "major": 3, + "minor": 8, + "patch": 3, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20200517/cpython-3.8.3-x86_64-unknown-linux-gnu-pgo-20200518T0040.tar.zst", + "sha256": null + }, + "cpython-3.8.3-windows-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "windows", + "major": 3, + "minor": 8, + "patch": 3, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20200517/cpython-3.8.3-x86_64-pc-windows-msvc-shared-pgo-20200517T2207.tar.zst", + "sha256": null + }, + "cpython-3.8.2-windows-i686": { + "name": "cpython", + "arch": "i686", + "os": "windows", + "major": 3, + "minor": 8, + "patch": 2, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20200418/cpython-3.8.2-i686-pc-windows-msvc-shared-pgo-20200418T2315.tar.zst", + "sha256": null + }, + "cpython-3.8.2-darwin-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "darwin", + "major": 3, + "minor": 8, + "patch": 2, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20200418/cpython-3.8.2-x86_64-apple-darwin-pgo-20200418T2238.tar.zst", + "sha256": null + }, + "cpython-3.8.2-linux-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "linux", + "major": 3, + "minor": 8, + "patch": 2, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20200418/cpython-3.8.2-x86_64-unknown-linux-gnu-pgo-20200418T2243.tar.zst", + "sha256": null + }, + "cpython-3.8.2-windows-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "windows", + "major": 3, + "minor": 8, + "patch": 2, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20200418/cpython-3.8.2-x86_64-pc-windows-msvc-shared-pgo-20200418T2315.tar.zst", + "sha256": null + }, + "cpython-3.7.9-windows-i686": { + "name": "cpython", + "arch": "i686", + "os": "windows", + "major": 3, + "minor": 7, + "patch": 9, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20200822/cpython-3.7.9-i686-pc-windows-msvc-shared-pgo-20200823T0159.tar.zst", + "sha256": null + }, + "cpython-3.7.9-darwin-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "darwin", + "major": 3, + "minor": 7, + "patch": 9, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20200823/cpython-3.7.9-x86_64-apple-darwin-pgo-20200823T2228.tar.zst", + "sha256": null + }, + "cpython-3.7.9-linux-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "linux", + "major": 3, + "minor": 7, + "patch": 9, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20200822/cpython-3.7.9-x86_64-unknown-linux-gnu-pgo-20200823T0036.tar.zst", + "sha256": null + }, + "cpython-3.7.9-windows-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "windows", + "major": 3, + "minor": 7, + "patch": 9, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20200822/cpython-3.7.9-x86_64-pc-windows-msvc-shared-pgo-20200823T0118.tar.zst", + "sha256": null + }, + "cpython-3.7.7-windows-i686": { + "name": "cpython", + "arch": "i686", + "os": "windows", + "major": 3, + "minor": 7, + "patch": 7, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20200517/cpython-3.7.7-i686-pc-windows-msvc-shared-pgo-20200517T2153.tar.zst", + "sha256": null + }, + "cpython-3.7.7-shared-windows": { + "name": "cpython", + "arch": "windows", + "os": "shared", + "major": 3, + "minor": 7, + "patch": 7, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20200408/cpython-3.7.7-windows-amd64-shared-20200409T0108.tar.zst", + "sha256": null + }, + "cpython-3.7.7-darwin-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "darwin", + "major": 3, + "minor": 7, + "patch": 7, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20200530/cpython-3.7.7-x86_64-apple-darwin-pgo-20200530T1845.tar.zst", + "sha256": null + }, + "cpython-3.7.7-linux-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "linux", + "major": 3, + "minor": 7, + "patch": 7, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20200517/cpython-3.7.7-x86_64-unknown-linux-gnu-pgo-20200518T0040.tar.zst", + "sha256": null + }, + "cpython-3.7.7-windows-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "windows", + "major": 3, + "minor": 7, + "patch": 7, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20200517/cpython-3.7.7-x86_64-pc-windows-msvc-shared-pgo-20200517T2128.tar.zst", + "sha256": null + }, + "cpython-3.7.6-windows-i686": { + "name": "cpython", + "arch": "i686", + "os": "windows", + "major": 3, + "minor": 7, + "patch": 6, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20200216/cpython-3.7.6-windows-x86-shared-pgo-20200217T0110.tar.zst", + "sha256": null + }, + "cpython-3.7.6-shared-windows": { + "name": "cpython", + "arch": "windows", + "os": "shared", + "major": 3, + "minor": 7, + "patch": 6, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20200216/cpython-3.7.6-windows-amd64-shared-20200216T2324.tar.zst", + "sha256": null + }, + "cpython-3.7.6-darwin-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "darwin", + "major": 3, + "minor": 7, + "patch": 6, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20200216/cpython-3.7.6-macos-20200216T2344.tar.zst", + "sha256": null + }, + "cpython-3.7.6-linux-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "linux", + "major": 3, + "minor": 7, + "patch": 6, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20200216/cpython-3.7.6-linux64-20200216T2303.tar.zst", + "sha256": null + }, + "cpython-3.7.6-windows-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "windows", + "major": 3, + "minor": 7, + "patch": 6, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20200216/cpython-3.7.6-windows-amd64-shared-pgo-20200217T0022.tar.zst", + "sha256": null + }, + "cpython-3.7.5-windows-i686": { + "name": "cpython", + "arch": "i686", + "os": "windows", + "major": 3, + "minor": 7, + "patch": 5, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20191025/cpython-3.7.5-windows-x86-20191025T0549.tar.zst", + "sha256": null + }, + "cpython-3.7.5-darwin-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "darwin", + "major": 3, + "minor": 7, + "patch": 5, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20191025/cpython-3.7.5-macos-20191026T0535.tar.zst", + "sha256": null + }, + "cpython-3.7.5-linux-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "linux", + "major": 3, + "minor": 7, + "patch": 5, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20191025/cpython-3.7.5-linux64-20191025T0506.tar.zst", + "sha256": null + }, + "cpython-3.7.5-windows-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "windows", + "major": 3, + "minor": 7, + "patch": 5, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20191025/cpython-3.7.5-windows-amd64-20191025T0540.tar.zst", + "sha256": null + }, + "cpython-3.7.4-windows-i686": { + "name": "cpython", + "arch": "i686", + "os": "windows", + "major": 3, + "minor": 7, + "patch": 4, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20190816/cpython-3.7.4-windows-x86-20190817T0235.tar.zst", + "sha256": null + }, + "cpython-3.7.4-darwin-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "darwin", + "major": 3, + "minor": 7, + "patch": 4, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20190816/cpython-3.7.4-macos-20190817T0220.tar.zst", + "sha256": null + }, + "cpython-3.7.4-linux-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "linux", + "major": 3, + "minor": 7, + "patch": 4, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20190816/cpython-3.7.4-linux64-20190817T0224.tar.zst", + "sha256": null + }, + "cpython-3.7.4-windows-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "windows", + "major": 3, + "minor": 7, + "patch": 4, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20190816/cpython-3.7.4-windows-amd64-20190817T0227.tar.zst", + "sha256": null + }, + "cpython-3.7.3-windows-i686": { + "name": "cpython", + "arch": "i686", + "os": "windows", + "major": 3, + "minor": 7, + "patch": 3, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20190617/cpython-3.7.3-windows-x86-20190709T0348.tar.zst", + "sha256": null + }, + "cpython-3.7.3-darwin-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "darwin", + "major": 3, + "minor": 7, + "patch": 3, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20190617/cpython-3.7.3-macos-20190618T0523.tar.zst", + "sha256": null + }, + "cpython-3.7.3-linux-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "linux", + "major": 3, + "minor": 7, + "patch": 3, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20190617/cpython-3.7.3-linux64-20190618T0324.tar.zst", + "sha256": null + }, + "cpython-3.7.3-windows-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "windows", + "major": 3, + "minor": 7, + "patch": 3, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20190617/cpython-3.7.3-windows-amd64-20190618T0516.tar.zst", + "sha256": null + }, + "cpython-3.7.1-linux-x86_64": { + "name": "cpython", + "arch": "x86_64", + "os": "linux", + "major": 3, + "minor": 7, + "patch": 1, + "url": "https://github.com/indygreg/python-build-standalone/releases/download/20181218/cpython-3.7.1-linux64-20181218T1905.tar.zst", + "sha256": null + } +} \ No newline at end of file diff --git a/scripts/scenarios/update.py b/scripts/scenarios/update.py index 841e945ce..be7b73c4e 100755 --- a/scripts/scenarios/update.py +++ b/scripts/scenarios/update.py @@ -39,14 +39,13 @@ Requirements: import json import shutil -import os import subprocess import sys import textwrap from pathlib import Path -PACKSE_COMMIT = "78f34eec66acfba9c723285764dc1f4b841f4961" +PACKSE_COMMIT = "e944cb4c8f5d68457d0462ee19106509f63b8d34" TOOL_ROOT = Path(__file__).parent TEMPLATES = TOOL_ROOT / "templates" INSTALL_TEMPLATE = TEMPLATES / "install.mustache" @@ -149,6 +148,8 @@ print("Loading scenario metadata...", file=sys.stderr) data = json.loads( subprocess.check_output( [ + sys.executable, + "-m", "packse", "inspect", "--short-names",