diff --git a/crates/uv-cli/src/lib.rs b/crates/uv-cli/src/lib.rs index 13af9ebe25d7..480acca82b89 100644 --- a/crates/uv-cli/src/lib.rs +++ b/crates/uv-cli/src/lib.rs @@ -2485,6 +2485,11 @@ pub struct PythonPinArgs { #[arg(long, overrides_with("no_resolved"), hide = true)] pub no_resolved: bool, + + /// Avoid validating the Python pin against the workspace in the current directory or any parent + /// directory. + #[arg(long)] + pub no_workspace: bool, } #[derive(Args)] diff --git a/crates/uv/src/commands/python/install.rs b/crates/uv/src/commands/python/install.rs index 79d594bbeab0..12b0ac61df7d 100644 --- a/crates/uv/src/commands/python/install.rs +++ b/crates/uv/src/commands/python/install.rs @@ -8,7 +8,6 @@ use std::collections::BTreeSet; use std::fmt::Write; use std::path::PathBuf; use tracing::debug; -use uv_cache::Cache; use uv_client::Connectivity; use uv_configuration::PreviewMode; use uv_fs::CWD; @@ -31,8 +30,7 @@ pub(crate) async fn install( native_tls: bool, connectivity: Connectivity, preview: PreviewMode, - isolated: bool, - _cache: &Cache, + no_config: bool, printer: Printer, ) -> Result { if preview.is_disabled() { @@ -47,12 +45,12 @@ pub(crate) async fn install( let targets = targets.into_iter().collect::>(); let requests: Vec<_> = if targets.is_empty() { - // Read from the version file, unless `isolated` was requested - let version_file_requests = if isolated { + // Read from the version file, unless `--no-config` was requested + let version_file_requests = if no_config { if PathBuf::from(PYTHON_VERSION_FILENAME).exists() { - debug!("Ignoring `.python-version` file due to isolated mode"); + debug!("Ignoring `.python-version` file due to `--no-config`"); } else if PathBuf::from(PYTHON_VERSIONS_FILENAME).exists() { - debug!("Ignoring `.python-versions` file due to isolated mode"); + debug!("Ignoring `.python-versions` file due to `--no-config`"); } None } else { diff --git a/crates/uv/src/commands/python/pin.rs b/crates/uv/src/commands/python/pin.rs index 0038b42c0aa4..fb4336e70d9a 100644 --- a/crates/uv/src/commands/python/pin.rs +++ b/crates/uv/src/commands/python/pin.rs @@ -25,7 +25,7 @@ pub(crate) async fn pin( resolved: bool, python_preference: PythonPreference, preview: PreviewMode, - isolated: bool, + no_workspace: bool, cache: &Cache, printer: Printer, ) -> Result { @@ -33,7 +33,7 @@ pub(crate) async fn pin( warn_user_once!("`uv python pin` is experimental and may change without warning"); } - let virtual_project = if isolated { + let virtual_project = if no_workspace { None } else { match VirtualProject::discover(&CWD, &DiscoveryOptions::default()).await { diff --git a/crates/uv/src/lib.rs b/crates/uv/src/lib.rs index e1eff7477b8b..1bf03f713cca 100644 --- a/crates/uv/src/lib.rs +++ b/crates/uv/src/lib.rs @@ -773,17 +773,13 @@ async fn run(cli: Cli) -> Result { let args = settings::PythonInstallSettings::resolve(args, filesystem); show_settings!(args); - // Initialize the cache. - let cache = cache.init()?; - commands::python_install( args.targets, args.reinstall, globals.native_tls, globals.connectivity, globals.preview, - globals.isolated, - &cache, + cli.no_config || globals.isolated, printer, ) .await @@ -829,7 +825,7 @@ async fn run(cli: Cli) -> Result { args.resolved, globals.python_preference, globals.preview, - globals.isolated, + args.no_workspace || globals.isolated, &cache, printer, ) diff --git a/crates/uv/src/settings.rs b/crates/uv/src/settings.rs index 5c7e5b59e658..117b6df85d0e 100644 --- a/crates/uv/src/settings.rs +++ b/crates/uv/src/settings.rs @@ -503,6 +503,7 @@ impl PythonFindSettings { pub(crate) struct PythonPinSettings { pub(crate) request: Option, pub(crate) resolved: bool, + pub(crate) no_workspace: bool, } impl PythonPinSettings { @@ -513,11 +514,13 @@ impl PythonPinSettings { request, no_resolved, resolved, + no_workspace, } = args; Self { request, resolved: flag(resolved, no_resolved).unwrap_or(false), + no_workspace, } } }