mirror of
https://github.com/astral-sh/uv.git
synced 2025-10-02 06:51:14 +00:00
Move preference behavior out of resolve (#3919)
## Summary Decoupling this behavior to give more control to clients. No change in behavior.
This commit is contained in:
parent
4859a27948
commit
a1a5155d34
5 changed files with 31 additions and 13 deletions
|
@ -26,7 +26,7 @@ use uv_normalize::PackageName;
|
|||
use uv_requirements::{RequirementsSource, RequirementsSpecification};
|
||||
use uv_resolver::{
|
||||
DependencyMode, ExcludeNewer, FlatIndex, InMemoryIndex, Lock, OptionsBuilder, PreReleaseMode,
|
||||
ResolutionMode,
|
||||
Preference, ResolutionMode,
|
||||
};
|
||||
use uv_types::{BuildIsolation, HashStrategy, InFlight};
|
||||
|
||||
|
@ -255,6 +255,12 @@ pub(crate) async fn pip_install(
|
|||
HashStrategy::None
|
||||
};
|
||||
|
||||
// When resolving, prefer current site packages.
|
||||
let preferences = site_packages
|
||||
.iter()
|
||||
.map(Preference::from_installed)
|
||||
.collect::<Vec<_>>();
|
||||
|
||||
// Incorporate any index locations from the provided sources.
|
||||
let index_locations =
|
||||
index_locations.combine(index_url, extra_index_urls, find_links, no_index);
|
||||
|
@ -340,6 +346,7 @@ pub(crate) async fn pip_install(
|
|||
source_trees,
|
||||
project,
|
||||
extras,
|
||||
preferences,
|
||||
site_packages.clone(),
|
||||
&hasher,
|
||||
&reinstall,
|
||||
|
|
|
@ -110,6 +110,7 @@ pub(crate) async fn resolve<InstalledPackages: InstalledPackagesProvider>(
|
|||
source_trees: Vec<PathBuf>,
|
||||
project: Option<PackageName>,
|
||||
extras: &ExtrasSpecification,
|
||||
preferences: Vec<Preference>,
|
||||
installed_packages: InstalledPackages,
|
||||
hasher: &HashStrategy,
|
||||
reinstall: &Reinstall,
|
||||
|
@ -196,11 +197,10 @@ pub(crate) async fn resolve<InstalledPackages: InstalledPackagesProvider>(
|
|||
// TODO(zanieb): Consider consuming these instead of cloning
|
||||
let exclusions = Exclusions::new(reinstall.clone(), upgrade.clone());
|
||||
|
||||
// Prefer current site packages; filter out packages that are marked for reinstall or upgrade.
|
||||
let preferences = installed_packages
|
||||
.iter()
|
||||
// Filter out any excluded distributions from the preferences.
|
||||
let preferences = preferences
|
||||
.into_iter()
|
||||
.filter(|dist| !exclusions.contains(dist.name()))
|
||||
.map(Preference::from_installed)
|
||||
.collect::<Vec<_>>();
|
||||
|
||||
// Create a manifest of the requirements.
|
||||
|
|
|
@ -24,7 +24,7 @@ use uv_interpreter::{PythonEnvironment, PythonVersion, SystemPython, Target};
|
|||
use uv_requirements::{RequirementsSource, RequirementsSpecification};
|
||||
use uv_resolver::{
|
||||
DependencyMode, ExcludeNewer, FlatIndex, InMemoryIndex, OptionsBuilder, PreReleaseMode,
|
||||
ResolutionMode,
|
||||
Preference, ResolutionMode,
|
||||
};
|
||||
use uv_types::{BuildIsolation, HashStrategy, InFlight};
|
||||
|
||||
|
@ -275,6 +275,12 @@ pub(crate) async fn pip_sync(
|
|||
// Determine the set of installed packages.
|
||||
let site_packages = SitePackages::from_executable(&venv)?;
|
||||
|
||||
// When resolving, prefer current site packages.
|
||||
let preferences = site_packages
|
||||
.iter()
|
||||
.map(Preference::from_installed)
|
||||
.collect::<Vec<_>>();
|
||||
|
||||
let options = OptionsBuilder::new()
|
||||
.resolution_mode(resolution_mode)
|
||||
.prerelease_mode(prerelease_mode)
|
||||
|
@ -290,6 +296,7 @@ pub(crate) async fn pip_sync(
|
|||
source_trees,
|
||||
project,
|
||||
&extras,
|
||||
preferences,
|
||||
site_packages.clone(),
|
||||
&hasher,
|
||||
reinstall,
|
||||
|
|
|
@ -96,6 +96,7 @@ pub(super) async fn do_lock(
|
|||
let link_mode = LinkMode::default();
|
||||
let no_binary = NoBinary::default();
|
||||
let no_build = NoBuild::default();
|
||||
let preferences = Vec::default();
|
||||
let reinstall = Reinstall::default();
|
||||
let setup_py = SetupPyStrategy::default();
|
||||
let upgrade = Upgrade::default();
|
||||
|
@ -129,6 +130,7 @@ pub(super) async fn do_lock(
|
|||
source_trees,
|
||||
Some(project_name),
|
||||
&extras,
|
||||
preferences,
|
||||
EmptyInstalledPackages,
|
||||
&hasher,
|
||||
&reinstall,
|
||||
|
|
|
@ -169,7 +169,11 @@ pub(crate) async fn update_environment(
|
|||
|
||||
// TODO(charlie): Respect project configuration.
|
||||
let build_isolation = BuildIsolation::default();
|
||||
let compile = false;
|
||||
let concurrency = Concurrency::default();
|
||||
let config_settings = ConfigSettings::default();
|
||||
let dry_run = false;
|
||||
let extras = ExtrasSpecification::default();
|
||||
let flat_index = FlatIndex::default();
|
||||
let hasher = HashStrategy::default();
|
||||
let in_flight = InFlight::default();
|
||||
|
@ -178,14 +182,11 @@ pub(crate) async fn update_environment(
|
|||
let link_mode = LinkMode::default();
|
||||
let no_binary = NoBinary::default();
|
||||
let no_build = NoBuild::default();
|
||||
let setup_py = SetupPyStrategy::default();
|
||||
let concurrency = Concurrency::default();
|
||||
let reinstall = Reinstall::default();
|
||||
let compile = false;
|
||||
let dry_run = false;
|
||||
let extras = ExtrasSpecification::default();
|
||||
let upgrade = Upgrade::default();
|
||||
let options = Options::default();
|
||||
let preferences = Vec::default();
|
||||
let reinstall = Reinstall::default();
|
||||
let setup_py = SetupPyStrategy::default();
|
||||
let upgrade = Upgrade::default();
|
||||
|
||||
// Create a build dispatch.
|
||||
let resolve_dispatch = BuildDispatch::new(
|
||||
|
@ -213,6 +214,7 @@ pub(crate) async fn update_environment(
|
|||
spec.source_trees,
|
||||
spec.project,
|
||||
&extras,
|
||||
preferences,
|
||||
site_packages.clone(),
|
||||
&hasher,
|
||||
&reinstall,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue