-
Notifications
You must be signed in to change notification settings - Fork 1.1k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Tracking issue: package without source distribution gets an "incomplete" resolution #9711
Comments
One hard thing here is that it requires us to define a set of "required" environments... Like, if we don't see any macOS wheels, then we need to look for a different version of the package that does have macOS wheels. But do we need to find both macOS ARM and x86 wheels? Or is one of the two sufficient? (In the case of PyTorch, if we require x86 wheels, we'll always fail!) |
For example, we could say:
But ignore architecture? (This would be a heuristic, but so would anything.) Even that first condition seems a little tricky, since we don't know what the "max" Python version is. So maybe we'd do like: look at the latest supported version (in the wheels), and then make sure there are wheels for all prior versions? Or we just ignore Python version entirely and focus on on platform. |
I've tried to categorize the linked issues: old mac torch #9988 #7557 #8536 #9228
Similarly, odrive #8536, where a user would like older mac os support. #8536 (comment) is a syntax for solving this, but there's no clear connection between the toml and the problem/solution. For solving this overall, there are two possible intents: I want a separate resolution for torch_scatter #9646 From https://data.pyg.org/whl/torch-2.5.1+cpu.html:
torch #5182 Similar to
5.15.2 has all binaries except arm mac, which only exist on more recent releases. markupsafe #9647 The torch index' mirroring is incomplete, https://pypi.org/project/MarkupSafe/#files has all versions and a source distribution while https://download.pytorch.org/whl/markupsafe/ does not. |
I care (by far) the most about solving the The The |
The idea that @konstin and I are discussing is to only apply this for local versions. |
Sorry, the other example to mention here is #9928 (comment). Our current |
We shipped #10046 which fixes this for PyTorch and packages in the PyTorch ecosystem (i.e., it's limited to inspecting local versions vs. base versions). We may return to this to make it more general in the future. |
## Summary This PR revives #10017, which might be viable now that we _don't_ enforce any platforms by default. The basic idea here is that users can mark certain platforms as required (empty, by default). When resolving, we ensure that the specified platforms have wheel coverage, backtracking if not. For example, to require that we include a version of PyTorch that supports Intel macOS: ```toml [project] name = "project" version = "0.1.0" requires-python = ">=3.11" dependencies = ["torch>1.13"] [tool.uv] required-platforms = [ "sys_platform == 'darwin' and platform_machine == 'x86_64'" ] ``` Other than that, the forking is identical to past iterations of this PR. This would give users a way to resolve the tail of issues in #9711, but with manual opt-in to supporting specific platforms.
Using TensorFlow as an example: if you lock against the CPU index, we choose
2.5.2+cpu
. However,2.5.2+cpu
doesn't have any macOS wheels. So the resulting resolution doesn't work on macOS at all -- you get something like:(If a package-version doesn't have any compatible wheels for the Python requirement, then we skip it; but as long as it has at least one compatible wheel, we "accept" it for all Python versions and platforms.)
As a second example: for
markupsafe==3.0.2
, if you use the PyTorch CPU index, they only shipMarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
. So we might pick that version, but then we'd be lacking wheels for anything other than Python 3.13 on Linux.Solving this is quite difficult, but as evidenced by the linked issues, it's a common problem.
A solution might involve something like: determine the set of Python versions and platforms (coarsely-defined: Linux, macOS, Windows) covered by the wheels. If some Python versions or platforms aren't satisfied, we have to fork and look for older / other versions.
uv sync
: Distributionmarkupsafe==3.0.2 @ registry+https://download.pytorch.org/whl/cpu
can't be installed because it doesn't have a source distribution or wheel for the current platform #9647uv add
rejects pytorch from its index when on mac #5182uv pip compile --universal
is not universal enough for an x86 mac #7557uv add pyqt5
error #7005uv add onnxruntime
currently fails on MacOS #9228uv lock
finds incorrect wheels for sys_platform == 'darwin' (pytorch) #10059uv sync
anduv pip install
#10849The text was updated successfully, but these errors were encountered: