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_requirements::{RequirementsSource, RequirementsSpecification};
|
||||||
use uv_resolver::{
|
use uv_resolver::{
|
||||||
DependencyMode, ExcludeNewer, FlatIndex, InMemoryIndex, Lock, OptionsBuilder, PreReleaseMode,
|
DependencyMode, ExcludeNewer, FlatIndex, InMemoryIndex, Lock, OptionsBuilder, PreReleaseMode,
|
||||||
ResolutionMode,
|
Preference, ResolutionMode,
|
||||||
};
|
};
|
||||||
use uv_types::{BuildIsolation, HashStrategy, InFlight};
|
use uv_types::{BuildIsolation, HashStrategy, InFlight};
|
||||||
|
|
||||||
|
@ -255,6 +255,12 @@ pub(crate) async fn pip_install(
|
||||||
HashStrategy::None
|
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.
|
// Incorporate any index locations from the provided sources.
|
||||||
let index_locations =
|
let index_locations =
|
||||||
index_locations.combine(index_url, extra_index_urls, find_links, no_index);
|
index_locations.combine(index_url, extra_index_urls, find_links, no_index);
|
||||||
|
@ -340,6 +346,7 @@ pub(crate) async fn pip_install(
|
||||||
source_trees,
|
source_trees,
|
||||||
project,
|
project,
|
||||||
extras,
|
extras,
|
||||||
|
preferences,
|
||||||
site_packages.clone(),
|
site_packages.clone(),
|
||||||
&hasher,
|
&hasher,
|
||||||
&reinstall,
|
&reinstall,
|
||||||
|
|
|
@ -110,6 +110,7 @@ pub(crate) async fn resolve<InstalledPackages: InstalledPackagesProvider>(
|
||||||
source_trees: Vec<PathBuf>,
|
source_trees: Vec<PathBuf>,
|
||||||
project: Option<PackageName>,
|
project: Option<PackageName>,
|
||||||
extras: &ExtrasSpecification,
|
extras: &ExtrasSpecification,
|
||||||
|
preferences: Vec<Preference>,
|
||||||
installed_packages: InstalledPackages,
|
installed_packages: InstalledPackages,
|
||||||
hasher: &HashStrategy,
|
hasher: &HashStrategy,
|
||||||
reinstall: &Reinstall,
|
reinstall: &Reinstall,
|
||||||
|
@ -196,11 +197,10 @@ pub(crate) async fn resolve<InstalledPackages: InstalledPackagesProvider>(
|
||||||
// TODO(zanieb): Consider consuming these instead of cloning
|
// TODO(zanieb): Consider consuming these instead of cloning
|
||||||
let exclusions = Exclusions::new(reinstall.clone(), upgrade.clone());
|
let exclusions = Exclusions::new(reinstall.clone(), upgrade.clone());
|
||||||
|
|
||||||
// Prefer current site packages; filter out packages that are marked for reinstall or upgrade.
|
// Filter out any excluded distributions from the preferences.
|
||||||
let preferences = installed_packages
|
let preferences = preferences
|
||||||
.iter()
|
.into_iter()
|
||||||
.filter(|dist| !exclusions.contains(dist.name()))
|
.filter(|dist| !exclusions.contains(dist.name()))
|
||||||
.map(Preference::from_installed)
|
|
||||||
.collect::<Vec<_>>();
|
.collect::<Vec<_>>();
|
||||||
|
|
||||||
// Create a manifest of the requirements.
|
// Create a manifest of the requirements.
|
||||||
|
|
|
@ -24,7 +24,7 @@ use uv_interpreter::{PythonEnvironment, PythonVersion, SystemPython, Target};
|
||||||
use uv_requirements::{RequirementsSource, RequirementsSpecification};
|
use uv_requirements::{RequirementsSource, RequirementsSpecification};
|
||||||
use uv_resolver::{
|
use uv_resolver::{
|
||||||
DependencyMode, ExcludeNewer, FlatIndex, InMemoryIndex, OptionsBuilder, PreReleaseMode,
|
DependencyMode, ExcludeNewer, FlatIndex, InMemoryIndex, OptionsBuilder, PreReleaseMode,
|
||||||
ResolutionMode,
|
Preference, ResolutionMode,
|
||||||
};
|
};
|
||||||
use uv_types::{BuildIsolation, HashStrategy, InFlight};
|
use uv_types::{BuildIsolation, HashStrategy, InFlight};
|
||||||
|
|
||||||
|
@ -275,6 +275,12 @@ pub(crate) async fn pip_sync(
|
||||||
// Determine the set of installed packages.
|
// Determine the set of installed packages.
|
||||||
let site_packages = SitePackages::from_executable(&venv)?;
|
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()
|
let options = OptionsBuilder::new()
|
||||||
.resolution_mode(resolution_mode)
|
.resolution_mode(resolution_mode)
|
||||||
.prerelease_mode(prerelease_mode)
|
.prerelease_mode(prerelease_mode)
|
||||||
|
@ -290,6 +296,7 @@ pub(crate) async fn pip_sync(
|
||||||
source_trees,
|
source_trees,
|
||||||
project,
|
project,
|
||||||
&extras,
|
&extras,
|
||||||
|
preferences,
|
||||||
site_packages.clone(),
|
site_packages.clone(),
|
||||||
&hasher,
|
&hasher,
|
||||||
reinstall,
|
reinstall,
|
||||||
|
|
|
@ -96,6 +96,7 @@ pub(super) async fn do_lock(
|
||||||
let link_mode = LinkMode::default();
|
let link_mode = LinkMode::default();
|
||||||
let no_binary = NoBinary::default();
|
let no_binary = NoBinary::default();
|
||||||
let no_build = NoBuild::default();
|
let no_build = NoBuild::default();
|
||||||
|
let preferences = Vec::default();
|
||||||
let reinstall = Reinstall::default();
|
let reinstall = Reinstall::default();
|
||||||
let setup_py = SetupPyStrategy::default();
|
let setup_py = SetupPyStrategy::default();
|
||||||
let upgrade = Upgrade::default();
|
let upgrade = Upgrade::default();
|
||||||
|
@ -129,6 +130,7 @@ pub(super) async fn do_lock(
|
||||||
source_trees,
|
source_trees,
|
||||||
Some(project_name),
|
Some(project_name),
|
||||||
&extras,
|
&extras,
|
||||||
|
preferences,
|
||||||
EmptyInstalledPackages,
|
EmptyInstalledPackages,
|
||||||
&hasher,
|
&hasher,
|
||||||
&reinstall,
|
&reinstall,
|
||||||
|
|
|
@ -169,7 +169,11 @@ pub(crate) async fn update_environment(
|
||||||
|
|
||||||
// TODO(charlie): Respect project configuration.
|
// TODO(charlie): Respect project configuration.
|
||||||
let build_isolation = BuildIsolation::default();
|
let build_isolation = BuildIsolation::default();
|
||||||
|
let compile = false;
|
||||||
|
let concurrency = Concurrency::default();
|
||||||
let config_settings = ConfigSettings::default();
|
let config_settings = ConfigSettings::default();
|
||||||
|
let dry_run = false;
|
||||||
|
let extras = ExtrasSpecification::default();
|
||||||
let flat_index = FlatIndex::default();
|
let flat_index = FlatIndex::default();
|
||||||
let hasher = HashStrategy::default();
|
let hasher = HashStrategy::default();
|
||||||
let in_flight = InFlight::default();
|
let in_flight = InFlight::default();
|
||||||
|
@ -178,14 +182,11 @@ pub(crate) async fn update_environment(
|
||||||
let link_mode = LinkMode::default();
|
let link_mode = LinkMode::default();
|
||||||
let no_binary = NoBinary::default();
|
let no_binary = NoBinary::default();
|
||||||
let no_build = NoBuild::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 options = Options::default();
|
||||||
|
let preferences = Vec::default();
|
||||||
|
let reinstall = Reinstall::default();
|
||||||
|
let setup_py = SetupPyStrategy::default();
|
||||||
|
let upgrade = Upgrade::default();
|
||||||
|
|
||||||
// Create a build dispatch.
|
// Create a build dispatch.
|
||||||
let resolve_dispatch = BuildDispatch::new(
|
let resolve_dispatch = BuildDispatch::new(
|
||||||
|
@ -213,6 +214,7 @@ pub(crate) async fn update_environment(
|
||||||
spec.source_trees,
|
spec.source_trees,
|
||||||
spec.project,
|
spec.project,
|
||||||
&extras,
|
&extras,
|
||||||
|
preferences,
|
||||||
site_packages.clone(),
|
site_packages.clone(),
|
||||||
&hasher,
|
&hasher,
|
||||||
&reinstall,
|
&reinstall,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue