diff --git a/crates/pixi_uv_conversions/Cargo.toml b/crates/pixi_uv_conversions/Cargo.toml index 8149375c1..de284091b 100644 --- a/crates/pixi_uv_conversions/Cargo.toml +++ b/crates/pixi_uv_conversions/Cargo.toml @@ -14,7 +14,7 @@ version = "0.1.0" distribution-filename = { workspace = true } distribution-types = { workspace = true } dunce = { workspace = true } -pep508_rs = { workspace = true } +pep508_rs = { workspace = true, features = ["non-pep508-extensions"] } pixi_manifest = { workspace = true } pypi-types = { workspace = true } rattler_lock = { workspace = true } diff --git a/crates/pixi_uv_conversions/src/conversions.rs b/crates/pixi_uv_conversions/src/conversions.rs index bbb449e59..5d1503ead 100644 --- a/crates/pixi_uv_conversions/src/conversions.rs +++ b/crates/pixi_uv_conversions/src/conversions.rs @@ -1,9 +1,8 @@ -use std::path::PathBuf; +use std::path::{Path, PathBuf}; use distribution_types::{FlatIndexLocation, IndexLocations, IndexUrl}; use pep508_rs::{VerbatimUrl, VerbatimUrlError}; -use pixi_manifest::pypi::pypi_options::PypiOptions; -use pixi_manifest::pypi::GitRev; +use pixi_manifest::pypi::{pypi_options::PypiOptions, GitRev}; use rattler_lock::FindLinksUrlOrPath; use uv_git::GitReference; @@ -16,11 +15,13 @@ pub enum ConvertFlatIndexLocationError { /// Converts to the [`distribution_types::FlatIndexLocation`] pub fn to_flat_index_location( find_links: &FindLinksUrlOrPath, + base_path: &Path, ) -> Result { match find_links { FindLinksUrlOrPath::Path(path) => Ok(FlatIndexLocation::Path( - VerbatimUrl::from_path(path.clone()) - .map_err(|e| ConvertFlatIndexLocationError::VerbatimUrlError(e, path.clone()))?, + VerbatimUrl::parse_path(path.clone(), base_path) + .map_err(|e| ConvertFlatIndexLocationError::VerbatimUrlError(e, path.clone()))? + .with_given(path.display().to_string()), )), FindLinksUrlOrPath::Url(url) => { Ok(FlatIndexLocation::Url(VerbatimUrl::from_url(url.clone()))) @@ -31,6 +32,7 @@ pub fn to_flat_index_location( /// Convert the subset of pypi-options to index locations pub fn pypi_options_to_index_locations( options: &PypiOptions, + base_path: &Path, ) -> Result { // Convert the index to a `IndexUrl` let index = options @@ -55,7 +57,7 @@ pub fn pypi_options_to_index_locations( // Convert to list of flat indexes flat_indexes .into_iter() - .map(|i| to_flat_index_location(&i)) + .map(|i| to_flat_index_location(&i, base_path)) .collect::, _>>()? } else { vec![] @@ -75,6 +77,7 @@ pub fn pypi_options_to_index_locations( /// Convert locked indexes to IndexLocations pub fn locked_indexes_to_index_locations( indexes: &rattler_lock::PypiIndexes, + base_path: &Path, ) -> Result { let index = indexes .indexes @@ -93,7 +96,7 @@ pub fn locked_indexes_to_index_locations( let flat_indexes = indexes .find_links .iter() - .map(to_flat_index_location) + .map(|find_link| to_flat_index_location(find_link, base_path)) .collect::, _>>()?; // we don't have support for an explicit `no_index` field in the `PypiIndexes` diff --git a/examples/pypi-find-links/pixi.lock b/examples/pypi-find-links/pixi.lock index b052b2222..6a7e6bdc9 100644 --- a/examples/pypi-find-links/pixi.lock +++ b/examples/pypi-find-links/pixi.lock @@ -11,88 +11,88 @@ environments: linux-64: - conda: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hd590300_5.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2024.2.2-hbcca054_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.40-hf3520f5_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2024.7.4-hbcca054_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.40-hf3520f5_7.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.6.2-h59595ed_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.4.2-h7f98852_5.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-13.2.0-h77fa898_7.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-13.2.0-h77fa898_7.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-14.1.0-h77fa898_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-14.1.0-h77fa898_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hd590300_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.45.3-h2797004_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.46.0-hde9e2c9_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.2.13-hd590300_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-h4ab18f5_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h59595ed_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.3.0-h4ab18f5_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.3.1-h4bc722e_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.12.0-hab00c5b_0_cpython.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8228510_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h4845f30_101.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024a-h0c530f3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xz-5.2.6-h166bdaf_0.tar.bz2 - - pypi: https://files.pythonhosted.org/packages/ba/06/a07f096c664aeb9f01624f858c3add0a4e913d6c96257acb4fce61e7de14/certifi-2024.2.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1c/d5/c84e1a17bf61d4df64ca866a1c9a913874b4e9bdc131ec689a0ad013fb36/certifi-2024.7.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ee/fb/14d30eb4956408ee3ae09ad34299131fb383c47df355ddb428a7331cfa1e/charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/e5/3e/741d8c82801c347547f8a2a06aa57dbb1992be9e948df2ea0eda2c8b79e8/idna-3.7-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a2/73/a68704750a7679d0b6d3ad7aa8d4da8e14e151ae82e6fee774e6e0d05ec8/urllib3-2.2.1-py3-none-any.whl - - pypi: ./links/requests-2.31.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ca/1c/89ffc63a9605b583d5df2be791a27bc1a42b7c32bab68d3c8f2f73a98cd4/urllib3-2.2.2-py3-none-any.whl + - pypi: ./links\requests-2.31.0-py3-none-any.whl osx-64: - - conda: https://conda.anaconda.org/conda-forge/osx-64/bzip2-1.0.8-h10d778d_5.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/ca-certificates-2024.2.2-h8857fd0_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/bzip2-1.0.8-hfdf4475_7.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/ca-certificates-2024.7.4-h8857fd0_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libexpat-2.6.2-h73e2aa4_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libffi-3.4.2-h0d85af4_5.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/osx-64/libsqlite-3.45.3-h92b6c6a_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libzlib-1.2.13-h8a1eda9_5.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libsqlite-3.46.0-h1b8f9f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libzlib-1.3.1-h87427d6_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/ncurses-6.5-h5846eda_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/openssl-3.3.0-h87427d6_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/openssl-3.3.1-h87427d6_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/python-3.12.0-h30d4d87_0_cpython.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/readline-8.2-h9e318b2_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/tk-8.6.13-h1abcd95_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024a-h0c530f3_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/xz-5.2.6-h775f41a_0.tar.bz2 - - pypi: https://files.pythonhosted.org/packages/ba/06/a07f096c664aeb9f01624f858c3add0a4e913d6c96257acb4fce61e7de14/certifi-2024.2.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1c/d5/c84e1a17bf61d4df64ca866a1c9a913874b4e9bdc131ec689a0ad013fb36/certifi-2024.7.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2e/7d/2259318c202f3d17f3fe6438149b3b9e706d1070fe3fcbb28049730bb25c/charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_x86_64.whl - pypi: https://files.pythonhosted.org/packages/e5/3e/741d8c82801c347547f8a2a06aa57dbb1992be9e948df2ea0eda2c8b79e8/idna-3.7-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a2/73/a68704750a7679d0b6d3ad7aa8d4da8e14e151ae82e6fee774e6e0d05ec8/urllib3-2.2.1-py3-none-any.whl - - pypi: ./links/requests-2.31.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ca/1c/89ffc63a9605b583d5df2be791a27bc1a42b7c32bab68d3c8f2f73a98cd4/urllib3-2.2.2-py3-none-any.whl + - pypi: ./links\requests-2.31.0-py3-none-any.whl osx-arm64: - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-h93a5062_5.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ca-certificates-2024.2.2-hf0a4a13_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-h99b78c6_7.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ca-certificates-2024.7.4-hf0a4a13_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.6.2-hebf3989_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.4.2-h3422bc3_5.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.45.3-h091b4b1_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.2.13-h53f4e23_5.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.46.0-hfb93653_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-hfb2fe0b_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-hb89a1cb_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.3.0-hfb2fe0b_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.3.1-hfb2fe0b_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.12.0-h47c9636_0_cpython.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.2-h92ec313_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h5083fa2_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024a-h0c530f3_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xz-5.2.6-h57fd34a_0.tar.bz2 - - pypi: https://files.pythonhosted.org/packages/ba/06/a07f096c664aeb9f01624f858c3add0a4e913d6c96257acb4fce61e7de14/certifi-2024.2.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1c/d5/c84e1a17bf61d4df64ca866a1c9a913874b4e9bdc131ec689a0ad013fb36/certifi-2024.7.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3a/52/9f9d17c3b54dc238de384c4cb5a2ef0e27985b42a0e5cc8e8a31d918d48d/charset_normalizer-3.3.2-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/e5/3e/741d8c82801c347547f8a2a06aa57dbb1992be9e948df2ea0eda2c8b79e8/idna-3.7-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a2/73/a68704750a7679d0b6d3ad7aa8d4da8e14e151ae82e6fee774e6e0d05ec8/urllib3-2.2.1-py3-none-any.whl - - pypi: ./links/requests-2.31.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ca/1c/89ffc63a9605b583d5df2be791a27bc1a42b7c32bab68d3c8f2f73a98cd4/urllib3-2.2.2-py3-none-any.whl + - pypi: ./links\requests-2.31.0-py3-none-any.whl win-64: - - conda: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-hcfcfb64_5.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/ca-certificates-2024.2.2-h56e8100_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-h2466b09_7.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/ca-certificates-2024.7.4-h56e8100_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libexpat-2.6.2-h63175ca_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libffi-3.4.2-h8ffe710_5.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.45.3-hcfcfb64_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libzlib-1.2.13-hcfcfb64_5.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/openssl-3.3.0-h2466b09_3.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.46.0-h2466b09_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libzlib-1.3.1-h2466b09_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/openssl-3.3.1-h2466b09_2.conda - conda: https://conda.anaconda.org/conda-forge/win-64/python-3.12.0-h2628c8c_0_cpython.conda - conda: https://conda.anaconda.org/conda-forge/win-64/tk-8.6.13-h5226925_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024a-h0c530f3_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/ucrt-10.0.22621.0-h57928b3_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/win-64/vc-14.3-ha32ba9b_20.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.38.33135-h835141b_20.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/vs2015_runtime-14.38.33135-h22015db_20.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/vc-14.3-h8a93ad2_20.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.40.33810-ha82c5b3_20.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/vs2015_runtime-14.40.33810-h3bf8584_20.conda - conda: https://conda.anaconda.org/conda-forge/win-64/xz-5.2.6-h8d14728_0.tar.bz2 - - pypi: https://files.pythonhosted.org/packages/ba/06/a07f096c664aeb9f01624f858c3add0a4e913d6c96257acb4fce61e7de14/certifi-2024.2.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1c/d5/c84e1a17bf61d4df64ca866a1c9a913874b4e9bdc131ec689a0ad013fb36/certifi-2024.7.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b6/7c/8debebb4f90174074b827c63242c23851bdf00a532489fba57fef3416e40/charset_normalizer-3.3.2-cp312-cp312-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/e5/3e/741d8c82801c347547f8a2a06aa57dbb1992be9e948df2ea0eda2c8b79e8/idna-3.7-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a2/73/a68704750a7679d0b6d3ad7aa8d4da8e14e151ae82e6fee774e6e0d05ec8/urllib3-2.2.1-py3-none-any.whl - - pypi: ./links/requests-2.31.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ca/1c/89ffc63a9605b583d5df2be791a27bc1a42b7c32bab68d3c8f2f73a98cd4/urllib3-2.2.2-py3-none-any.whl + - pypi: ./links\requests-2.31.0-py3-none-any.whl packages: - kind: conda name: _libgcc_mutex @@ -128,142 +128,147 @@ packages: - kind: conda name: bzip2 version: 1.0.8 - build: h10d778d_5 - build_number: 5 - subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/bzip2-1.0.8-h10d778d_5.conda - sha256: 61fb2b488928a54d9472113e1280b468a309561caa54f33825a3593da390b242 - md5: 6097a6ca9ada32699b5fc4312dd6ef18 + build: h2466b09_7 + build_number: 7 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-h2466b09_7.conda + sha256: 35a5dad92e88fdd7fc405e864ec239486f4f31eec229e31686e61a140a8e573b + md5: 276e7ffe9ffe39688abc665ef0f45596 + depends: + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 license: bzip2-1.0.6 license_family: BSD purls: [] - size: 127885 - timestamp: 1699280178474 + size: 54927 + timestamp: 1720974860185 - kind: conda name: bzip2 version: 1.0.8 - build: h93a5062_5 - build_number: 5 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-h93a5062_5.conda - sha256: bfa84296a638bea78a8bb29abc493ee95f2a0218775642474a840411b950fe5f - md5: 1bbc659ca658bfd49a481b5ef7a0f40f + build: h4bc722e_7 + build_number: 7 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda + sha256: 5ced96500d945fb286c9c838e54fa759aa04a7129c59800f0846b4335cee770d + md5: 62ee74e96c5ebb0af99386de58cf9553 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc-ng >=12 license: bzip2-1.0.6 license_family: BSD purls: [] - size: 122325 - timestamp: 1699280294368 + size: 252783 + timestamp: 1720974456583 - kind: conda name: bzip2 version: 1.0.8 - build: hcfcfb64_5 - build_number: 5 - subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-hcfcfb64_5.conda - sha256: ae5f47a5c86fd6db822931255dcf017eb12f60c77f07dc782ccb477f7808aab2 - md5: 26eb8ca6ea332b675e11704cce84a3be + build: h99b78c6_7 + build_number: 7 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-h99b78c6_7.conda + sha256: adfa71f158cbd872a36394c56c3568e6034aa55c623634b37a4836bd036e6b91 + md5: fc6948412dbbbe9a4c9ddbbcfe0a79ab depends: - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 + - __osx >=11.0 license: bzip2-1.0.6 license_family: BSD purls: [] - size: 124580 - timestamp: 1699280668742 + size: 122909 + timestamp: 1720974522888 - kind: conda name: bzip2 version: 1.0.8 - build: hd590300_5 - build_number: 5 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hd590300_5.conda - sha256: 242c0c324507ee172c0e0dd2045814e746bb303d1eb78870d182ceb0abc726a8 - md5: 69b8b6202a07720f448be700e300ccf4 + build: hfdf4475_7 + build_number: 7 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/bzip2-1.0.8-hfdf4475_7.conda + sha256: cad153608b81fb24fc8c509357daa9ae4e49dfc535b2cb49b91e23dbd68fc3c5 + md5: 7ed4301d437b59045be7e051a0308211 depends: - - libgcc-ng >=12 + - __osx >=10.13 license: bzip2-1.0.6 license_family: BSD purls: [] - size: 254228 - timestamp: 1699279927352 + size: 134188 + timestamp: 1720974491916 - kind: conda name: ca-certificates - version: 2024.2.2 + version: 2024.7.4 build: h56e8100_0 subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/ca-certificates-2024.2.2-h56e8100_0.conda - sha256: 4d587088ecccd393fec3420b64f1af4ee1a0e6897a45cfd5ef38055322cea5d0 - md5: 63da060240ab8087b60d1357051ea7d6 + url: https://conda.anaconda.org/conda-forge/win-64/ca-certificates-2024.7.4-h56e8100_0.conda + sha256: 7f37bb33c7954de1b4d19ad622859feb4f6c58f751c38b895524cad4e44af72e + md5: 9caa97c9504072cd060cf0a3142cc0ed license: ISC purls: [] - size: 155886 - timestamp: 1706843918052 + size: 154943 + timestamp: 1720077592592 - kind: conda name: ca-certificates - version: 2024.2.2 + version: 2024.7.4 build: h8857fd0_0 subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/ca-certificates-2024.2.2-h8857fd0_0.conda - sha256: 54a794aedbb4796afeabdf54287b06b1d27f7b13b3814520925f4c2c80f58ca9 - md5: f2eacee8c33c43692f1ccfd33d0f50b1 + url: https://conda.anaconda.org/conda-forge/osx-64/ca-certificates-2024.7.4-h8857fd0_0.conda + sha256: d16f46c489cb3192305c7d25b795333c5fc17bb0986de20598ed519f8c9cc9e4 + md5: 7df874a4b05b2d2b82826190170eaa0f license: ISC purls: [] - size: 155665 - timestamp: 1706843838227 + size: 154473 + timestamp: 1720077510541 - kind: conda name: ca-certificates - version: 2024.2.2 + version: 2024.7.4 build: hbcca054_0 subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2024.2.2-hbcca054_0.conda - sha256: 91d81bfecdbb142c15066df70cc952590ae8991670198f92c66b62019b251aeb - md5: 2f4327a1cbe7f022401b236e915a5fef + url: https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2024.7.4-hbcca054_0.conda + sha256: c1548a3235376f464f9931850b64b02492f379b2f2bb98bc786055329b080446 + md5: 23ab7665c5f63cfb9f1f6195256daac6 license: ISC purls: [] - size: 155432 - timestamp: 1706843687645 + size: 154853 + timestamp: 1720077432978 - kind: conda name: ca-certificates - version: 2024.2.2 + version: 2024.7.4 build: hf0a4a13_0 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/ca-certificates-2024.2.2-hf0a4a13_0.conda - sha256: 49bc3439816ac72d0c0e0f144b8cc870fdcc4adec2e861407ec818d8116b2204 - md5: fb416a1795f18dcc5a038bc2dc54edf9 + url: https://conda.anaconda.org/conda-forge/osx-arm64/ca-certificates-2024.7.4-hf0a4a13_0.conda + sha256: 33a61116dae7f369b6ce92a7f2a1ff361ae737c675a493b11feb5570b89e0e3b + md5: 21f9a33e5fe996189e470c19c5354dbe license: ISC purls: [] - size: 155725 - timestamp: 1706844034242 + size: 154517 + timestamp: 1720077468981 - kind: pypi name: certifi - version: 2024.2.2 - url: https://files.pythonhosted.org/packages/ba/06/a07f096c664aeb9f01624f858c3add0a4e913d6c96257acb4fce61e7de14/certifi-2024.2.2-py3-none-any.whl - sha256: dc383c07b76109f368f6106eee2b593b04a011ea4d55f652c6ca24a754d1cdd1 + version: 2024.7.4 + url: https://files.pythonhosted.org/packages/1c/d5/c84e1a17bf61d4df64ca866a1c9a913874b4e9bdc131ec689a0ad013fb36/certifi-2024.7.4-py3-none-any.whl + sha256: c198e21b1289c2ab85ee4e67bb4b4ef3ead0892059901a8d5b622f24a1101e90 requires_python: '>=3.6' - kind: pypi name: charset-normalizer version: 3.3.2 - url: https://files.pythonhosted.org/packages/b6/7c/8debebb4f90174074b827c63242c23851bdf00a532489fba57fef3416e40/charset_normalizer-3.3.2-cp312-cp312-win_amd64.whl - sha256: 96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001 + url: https://files.pythonhosted.org/packages/2e/7d/2259318c202f3d17f3fe6438149b3b9e706d1070fe3fcbb28049730bb25c/charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_x86_64.whl + sha256: ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b requires_python: '>=3.7.0' - kind: pypi name: charset-normalizer version: 3.3.2 - url: https://files.pythonhosted.org/packages/ee/fb/14d30eb4956408ee3ae09ad34299131fb383c47df355ddb428a7331cfa1e/charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - sha256: 90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b + url: https://files.pythonhosted.org/packages/3a/52/9f9d17c3b54dc238de384c4cb5a2ef0e27985b42a0e5cc8e8a31d918d48d/charset_normalizer-3.3.2-cp312-cp312-macosx_11_0_arm64.whl + sha256: 55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6 requires_python: '>=3.7.0' - kind: pypi name: charset-normalizer version: 3.3.2 - url: https://files.pythonhosted.org/packages/2e/7d/2259318c202f3d17f3fe6438149b3b9e706d1070fe3fcbb28049730bb25c/charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_x86_64.whl - sha256: ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b + url: https://files.pythonhosted.org/packages/b6/7c/8debebb4f90174074b827c63242c23851bdf00a532489fba57fef3416e40/charset_normalizer-3.3.2-cp312-cp312-win_amd64.whl + sha256: 96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001 requires_python: '>=3.7.0' - kind: pypi name: charset-normalizer version: 3.3.2 - url: https://files.pythonhosted.org/packages/3a/52/9f9d17c3b54dc238de384c4cb5a2ef0e27985b42a0e5cc8e8a31d918d48d/charset_normalizer-3.3.2-cp312-cp312-macosx_11_0_arm64.whl - sha256: 55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6 + url: https://files.pythonhosted.org/packages/ee/fb/14d30eb4956408ee3ae09ad34299131fb383c47df355ddb428a7331cfa1e/charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + sha256: 90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b requires_python: '>=3.7.0' - kind: pypi name: idna @@ -274,18 +279,19 @@ packages: - kind: conda name: ld_impl_linux-64 version: '2.40' - build: hf3520f5_1 - build_number: 1 + build: hf3520f5_7 + build_number: 7 subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.40-hf3520f5_1.conda - sha256: cb54a873c1c84c47f7174093889686b626946b8143905ec0f76a56785b26a304 - md5: 33b7851c39c25da14f6a233a8ccbeeca + url: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.40-hf3520f5_7.conda + sha256: 764b6950aceaaad0c67ef925417594dd14cd2e22fff864aeef455ac259263d15 + md5: b80f2f396ca2c28b8c14c437a4ed1e74 constrains: - binutils_impl_linux-64 2.40 license: GPL-3.0-only + license_family: GPL purls: [] - size: 707934 - timestamp: 1716583433869 + size: 707602 + timestamp: 1718625640445 - kind: conda name: libexpat version: 2.6.2 @@ -411,39 +417,37 @@ packages: timestamp: 1636489106777 - kind: conda name: libgcc-ng - version: 13.2.0 - build: h77fa898_7 - build_number: 7 + version: 14.1.0 + build: h77fa898_0 subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-13.2.0-h77fa898_7.conda - sha256: 62af2b89acbe74a21606c8410c276e57309c0a2ab8a9e8639e3c8131c0b60c92 - md5: 72ec1b1b04c4d15d4204ece1ecea5978 + url: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-14.1.0-h77fa898_0.conda + sha256: b8e869ac96591cda2704bf7e77a301025e405227791a0bddf14a3dac65125538 + md5: ca0fad6a41ddaef54a153b78eccb5037 depends: - _libgcc_mutex 0.1 conda_forge - _openmp_mutex >=4.5 constrains: - - libgomp 13.2.0 h77fa898_7 + - libgomp 14.1.0 h77fa898_0 license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL purls: [] - size: 775806 - timestamp: 1715016057793 + size: 842109 + timestamp: 1719538896937 - kind: conda name: libgomp - version: 13.2.0 - build: h77fa898_7 - build_number: 7 + version: 14.1.0 + build: h77fa898_0 subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libgomp-13.2.0-h77fa898_7.conda - sha256: 781444fa069d3b50e8ed667b750571cacda785761c7fc2a89ece1ac49693d4ad - md5: abf3fec87c2563697defa759dec3d639 + url: https://conda.anaconda.org/conda-forge/linux-64/libgomp-14.1.0-h77fa898_0.conda + sha256: 7699df61a1f6c644b3576a40f54791561f2845983120477a16116b951c9cdb05 + md5: ae061a5ed5f05818acdf9adab72c146d depends: - _libgcc_mutex 0.1 conda_forge license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL purls: [] - size: 422336 - timestamp: 1715015995979 + size: 456925 + timestamp: 1719538796073 - kind: conda name: libnsl version: 2.0.1 @@ -461,63 +465,65 @@ packages: timestamp: 1697359010159 - kind: conda name: libsqlite - version: 3.45.3 - build: h091b4b1_0 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.45.3-h091b4b1_0.conda - sha256: 4337f466eb55bbdc74e168b52ec8c38f598e3664244ec7a2536009036e2066cc - md5: c8c1186c7f3351f6ffddb97b1f54fc58 + version: 3.46.0 + build: h1b8f9f3_0 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/libsqlite-3.46.0-h1b8f9f3_0.conda + sha256: 63af1a9e3284c7e4952364bafe7267e41e2d9d8bcc0e85a4ea4b0ec02d3693f6 + md5: 5dadfbc1a567fe6e475df4ce3148be09 depends: - - libzlib >=1.2.13,<1.3.0a0 + - __osx >=10.13 + - libzlib >=1.2.13,<2.0a0 license: Unlicense purls: [] - size: 824794 - timestamp: 1713367748819 + size: 908643 + timestamp: 1718050720117 - kind: conda name: libsqlite - version: 3.45.3 - build: h2797004_0 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.45.3-h2797004_0.conda - sha256: e2273d6860eadcf714a759ffb6dc24a69cfd01f2a0ea9d6c20f86049b9334e0c - md5: b3316cbe90249da4f8e84cd66e1cc55b + version: 3.46.0 + build: h2466b09_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.46.0-h2466b09_0.conda + sha256: 662bd7e0d63c5b8c31cca19b91649e798319b93568a2ba8d1375efb91eeb251b + md5: 951b0a3a463932e17414cd9f047fa03d depends: - - libgcc-ng >=12 - - libzlib >=1.2.13,<1.3.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 license: Unlicense purls: [] - size: 859858 - timestamp: 1713367435849 + size: 876677 + timestamp: 1718051113874 - kind: conda name: libsqlite - version: 3.45.3 - build: h92b6c6a_0 - subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/libsqlite-3.45.3-h92b6c6a_0.conda - sha256: 4d44b68fb29dcbc2216a8cae0b274b02ef9b4ae05d1d0f785362ed30b91c9b52 - md5: 68e462226209f35182ef66eda0f794ff + version: 3.46.0 + build: hde9e2c9_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.46.0-hde9e2c9_0.conda + sha256: daee3f68786231dad457d0dfde3f7f1f9a7f2018adabdbb864226775101341a8 + md5: 18aa975d2094c34aef978060ae7da7d8 depends: - - libzlib >=1.2.13,<1.3.0a0 + - libgcc-ng >=12 + - libzlib >=1.2.13,<2.0a0 license: Unlicense purls: [] - size: 902546 - timestamp: 1713367776445 + size: 865346 + timestamp: 1718050628718 - kind: conda name: libsqlite - version: 3.45.3 - build: hcfcfb64_0 - subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.45.3-hcfcfb64_0.conda - sha256: 06ec75faa51d7ec6d5db98889e869b579a9df19d7d3d9baff8359627da4a3b7e - md5: 73f5dc8e2d55d9a1e14b11f49c3b4a28 + version: 3.46.0 + build: hfb93653_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.46.0-hfb93653_0.conda + sha256: 73048f9cb8647d3d3bfe6021c0b7d663e12cffbe9b4f31bd081e713b0a9ad8f9 + md5: 12300188028c9bc02da965128b91b517 depends: - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 + - __osx >=11.0 + - libzlib >=1.2.13,<2.0a0 license: Unlicense purls: [] - size: 870518 - timestamp: 1713367888406 + size: 830198 + timestamp: 1718050644825 - kind: conda name: libuuid version: 2.38.1 @@ -535,74 +541,78 @@ packages: timestamp: 1680112270483 - kind: conda name: libzlib - version: 1.2.13 - build: h53f4e23_5 - build_number: 5 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.2.13-h53f4e23_5.conda - sha256: ab1c8aefa2d54322a63aaeeefe9cf877411851738616c4068e0dccc66b9c758a - md5: 1a47f5236db2e06a320ffa0392f81bd8 + version: 1.3.1 + build: h2466b09_1 + build_number: 1 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libzlib-1.3.1-h2466b09_1.conda + sha256: b13846a54a15243e15f96fec06b526d8155adc6a1ac2b6ed47a88f6a71a94b68 + md5: d4483ca8afc57ddf1f6dded53b36c17f + depends: + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 constrains: - - zlib 1.2.13 *_5 + - zlib 1.3.1 *_1 license: Zlib license_family: Other purls: [] - size: 48102 - timestamp: 1686575426584 + size: 56186 + timestamp: 1716874730539 - kind: conda name: libzlib - version: 1.2.13 - build: h8a1eda9_5 - build_number: 5 - subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/libzlib-1.2.13-h8a1eda9_5.conda - sha256: fc58ad7f47ffea10df1f2165369978fba0a1cc32594aad778f5eec725f334867 - md5: 4a3ad23f6e16f99c04e166767193d700 + version: 1.3.1 + build: h4ab18f5_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-h4ab18f5_1.conda + sha256: adf6096f98b537a11ae3729eaa642b0811478f0ea0402ca67b5108fe2cb0010d + md5: 57d7dc60e9325e3de37ff8dffd18e814 + depends: + - libgcc-ng >=12 constrains: - - zlib 1.2.13 *_5 + - zlib 1.3.1 *_1 license: Zlib license_family: Other purls: [] - size: 59404 - timestamp: 1686575566695 + size: 61574 + timestamp: 1716874187109 - kind: conda name: libzlib - version: 1.2.13 - build: hcfcfb64_5 - build_number: 5 - subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/libzlib-1.2.13-hcfcfb64_5.conda - sha256: c161822ee8130b71e08b6d282b9919c1de2c5274b29921a867bca0f7d30cad26 - md5: 5fdb9c6a113b6b6cb5e517fd972d5f41 + version: 1.3.1 + build: h87427d6_1 + build_number: 1 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/libzlib-1.3.1-h87427d6_1.conda + sha256: 80a62db652b1da0ccc100812a1d86e94f75028968991bfb17f9536f3aa72d91d + md5: b7575b5aa92108dcc9aaab0f05f2dbce depends: - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 + - __osx >=10.13 constrains: - - zlib 1.2.13 *_5 + - zlib 1.3.1 *_1 license: Zlib license_family: Other purls: [] - size: 55800 - timestamp: 1686575452215 + size: 57372 + timestamp: 1716874211519 - kind: conda name: libzlib - version: 1.2.13 - build: hd590300_5 - build_number: 5 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.2.13-hd590300_5.conda - sha256: 370c7c5893b737596fd6ca0d9190c9715d89d888b8c88537ae1ef168c25e82e4 - md5: f36c115f1ee199da648e0597ec2047ad + version: 1.3.1 + build: hfb2fe0b_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-hfb2fe0b_1.conda + sha256: c34365dd37b0eab27b9693af32a1f7f284955517c2cc91f1b88a7ef4738ff03e + md5: 636077128927cf79fd933276dc3aed47 depends: - - libgcc-ng >=12 + - __osx >=11.0 constrains: - - zlib 1.2.13 *_5 + - zlib 1.3.1 *_1 license: Zlib license_family: Other purls: [] - size: 61588 - timestamp: 1686575217516 + size: 46921 + timestamp: 1716874262512 - kind: conda name: ncurses version: '6.5' @@ -643,13 +653,13 @@ packages: timestamp: 1715194898402 - kind: conda name: openssl - version: 3.3.0 - build: h2466b09_3 - build_number: 3 + version: 3.3.1 + build: h2466b09_2 + build_number: 2 subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/openssl-3.3.0-h2466b09_3.conda - sha256: 11b2513fceb20102bdc7f7656a59005acb9ecd0886b7cbfb9c13c2c953f2429b - md5: d7fec5d3bb8fc0c8e266bf1ad350cec5 + url: https://conda.anaconda.org/conda-forge/win-64/openssl-3.3.1-h2466b09_2.conda + sha256: d86c4fa31294ad9068717788197e97e5637e056c82745ffb6d0e88fd1fef1a9d + md5: 375dbc2a4d5a2e4c738703207e8e368b depends: - ca-certificates - ucrt >=10.0.20348.0 @@ -660,18 +670,19 @@ packages: license: Apache-2.0 license_family: Apache purls: [] - size: 8368468 - timestamp: 1716471282135 + size: 8385012 + timestamp: 1721197465883 - kind: conda name: openssl - version: 3.3.0 - build: h4ab18f5_3 - build_number: 3 + version: 3.3.1 + build: h4bc722e_2 + build_number: 2 subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.3.0-h4ab18f5_3.conda - sha256: 33dcea0ed3a61b2de6b66661cdd55278640eb99d676cd129fbff3e53641fa125 - md5: 12ea6d0d4ed54530eaed18e4835c1f7c + url: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.3.1-h4bc722e_2.conda + sha256: b294b3cc706ad1048cdb514f0db3da9f37ae3fcc0c53a7104083dd0918adb200 + md5: e1b454497f9f7c1147fdde4b53f1b512 depends: + - __glibc >=2.17,<3.0.a0 - ca-certificates - libgcc-ng >=12 constrains: @@ -679,17 +690,17 @@ packages: license: Apache-2.0 license_family: Apache purls: [] - size: 2891147 - timestamp: 1716468354865 + size: 2895213 + timestamp: 1721194688955 - kind: conda name: openssl - version: 3.3.0 - build: h87427d6_3 - build_number: 3 + version: 3.3.1 + build: h87427d6_2 + build_number: 2 subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/openssl-3.3.0-h87427d6_3.conda - sha256: 58ffbdce44ac18c6632a2ce1531d06e3fb2e855d40728ba3a2b709158b9a1c33 - md5: ec504fefb403644d893adffb6e7a2dbe + url: https://conda.anaconda.org/conda-forge/osx-64/openssl-3.3.1-h87427d6_2.conda + sha256: 3cb0c05fbfd8cdb9b767396fc0e0af2d78eb4d68592855481254104330d4a4eb + md5: 3f3dbeedbee31e257866407d9dea1ff5 depends: - __osx >=10.13 - ca-certificates @@ -698,17 +709,17 @@ packages: license: Apache-2.0 license_family: Apache purls: [] - size: 2542959 - timestamp: 1716468436467 + size: 2552939 + timestamp: 1721194674491 - kind: conda name: openssl - version: 3.3.0 - build: hfb2fe0b_3 - build_number: 3 + version: 3.3.1 + build: hfb2fe0b_2 + build_number: 2 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.3.0-hfb2fe0b_3.conda - sha256: 6f41c163ab57e7499dff092be4498614651f0f6432e12c2b9f06859a8bc39b75 - md5: 730f618b008b3c13c1e3f973408ddd67 + url: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.3.1-hfb2fe0b_2.conda + sha256: dd7d988636f74473ebdfe15e05c5aabdb53a1d2a846c839d62289b0c37f81548 + md5: 9b551a504c1cc8f8b7b22c01814da8ba depends: - __osx >=11.0 - ca-certificates @@ -717,8 +728,8 @@ packages: license: Apache-2.0 license_family: Apache purls: [] - size: 2893954 - timestamp: 1716468329572 + size: 2899682 + timestamp: 1721194599446 - kind: conda name: python version: 3.12.0 @@ -732,7 +743,7 @@ packages: - libexpat >=2.5.0,<3.0a0 - libffi >=3.4,<4.0a0 - libsqlite >=3.43.0,<4.0a0 - - libzlib >=1.2.13,<1.3.0a0 + - libzlib >=1.2.13,<2.0.0a0 - openssl >=3.1.3,<4.0a0 - tk >=8.6.13,<8.7.0a0 - tzdata @@ -759,7 +770,7 @@ packages: - libexpat >=2.5.0,<3.0a0 - libffi >=3.4,<4.0a0 - libsqlite >=3.43.0,<4.0a0 - - libzlib >=1.2.13,<1.3.0a0 + - libzlib >=1.2.13,<2.0.0a0 - ncurses >=6.4,<7.0a0 - openssl >=3.1.3,<4.0a0 - readline >=8.2,<9.0a0 @@ -785,7 +796,7 @@ packages: - libexpat >=2.5.0,<3.0a0 - libffi >=3.4,<4.0a0 - libsqlite >=3.43.0,<4.0a0 - - libzlib >=1.2.13,<1.3.0a0 + - libzlib >=1.2.13,<2.0.0a0 - ncurses >=6.4,<7.0a0 - openssl >=3.1.3,<4.0a0 - readline >=8.2,<9.0a0 @@ -815,7 +826,7 @@ packages: - libnsl >=2.0.0,<2.1.0a0 - libsqlite >=3.43.0,<4.0a0 - libuuid >=2.38.1,<3.0a0 - - libzlib >=1.2.13,<1.3.0a0 + - libzlib >=1.2.13,<2.0.0a0 - ncurses >=6.4,<7.0a0 - openssl >=3.1.3,<4.0a0 - readline >=8.2,<9.0a0 @@ -880,14 +891,14 @@ packages: - kind: pypi name: requests version: 2.31.0 - path: ./links/requests-2.31.0-py3-none-any.whl + path: ./links\requests-2.31.0-py3-none-any.whl requires_dist: - charset-normalizer<4,>=2 - idna<4,>=2.5 - urllib3<3,>=1.21.1 - certifi>=2017.4.17 - pysocks!=1.5.7,>=1.5.6 ; extra == 'socks' - - chardet<6,>=3.0.2 ; extra == 'use_chardet_on_py3' + - chardet<6,>=3.0.2 ; extra == 'use-chardet-on-py3' requires_python: '>=3.7' - kind: conda name: tk @@ -899,7 +910,7 @@ packages: sha256: 30412b2e9de4ff82d8c2a7e5d06a15f4f4fef1809a72138b6ccb53a33b26faf5 md5: bf830ba5afc507c6232d4ef0fb1a882d depends: - - libzlib >=1.2.13,<1.3.0a0 + - libzlib >=1.2.13,<2.0.0a0 license: TCL license_family: BSD purls: [] @@ -915,7 +926,7 @@ packages: sha256: 72457ad031b4c048e5891f3f6cb27a53cb479db68a52d965f796910e71a403a8 md5: b50a57ba89c32b62428b71a875291c9b depends: - - libzlib >=1.2.13,<1.3.0a0 + - libzlib >=1.2.13,<2.0.0a0 license: TCL license_family: BSD purls: [] @@ -950,7 +961,7 @@ packages: md5: d453b98d9c83e71da0741bb0ff4d76bc depends: - libgcc-ng >=12 - - libzlib >=1.2.13,<1.3.0a0 + - libzlib >=1.2.13,<2.0.0a0 license: TCL license_family: BSD purls: [] @@ -986,9 +997,9 @@ packages: timestamp: 1666630199266 - kind: pypi name: urllib3 - version: 2.2.1 - url: https://files.pythonhosted.org/packages/a2/73/a68704750a7679d0b6d3ad7aa8d4da8e14e151ae82e6fee774e6e0d05ec8/urllib3-2.2.1-py3-none-any.whl - sha256: 450b20ec296a467077128bff42b73080516e71b56ff59a60a02bef2232c4fa9d + version: 2.2.2 + url: https://files.pythonhosted.org/packages/ca/1c/89ffc63a9605b583d5df2be791a27bc1a42b7c32bab68d3c8f2f73a98cd4/urllib3-2.2.2-py3-none-any.whl + sha256: a448b2f64d686155468037e1ace9f2d2199776e17f0a46610480d311f73e3472 requires_dist: - brotli>=1.0.9 ; platform_python_implementation == 'CPython' and extra == 'brotli' - brotlicffi>=0.8.0 ; platform_python_implementation != 'CPython' and extra == 'brotli' @@ -999,55 +1010,55 @@ packages: - kind: conda name: vc version: '14.3' - build: ha32ba9b_20 + build: h8a93ad2_20 build_number: 20 subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/vc-14.3-ha32ba9b_20.conda - sha256: 16cb562ce210ee089060f4aa52f3225a571c83885632a870ea2297d460e3bb00 - md5: 2abfb5cb1b9d41a50f765d60f0be563d + url: https://conda.anaconda.org/conda-forge/win-64/vc-14.3-h8a93ad2_20.conda + sha256: 23ac5feb15a9adf3ab2b8c4dcd63650f8b7ae860c5ceb073e49cf71d203eddef + md5: 8558f367e1d7700554f7cdb823c46faf depends: - - vc14_runtime >=14.38.33135 + - vc14_runtime >=14.40.33810 track_features: - vc14 license: BSD-3-Clause license_family: BSD purls: [] - size: 17122 - timestamp: 1716231244564 + size: 17391 + timestamp: 1717709040616 - kind: conda name: vc14_runtime - version: 14.38.33135 - build: h835141b_20 + version: 14.40.33810 + build: ha82c5b3_20 build_number: 20 subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.38.33135-h835141b_20.conda - sha256: 05b07e0dd3fd49dcc98a365ff661ed6b65e2f0266b4bb03d273131ffdba663be - md5: e971b35a5765862fabc4ba6e5ddf9470 + url: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.40.33810-ha82c5b3_20.conda + sha256: af3cfa347e3d7c1277e9b964b0849a9a9f095bff61836cb3c3a89862fbc32e17 + md5: e39cc4c34c53654ec939558993d9dc5b depends: - ucrt >=10.0.20348.0 constrains: - - vs2015_runtime 14.38.33135.* *_20 + - vs2015_runtime 14.40.33810.* *_20 license: LicenseRef-ProprietaryMicrosoft license_family: Proprietary purls: [] - size: 744189 - timestamp: 1716231234745 + size: 751934 + timestamp: 1717709031266 - kind: conda name: vs2015_runtime - version: 14.38.33135 - build: h22015db_20 + version: 14.40.33810 + build: h3bf8584_20 build_number: 20 subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/vs2015_runtime-14.38.33135-h22015db_20.conda - sha256: 2cebabc39766ea051e577762d813ad4151e9d0ff96f3ff3374d575a272951416 - md5: bb4f5ab332e46e1b022d8842e72905b1 + url: https://conda.anaconda.org/conda-forge/win-64/vs2015_runtime-14.40.33810-h3bf8584_20.conda + sha256: 0c2803f7a788c51f28235a7228dc2ab3f107b4b16ab0845a3e595c8c51e50a7a + md5: c21f1b4a3a30bbc3ef35a50957578e0e depends: - - vc14_runtime >=14.38.33135 + - vc14_runtime >=14.40.33810 license: BSD-3-Clause license_family: BSD purls: [] - size: 17124 - timestamp: 1716231247457 + size: 17395 + timestamp: 1717709043353 - kind: conda name: xz version: 5.2.6 diff --git a/examples/pypi-find-links/pixi.toml b/examples/pypi-find-links/pixi.toml index c24901980..36dcacef2 100644 --- a/examples/pypi-find-links/pixi.toml +++ b/examples/pypi-find-links/pixi.toml @@ -6,6 +6,7 @@ platforms = ["osx-arm64", "osx-64", "linux-64", "win-64"] [project.pypi-options] # This is similar to the --find-links option in pip find-links = [{ path = "./links" }] +index-url = "https://pypi.org/simple" [tasks] start = { depends-on = ["test"] } diff --git a/src/cli/list.rs b/src/cli/list.rs index 69085c90d..1e309387d 100644 --- a/src/cli/list.rs +++ b/src/cli/list.rs @@ -144,7 +144,8 @@ pub async fn execute(args: Args) -> miette::Result<()> { if environment.has_pypi_dependencies() { uv_context = UvResolutionContext::from_project(&project)?; index_locations = - pypi_options_to_index_locations(&environment.pypi_options()).into_diagnostic()?; + pypi_options_to_index_locations(&environment.pypi_options(), project.root()) + .into_diagnostic()?; tags = get_pypi_tags( platform, &environment.system_requirements(), diff --git a/src/install_pypi.rs b/src/install_pypi.rs index 27eecf13a..3da2de886 100644 --- a/src/install_pypi.rs +++ b/src/install_pypi.rs @@ -12,7 +12,10 @@ use itertools::Itertools; use miette::{IntoDiagnostic, WrapErr}; use pep440_rs::Version; use pep508_rs::{VerbatimUrl, VerbatimUrlError}; +use pixi_consts::consts; use pixi_manifest::{pyproject::PyProjectManifest, SystemRequirements}; +use pixi_uv_conversions::locked_indexes_to_index_locations; +use pypi_modifiers::pypi_tags::{get_pypi_tags, is_python_record}; use pypi_types::{ HashAlgorithm, HashDigest, ParsedDirectoryUrl, ParsedGitUrl, ParsedPathUrl, ParsedUrl, ParsedUrlError, VerbatimParsedUrl, @@ -39,9 +42,6 @@ use crate::{ prefix::Prefix, uv_reporter::{UvReporter, UvReporterOptions}, }; -use pixi_consts::consts; -use pixi_uv_conversions::locked_indexes_to_index_locations; -use pypi_modifiers::pypi_tags::{get_pypi_tags, is_python_record}; type CombinedPypiPackageData = (PypiPackageData, PypiPackageEnvironmentData); @@ -420,8 +420,8 @@ fn need_reinstall( Ok(git) => { // Check the repository base url if git.url.repository() != &url - // Check the sha from the direct_url.json and the required sha - // Use the uv git url to get the sha + // Check the sha from the direct_url.json and the required sha + // Use the uv git url to get the sha || vcs_info.commit_id != git.url.precise().map(|p| p.to_string()) { return Ok(ValidateInstall::Reinstall); @@ -607,7 +607,7 @@ pub async fn update_python_distributions( let tags = get_pypi_tags(platform, system_requirements, &python_record.package_record)?; let index_locations = pypi_indexes - .map(locked_indexes_to_index_locations) + .map(|indexes| locked_indexes_to_index_locations(indexes, lock_file_dir)) .unwrap() .into_diagnostic()?; diff --git a/src/lock_file/resolve/pypi.rs b/src/lock_file/resolve/pypi.rs index 7079112de..a35560fe4 100644 --- a/src/lock_file/resolve/pypi.rs +++ b/src/lock_file/resolve/pypi.rs @@ -1,21 +1,15 @@ -use crate::lock_file::resolve::resolver_provider::CondaResolverProvider; -use crate::uv_reporter::{UvReporter, UvReporterOptions}; -use std::collections::HashMap; - -use std::iter::once; - -use crate::lock_file::LockedPypiPackages; -use crate::lock_file::{ - package_identifier, PypiPackageIdentifier, PypiRecord, UvResolutionContext, +use std::{ + collections::HashMap, + iter::once, + path::{Path, PathBuf}, + str::FromStr, + sync::Arc, }; -use pypi_modifiers::pypi_marker_env::determine_marker_environment; -use pypi_modifiers::pypi_tags::{get_pypi_tags, is_python_record}; use distribution_types::{ - BuiltDist, Dist, FlatIndexLocation, HashPolicy, IndexUrl, Name, Resolution, ResolvedDist, - SourceDist, + BuiltDist, Dist, FileLocation, HashPolicy, InstalledDist, InstalledRegistryDist, Name, + Resolution, ResolvedDist, SourceDist, Verbatim, }; -use distribution_types::{FileLocation, InstalledDist, InstalledRegistryDist}; use indexmap::{IndexMap, IndexSet}; use indicatif::ProgressBar; use install_wheel_rs::linker::LinkMode; @@ -23,28 +17,26 @@ use itertools::{Either, Itertools}; use miette::{Context, IntoDiagnostic}; use pep440_rs::{Operator, VersionSpecifier, VersionSpecifiers}; use pep508_rs::{VerbatimUrl, VersionOrUrl}; -use pypi_types::{HashAlgorithm, HashDigest}; -use pypi_types::{RequirementSource, VerbatimParsedUrl}; +use pixi_manifest::{pypi::pypi_options::PypiOptions, PyPiRequirement, SystemRequirements}; +use pixi_uv_conversions::{as_uv_req, pypi_options_to_index_locations}; +use pypi_modifiers::{ + pypi_marker_env::determine_marker_environment, + pypi_tags::{get_pypi_tags, is_python_record}, +}; +use pypi_types::{HashAlgorithm, HashDigest, RequirementSource, VerbatimParsedUrl}; use rattler_conda_types::RepoDataRecord; use rattler_digest::{parse_digest_from_hex, Md5, Sha256}; use rattler_lock::{ PackageHashes, PypiPackageData, PypiPackageEnvironmentData, PypiSourceTreeHashable, UrlOrPath, }; -use std::path::{Path, PathBuf}; -use std::str::FromStr; -use std::sync::Arc; +use url::Url; +use uv_client::{Connectivity, FlatIndexClient, RegistryClient, RegistryClientBuilder}; use uv_configuration::{ ConfigSettings, Constraints, IndexStrategy, Overrides, PreviewMode, SetupPyStrategy, }; -use uv_git::GitResolver; - -use pixi_manifest::pypi::pypi_options::PypiOptions; -use pixi_manifest::{PyPiRequirement, SystemRequirements}; -use pixi_uv_conversions::{as_uv_req, pypi_options_to_index_locations}; -use url::Url; -use uv_client::{Connectivity, FlatIndexClient, RegistryClient, RegistryClientBuilder}; use uv_dispatch::BuildDispatch; use uv_distribution::DistributionDatabase; +use uv_git::GitResolver; use uv_normalize::PackageName; use uv_python::{Interpreter, PythonVersion}; use uv_resolver::{ @@ -53,6 +45,14 @@ use uv_resolver::{ }; use uv_types::EmptyInstalledPackages; +use crate::{ + lock_file::{ + package_identifier, resolve::resolver_provider::CondaResolverProvider, LockedPypiPackages, + PypiPackageIdentifier, PypiRecord, UvResolutionContext, + }, + uv_reporter::{UvReporter, UvReporterOptions}, +}; + fn parse_hashes_from_hash_vec(hashes: &Vec) -> Option { let mut sha256 = None; let mut md5 = None; @@ -92,12 +92,14 @@ fn parse_hashes_from_hash_vec(hashes: &Vec) -> Option /// /// uv has different behavior for each. /// -/// 1) Because uv processes 1) during the 'source build' first we get a `file::` as a given. Which is never relative. -/// because of PEP508. -/// 2) We get our processed path as a given, which can be relative, as our lock may store relative url's. +/// 1) Because uv processes 1) during the 'source build' first we get a +/// `file::` as a given. Which is never relative. because of PEP508. +/// 2) We get our processed path as a given, which can be relative, as our +/// lock may store relative url's. /// -/// For case 1) we can just use the original path, as it can never be relative. And should be the same -/// For case 2) we need to use the given as it may be relative +/// For case 1) we can just use the original path, as it can never be relative. +/// And should be the same For case 2) we need to use the given as it may be +/// relative /// /// I think this has to do with the order of UV processing the requirements fn process_uv_path_url(path_url: &VerbatimUrl) -> PathBuf { @@ -111,65 +113,11 @@ fn process_uv_path_url(path_url: &VerbatimUrl) -> PathBuf { } } -// Store a reference to the flat index -#[derive(Clone)] -struct FindLinksLocation { - /// Canocialized path to the flat index. - canonicalized_path: PathBuf, - /// Manifest path to flat index. - given_path: PathBuf, -} - -/// Given a flat index url and a list of flat indexes, return the path to the flat index. -/// for that specific index. -fn find_links_for( - flat_index_url: &IndexUrl, - flat_indexes_paths: &[FindLinksLocation], -) -> Option { - // Convert to file path - let flat_index_url_path = flat_index_url - .url() - .to_file_path() - .expect("invalid path-based index"); - - // Find the flat index in the list of flat indexes - // Compare with the path that we got from the `IndexUrl` - // which is absolute - flat_indexes_paths - .iter() - .find(|path| path.canonicalized_path == flat_index_url_path) - .cloned() -} - -/// Convert an absolute path to a path relative to the flat index url. -/// which is assumed to be a file:// url. -fn convert_flat_index_path( - flat_index_url: &IndexUrl, - absolute_path: &Path, - given_flat_index_path: &Path, -) -> PathBuf { - assert!( - absolute_path.is_absolute(), - "flat index package does not have an absolute path" - ); - let base = flat_index_url - .url() - .to_file_path() - .expect("invalid path-based index"); - // Strip the index from the path - // This is safe because we know the index is a prefix of the path - let path = absolute_path - .strip_prefix(&base) - .expect("base was not a prefix of the flat index path"); - // Join with the given flat index path - given_flat_index_path.join(path) -} - type CondaPythonPackages = HashMap; /// Convert back to PEP508 without the VerbatimParsedUrl -/// We need this function because we need to convert to the introduced `VerbaimParsedUrl` -/// back to crates.io `VerbatimUrl`, for the locking +/// We need this function because we need to convert to the introduced +/// `VerbatimParsedUrl` back to crates.io `VerbatimUrl`, for the locking fn convert_uv_requirements_to_pep508<'req>( requires_dist: impl Iterator>, ) -> Vec { @@ -269,7 +217,8 @@ pub async fn resolve_pypi( .into_diagnostic()?; use pixi_consts::consts::PROJECT_MANIFEST; - // Determine the python interpreter that is installed as part of the conda packages. + // Determine the python interpreter that is installed as part of the conda + // packages. let python_record = locked_conda_records .iter() .find(|r| is_python_record(r)) @@ -288,7 +237,8 @@ pub async fn resolve_pypi( tracing::debug!("[Resolve] Using Python Interpreter: {:?}", interpreter); - let index_locations = pypi_options_to_index_locations(pypi_options).into_diagnostic()?; + let index_locations = + pypi_options_to_index_locations(pypi_options, project_root).into_diagnostic()?; // TODO: create a cached registry client per index_url set? let registry_client = Arc::new( @@ -453,35 +403,11 @@ pub async fn resolve_pypi( let resolution = Resolution::from(resolution); - // Create a list of canocialized flat indexes. - let flat_index_locations = index_locations - .flat_index() - // Take only path based flat indexes - .filter_map(|i| match i { - FlatIndexLocation::Path(path) => Some(path), - FlatIndexLocation::Url(_) => None, - }) - // Canonicalize the path - .map(|path| { - let path = path - .as_path() - .map_err(|e| std::io::Error::new(std::io::ErrorKind::InvalidData, e))?; - let canonicalized_path = path.canonicalize()?; - Ok::<_, std::io::Error>(FindLinksLocation { - canonicalized_path, - given_path: path.clone(), - }) - }) - .collect::, _>>() - .into_diagnostic() - .wrap_err("failed to canonicalize the find-links paths")?; - // Collect resolution into locked packages lock_pypi_packages( conda_python_packages, &build_dispatch, ®istry_client, - flat_index_locations, resolution, context.concurrency.downloads, ) @@ -493,7 +419,6 @@ async fn lock_pypi_packages<'a>( conda_python_packages: CondaPythonPackages, build_dispatch: &BuildDispatch<'a>, registry_client: &Arc, - flat_index_locations: Vec, resolution: Resolution, concurrent_downloads: usize, ) -> miette::Result> { @@ -518,20 +443,21 @@ async fn lock_pypi_packages<'a>( ResolvedDist::Installable(Dist::Built(dist)) => { let (url_or_path, hash) = match &dist { BuiltDist::Registry(dist) => { - let url = match &dist.best_wheel().file.url { + let best_wheel = dist.best_wheel(); + let url = match &best_wheel.file.url { FileLocation::AbsoluteUrl(url) => UrlOrPath::Url( Url::from_str(url.as_ref()).expect("invalid absolute url"), ), // I (tim) thinks this only happens for flat path based indexes - FileLocation::Path(path) => { - let flat_index = - find_links_for(&dist.best_wheel().index, &flat_index_locations) - .expect("flat index does not exist for resolved ids"); - UrlOrPath::Path(convert_flat_index_path( - &dist.best_wheel().index, - path, - &flat_index.given_path, - )) + FileLocation::Path(wheel_path) => { + let index_path = best_wheel.index.to_file_path().expect("got a build wheel from a path but the index does not refer to a valid path."); + let relative_wheel_path = wheel_path + .strip_prefix(&index_path) + .expect("the build wheel is not stored relative to the index"); + let verbatim_index_path = best_wheel.index.verbatim(); + Path::new(AsRef::::as_ref(&verbatim_index_path)) + .join(relative_wheel_path) + .into() } // This happens when it is relative to the non-standard index FileLocation::RelativeUrl(base, relative) => { @@ -590,14 +516,15 @@ async fn lock_pypi_packages<'a>( Url::from_str(url.as_ref()).expect("invalid absolute url"), ), // I (tim) thinks this only happens for flat path based indexes - FileLocation::Path(path) => { - let flat_index = find_links_for(®.index, &flat_index_locations) - .expect("flat index does not exist for resolved ids"); - UrlOrPath::Path(convert_flat_index_path( - ®.index, - path, - &flat_index.given_path, - )) + FileLocation::Path(source_path) => { + let index_path = reg.index.to_file_path().expect("got a build wheel from a path but the index does not refer to a valid path."); + let relative_wheel_path = source_path + .strip_prefix(&index_path) + .expect("the build wheel is not stored relative to the index"); + let verbatim_index_path = reg.index.verbatim(); + Path::new(AsRef::::as_ref(&verbatim_index_path)) + .join(relative_wheel_path) + .into() } // This happens when it is relative to the non-standard index FileLocation::RelativeUrl(base, relative) => {