-
Notifications
You must be signed in to change notification settings - Fork 636
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
uv ignores system installed packages #2282
Labels
bug
Something isn't working
Comments
8 tasks
zanieb
added a commit
that referenced
this issue
Mar 28, 2024
Previously, we did not consider installed distributions as candidates while performing resolution. Here, we update the resolver to use installed distributions that satisfy requirements instead of pulling new distributions from the registry. The implementation details are as follows: - We now provide `SitePackages` to the `CandidateSelector` - If an installed distribution satisfies the requirement, we prefer it over remote distributions - We do not want to allow installed distributions in some cases, i.e., upgrade and reinstall - We address this by introducing an `Exclusions` type which tracks installed packages to ignore during selection - There's a new `ResolvedDist` wrapper with `Installed(InstalledDist)` and `Installable(Dist)` variants - This lets us pass already installed distributions throughout the resolver The user-facing behavior is thoroughly covered in the tests, but briefly: - Installing a package that depends on an already-installed package prefers the local version over the index - Installing a package with a name that matches an already-installed URL package does not reinstall from the index - Reinstalling (--reinstall) a package by name _will_ pull from the index even if an already-installed URL package is present - To reinstall the URL package, you must specify the URL in the request Closes #1661 Addresses: - #1476 - #1856 - #2093 - #2282 - #2383 - #2560 ## Test plan - [x] Reproduction at `charlesnicholson/uv-pep420-bug` passes - [x] Unit test for editable package ([#1476](#1476)) - [x] Unit test for previously installed package with empty registry - [x] Unit test for local non-editable package - [x] Unit test for new version available locally but not in registry ([#2093](#2093)) - ~[ ] Unit test for wheel not available in registry but already installed locally ([#2282](#2282 (seems complicated and not worthwhile) - [x] Unit test for install from URL dependency then with matching version ([#2383](#2383)) - [x] Unit test for install of new package that depends on installed package does not change version ([#2560](#2560)) - [x] Unit test that `pip compile` does _not_ consider installed packages
This issue is still persistent in my pipelines using uv 0.1.29. My test scenario: docker run -it --rm alpine:3.18 sh apk add python3 py3-pip
apk add py3-mysqlclient
apk add curl
curl -LsSf https://astral.sh/uv/install.sh | sh
source $HOME/.cargo/env
uv pip install --system mysqlclient==2.1.1 |
I can take a look. |
Oh, I think the issue here is that those packages are installed as eggs, which we don't support:
|
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
While trying to implement uv in my current pipeline I came across an issue regarding dependencies.
To sketch a summary of my setup.
I'm running my pipeline in alpine, which brings some challenges. Some packages cannot be easily compiled (and don't have a wheel available), which is why I use the extra index https://github.com/alpine-wheels/index .
I use that index for packages like
mysqlcient
andreportlab
.My pipeline also wants to install cryptography==41.0.3, but because cryptography is available in the alpine-wheel index, it tries to install it from there. Though cryptography already has available wheels via pypi, so I don't want it to install via the alpine-wheels repo.
My thought was to first run uv once to only install cryptography, so I dont use the index. And after that I run uv with my normal dependencies via pyproject.toml. But it appears that uv doesn't see the already installed cryptography.
Because I run uv in a pipeline I use the --system flag.
See the output below:
The text was updated successfully, but these errors were encountered: