Validate URL wheel tags against Requires-Python and required environments#16824
Validate URL wheel tags against Requires-Python and required environments#16824charliermarsh merged 2 commits intomainfrom
Requires-Python and required environments#16824Conversation
1fce755 to
3542bfb
Compare
| ----- stderr ----- | ||
| × No solution found when resolving dependencies: | ||
| ╰─▶ Because only numpy==2.3.5 is available and numpy==2.3.5 has no wheels with a matching Python version tag (e.g., `cp312`), we can conclude that all versions of numpy cannot be used. | ||
| And because your project depends on numpy, we can conclude that your project's requirements are unsatisfiable. |
There was a problem hiding this comment.
Today, this resolution passes and the wheel is just omitted from the lockfile.
| ----- stderr ----- | ||
| × No solution found when resolving dependencies: | ||
| ╰─▶ Because only numpy==2.3.5 is available and numpy==2.3.5 has no Windows-compatible wheels, we can conclude that all versions of numpy cannot be used. | ||
| And because your project depends on numpy, we can conclude that your project's requirements are unsatisfiable. |
There was a problem hiding this comment.
Same here -- this passes too.
konstin
left a comment
There was a problem hiding this comment.
One question about the resolver order, otherwise looks good.
| for environment_marker in self.options.required_environments.iter().copied() { | ||
| // If the platform is part of the current environment... | ||
| if env.included_by_marker(environment_marker) | ||
| && !find_environments(id, pubgrub).is_disjoint(environment_marker) |
There was a problem hiding this comment.
Here, we compute through which marker paths the package is currently reachable. Doesn't that mean we can miss an incompatible package if the dependency with a wider marker only appears later?
There was a problem hiding this comment.
Hmm, maybe? But I think this is the same strategy as in the choose_version_registry path`.
There was a problem hiding this comment.
It looks like we're getting saved by pseudo-packages having their version selection, with this PR this fails as it should:
[project]
name = "test-toml"
version = "0.1.0"
requires-python = ">=3.14"
dependencies = [
'numpy; sys_platform == "win32"',
'pandas',
]
[tool.uv]
required-environments = ['sys_platform == "linux"', 'sys_platform == "win32"']
[tool.uv.sources]
numpy = { url = "https://files.pythonhosted.org/packages/a3/2e/235b4d96619931192c91660805e5e49242389742a7a82c27665021db690c/numpy-2.3.5-cp314-cp314-win_amd64.whl" }This MR contains the following updates: | Package | Update | Change | |---|---|---| | [astral-sh/uv](https://github.com/astral-sh/uv) | patch | `0.9.11` -> `0.9.13` | MR created with the help of [el-capitano/tools/renovate-bot](https://gitlab.com/el-capitano/tools/renovate-bot). **Proposed changes to behavior should be submitted there as MRs.** --- ### Release Notes <details> <summary>astral-sh/uv (astral-sh/uv)</summary> ### [`v0.9.13`](https://github.com/astral-sh/uv/blob/HEAD/CHANGELOG.md#0913) [Compare Source](astral-sh/uv@0.9.12...0.9.13) Released on 2025-11-26. ##### Bug fixes - Revert "Allow `--with-requirements` to load extensionless inline-metadata scripts" to fix reading of requirements files from streams ([#​16861](astral-sh/uv#16861)) - Validate URL wheel tags against `Requires-Python` and required environments ([#​16824](astral-sh/uv#16824)) ##### Documentation - Drop unpublished crates from the uv crates.io README ([#​16847](astral-sh/uv#16847)) - Fix the links to uv in crates.io member READMEs ([#​16848](astral-sh/uv#16848)) ### [`v0.9.12`](https://github.com/astral-sh/uv/blob/HEAD/CHANGELOG.md#0912) [Compare Source](astral-sh/uv@0.9.11...0.9.12) Released on 2025-11-24. ##### Enhancements - Allow `--with-requirements` to load extensionless inline-metadata scripts ([#​16744](astral-sh/uv#16744)) - Collect and upload PEP 740 attestations during `uv publish` ([#​16731](astral-sh/uv#16731)) - Prevent `uv export` from overwriting `pyproject.toml` ([#​16745](astral-sh/uv#16745)) ##### Documentation - Add a crates.io README for uv ([#​16809](astral-sh/uv#16809)) - Add documentation for intermediate Docker layers in a workspace ([#​16787](astral-sh/uv#16787)) - Enumerate workspace members in the uv crate README ([#​16811](astral-sh/uv#16811)) - Fix documentation links for crates ([#​16801](astral-sh/uv#16801)) - Generate a crates.io README for uv workspace members ([#​16812](astral-sh/uv#16812)) - Move the "Export" guide to the projects concept section ([#​16835](astral-sh/uv#16835)) - Update the cargo install recommendation to use crates ([#​16800](astral-sh/uv#16800)) - Use the word "internal" in crate descriptions ([#​16810](astral-sh/uv#16810)) </details> --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever MR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this MR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this MR, check this box --- This MR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0Mi4xOS43IiwidXBkYXRlZEluVmVyIjoiNDIuMjEuMyIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsiUmVub3ZhdGUgQm90Il19-->
Test case for astral-sh/uv#16824 (comment). Introduces `required-environments` to packse.
Test case for astral-sh/uv#16824 (comment). Introduces `required-environments` to packse.
Test case for astral-sh/uv#16824 (comment). Introduces `required-environments` to packse, with a basic passing `requires-python-subset` case.
Test case for astral-sh/uv#16824 (comment). Introduces `required-environments` to packse, with a basic passing `requires-python-subset` case.
Test case for astral-sh/uv#16824 (comment). Introduces `required-environments` to packse, with a basic passing `requires-python-subset` case.
Test case for astral-sh/uv#16824 (comment). Introduces `required-environments` to packse, with a basic passing `requires-python-subset` case.
Companion change for astral-sh/packse#293, motivated by #16824 (comment)
Companion change for astral-sh/packse#293, motivated by #16824 (comment)
Test case for astral-sh/uv#16824 (comment). Introduces `required-environments` to packse, with a basic passing `requires-python-subset` case.
Companion change for astral-sh/packse#293, motivated by #16824 (comment)
Add a test case for astral-sh/uv#16824 (comment). Introduces `required-environments` to packse, with a basic passing `requires-python-subset` case.
Add astral-sh/packse#293 for #16824 (comment) Beware of mitsuhiko/insta#833 when working with packse for the time being (i.e., `cargo binstall cargo-insta@1.42.1 --force`)
Summary
Closes #16818.