diff --git a/Cargo.lock b/Cargo.lock index 42a4fa3c2..ab8953cdd 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2300,12 +2300,6 @@ dependencies = [ "once_cell", ] -[[package]] -name = "is_ci" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7655c9839580ee829dfacba1d1278c2b7883e50a277ff7541299489d6bdfdc45" - [[package]] name = "is_terminal_polyfill" version = "1.70.1" @@ -2623,12 +2617,6 @@ checksum = "5f98efec8807c63c752b5bd61f862c165c115b0a35685bdcfd9238c7aeb592b7" dependencies = [ "cfg-if", "miette-derive", - "owo-colors", - "supports-color", - "supports-hyperlinks", - "supports-unicode", - "terminal_size", - "textwrap", "unicode-width 0.1.14", ] @@ -4469,27 +4457,6 @@ version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" -[[package]] -name = "supports-color" -version = "3.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c64fc7232dd8d2e4ac5ce4ef302b1d81e0b80d055b9d77c7c4f51f6aa4c867d6" -dependencies = [ - "is_ci", -] - -[[package]] -name = "supports-hyperlinks" -version = "3.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "804f44ed3c63152de6a9f90acbea1a110441de43006ea51bcce8f436196a288b" - -[[package]] -name = "supports-unicode" -version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7401a30af6cb5818bb64852270bb722533397edcfc7344954a38f420819ece2" - [[package]] name = "svg" version = "0.18.0" @@ -5437,7 +5404,6 @@ dependencies = [ "indoc", "insta", "itertools 0.14.0", - "miette", "nix", "open", "owo-colors", diff --git a/Cargo.toml b/Cargo.toml index f812b996f..585781ec0 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -132,7 +132,6 @@ junction = { version = "1.2.0" } mailparse = { version = "0.16.0" } md-5 = { version = "0.10.6" } memchr = { version = "2.7.4" } -miette = { version = "7.2.0", features = ["fancy-no-backtrace"] } nanoid = { version = "0.4.0" } nix = { version = "0.30.0", features = ["signal"] } open = { version = "5.3.2" } diff --git a/crates/uv-warnings/src/lib.rs b/crates/uv-warnings/src/lib.rs index a076682ef..e77c3c4f2 100644 --- a/crates/uv-warnings/src/lib.rs +++ b/crates/uv-warnings/src/lib.rs @@ -88,12 +88,23 @@ pub fn write_error_chain( err.to_string().trim() )?; for source in iter::successors(err.source(), |&err| err.source()) { - writeln!( - &mut stream, - " {}: {}", - "Caused by".color(color).bold(), - source.to_string().trim() - )?; + let msg = source.to_string(); + let mut lines = msg.lines(); + if let Some(first) = lines.next() { + let padding = " "; + let cause = "Caused by"; + let child_padding = " ".repeat(padding.len() + cause.len() + 2); + writeln!( + &mut stream, + "{}{}: {}", + padding, + cause.color(color).bold(), + first.trim() + )?; + for line in lines { + writeln!(&mut stream, "{}{}", child_padding, line.trim_end())?; + } + } } Ok(()) } diff --git a/crates/uv/Cargo.toml b/crates/uv/Cargo.toml index 97c0a5476..4a5459df5 100644 --- a/crates/uv/Cargo.toml +++ b/crates/uv/Cargo.toml @@ -87,7 +87,6 @@ indicatif = { workspace = true } indoc = { workspace = true } itertools = { workspace = true } h2 = { workspace = true } -miette = { workspace = true, features = ["fancy-no-backtrace"] } open = { workspace = true } owo-colors = { workspace = true } petgraph = { workspace = true } diff --git a/crates/uv/src/commands/build_frontend.rs b/crates/uv/src/commands/build_frontend.rs index e19f51957..9a5fcbb96 100644 --- a/crates/uv/src/commands/build_frontend.rs +++ b/crates/uv/src/commands/build_frontend.rs @@ -48,7 +48,7 @@ use crate::commands::ExitStatus; use crate::commands::pip::operations; use crate::commands::project::{ProjectError, find_requires_python}; use crate::commands::reporters::PythonDownloadReporter; -use crate::printer::Printer; +use crate::printer::{Printer, Stderr}; use crate::settings::ResolverSettings; #[derive(Debug, Error)] @@ -385,15 +385,12 @@ async fn build_impl( } } Err(err) => { - #[derive(Debug, miette::Diagnostic, thiserror::Error)] - #[error("Failed to build `{source}`", source = source.cyan())] - #[diagnostic()] + #[derive(Debug, Error)] + #[error("Failed to build `{source}`")] struct Diagnostic { source: String, #[source] cause: anyhow::Error, - #[help] - help: Option, } let help = if let Error::Extract(uv_extract::Error::Tar(err)) = &err { @@ -421,12 +418,19 @@ async fn build_impl( None }; - let report = miette::Report::new(Diagnostic { + let diagnostic = Diagnostic { source: source.to_string(), cause: err.into(), - help, - }); - anstream::eprint!("{report:?}"); + }; + let _ = uv_warnings::write_error_chain( + &diagnostic, + Stderr::Enabled, + "error", + owo_colors::AnsiColors::Red, + ); + if let Some(help) = help { + let _ = writeln!(Stderr::Enabled, "\n{}: {help}", "hint".bold().cyan()); + } success = false; } diff --git a/crates/uv/src/commands/diagnostics.rs b/crates/uv/src/commands/diagnostics.rs index 2ee04220a..137476742 100644 --- a/crates/uv/src/commands/diagnostics.rs +++ b/crates/uv/src/commands/diagnostics.rs @@ -1,8 +1,10 @@ +use std::fmt::Write; use std::str::FromStr; use std::sync::{Arc, LazyLock}; use owo_colors::OwoColorize; use rustc_hash::FxHashMap; +use thiserror::Error; use version_ranges::Ranges; use uv_distribution_types::{ @@ -11,8 +13,10 @@ use uv_distribution_types::{ use uv_normalize::PackageName; use uv_pep440::Version; use uv_resolver::SentinelRange; +use uv_warnings::write_error_chain; use crate::commands::pip; +use crate::printer::Stderr; static SUGGESTIONS: LazyLock> = LazyLock::new(|| { let suggestions: Vec<(String, String)> = @@ -77,7 +81,7 @@ impl OperationDiagnostic { if let Some(context) = self.context { no_solution_context(&err, context); } else if let Some(hint) = self.hint { - no_solution_hint(err, hint); + no_solution_hint(err, &hint); } else { no_solution(&err); } @@ -122,9 +126,14 @@ impl OperationDiagnostic { } pip::operations::Error::Requirements(err) => { if let Some(context) = self.context { - let err = miette::Report::msg(format!("{err}")) + let err = anyhow::Error::from(err) .context(format!("Failed to resolve {context} requirement")); - anstream::eprint!("{err:?}"); + let _ = write_error_chain( + err.as_ref(), + Stderr::Enabled, + "error", + owo_colors::AnsiColors::Red, + ); None } else { Some(pip::operations::Error::Requirements(err)) @@ -133,7 +142,7 @@ impl OperationDiagnostic { pip::operations::Error::Resolve(uv_resolver::ResolveError::Client(err)) if !self.native_tls && err.is_ssl() => { - native_tls_hint(err); + native_tls_hint(&err); None } pip::operations::Error::OutdatedEnvironment => { @@ -145,6 +154,14 @@ impl OperationDiagnostic { } } +/// Display an error with an optional help message. +pub(crate) fn show_error(err: &dyn std::error::Error, help: Option<&str>) { + let _ = write_error_chain(err, Stderr::Enabled, "error", owo_colors::AnsiColors::Red); + if let Some(help) = help { + let _ = writeln!(Stderr::Enabled, "\n{}: {help}", "hint".bold().cyan()); + } +} + /// Render a distribution failure (read, download or build) with a help message. pub(crate) fn dist_error( kind: DistErrorKind, @@ -153,16 +170,13 @@ pub(crate) fn dist_error( cause: Arc, help: Option, ) { - #[derive(Debug, miette::Diagnostic, thiserror::Error)] + #[derive(Debug, Error)] #[error("{kind} `{dist}`")] - #[diagnostic()] struct Diagnostic { kind: DistErrorKind, dist: Box, #[source] cause: Arc, - #[help] - help: Option, } let help = help.or_else(|| { @@ -184,13 +198,8 @@ pub(crate) fn dist_error( } }) }); - let report = miette::Report::new(Diagnostic { - kind, - dist, - cause, - help, - }); - anstream::eprint!("{report:?}"); + let err = Diagnostic { kind, dist, cause }; + show_error(&err, help.as_deref()); } /// Render a requested distribution failure (read, download or build) with a help message. @@ -201,16 +210,13 @@ pub(crate) fn requested_dist_error( cause: Arc, help: Option, ) { - #[derive(Debug, miette::Diagnostic, thiserror::Error)] + #[derive(Debug, Error)] #[error("{kind} `{dist}`")] - #[diagnostic()] struct Diagnostic { kind: DistErrorKind, dist: Box, #[source] cause: Arc, - #[help] - help: Option, } let help = help.or_else(|| { @@ -232,13 +238,8 @@ pub(crate) fn requested_dist_error( } }) }); - let report = miette::Report::new(Diagnostic { - kind, - dist, - cause, - help, - }); - anstream::eprint!("{report:?}"); + let err = Diagnostic { kind, dist, cause }; + show_error(&err, help.as_deref()); } /// Render an error in fetching a package's dependencies. @@ -249,16 +250,13 @@ pub(crate) fn dependencies_error( chain: &DerivationChain, help: Option, ) { - #[derive(Debug, miette::Diagnostic, thiserror::Error)] - #[error("Failed to resolve dependencies for `{}` ({})", name.cyan(), format!("v{version}").cyan())] - #[diagnostic()] + #[derive(Debug, Error)] + #[error("Failed to resolve dependencies for `{name}` (v{version})")] struct Diagnostic { name: PackageName, version: Version, #[source] cause: Box, - #[help] - help: Option, } let help = help.or_else(|| { @@ -280,83 +278,62 @@ pub(crate) fn dependencies_error( } }) }); - let report = miette::Report::new(Diagnostic { + let err = Diagnostic { name: name.clone(), version: version.clone(), cause: error, - help, - }); - anstream::eprint!("{report:?}"); + }; + show_error(&err, help.as_deref()); } /// Render a [`uv_resolver::NoSolutionError`]. pub(crate) fn no_solution(err: &uv_resolver::NoSolutionError) { - let report = miette::Report::msg(format!("{err}")).context(err.header()); - anstream::eprint!("{report:?}"); + let err = anyhow::Error::msg(format!("{err}")).context(err.header().to_string()); + let _ = write_error_chain( + err.as_ref(), + Stderr::Enabled, + "error", + owo_colors::AnsiColors::Red, + ); } /// Render a [`uv_resolver::NoSolutionError`] with dedicated context. pub(crate) fn no_solution_context(err: &uv_resolver::NoSolutionError, context: &'static str) { - let report = miette::Report::msg(format!("{err}")).context(err.header().with_context(context)); - anstream::eprint!("{report:?}"); + let err = anyhow::Error::msg(format!("{err}")) + .context(err.header().with_context(context).to_string()); + let _ = write_error_chain( + err.as_ref(), + Stderr::Enabled, + "error", + owo_colors::AnsiColors::Red, + ); } /// Render a [`uv_resolver::NoSolutionError`] with a help message. -pub(crate) fn no_solution_hint(err: Box, help: String) { - #[derive(Debug, miette::Diagnostic, thiserror::Error)] +pub(crate) fn no_solution_hint(err: Box, help: &str) { + #[derive(Debug, Error)] #[error("{header}")] - #[diagnostic()] - struct Error { + struct HeaderError { /// The header to render in the error message. header: uv_resolver::NoSolutionHeader, /// The underlying error. #[source] err: Box, - - /// The help message to display. - #[help] - help: String, } let header = err.header(); - let report = miette::Report::new(Error { header, err, help }); - anstream::eprint!("{report:?}"); + let err = HeaderError { header, err }; + show_error(&err, Some(help)); } -/// Render a [`uv_resolver::NoSolutionError`] with a help message. -pub(crate) fn native_tls_hint(err: uv_client::Error) { - #[derive(Debug, miette::Diagnostic)] - #[diagnostic()] - struct Error { - /// The underlying error. - err: uv_client::Error, - - /// The help message to display. - #[help] - help: String, - } - - impl std::fmt::Display for Error { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - write!(f, "{}", self.err) - } - } - - impl std::error::Error for Error { - fn source(&self) -> Option<&(dyn std::error::Error + 'static)> { - self.err.source() - } - } - - let report = miette::Report::new(Error { - err, - help: format!( - "Consider enabling use of system TLS certificates with the `{}` command-line flag", - "--native-tls".green() - ), - }); - anstream::eprint!("{report:?}"); +/// Render an SSL error with a hint about native TLS. +pub(crate) fn native_tls_hint(err: &uv_client::Error) { + let hint = format!( + "Consider enabling use of system TLS certificates with the `{}` command-line flag", + "--native-tls".green() + ); + show_error(err, Some(&hint)); } /// Format a [`DerivationChain`] as a human-readable error message. diff --git a/crates/uv/src/commands/tool/run.rs b/crates/uv/src/commands/tool/run.rs index 06522c8c7..8942b52dc 100644 --- a/crates/uv/src/commands/tool/run.rs +++ b/crates/uv/src/commands/tool/run.rs @@ -4,7 +4,6 @@ use std::path::Path; use std::path::PathBuf; use std::str::FromStr; -use anstream::eprint; use anyhow::{Context, bail}; use console::Term; use itertools::Itertools; @@ -58,7 +57,7 @@ use crate::commands::reporters::PythonDownloadReporter; use crate::commands::tool::common::{matching_packages, refine_interpreter}; use crate::commands::tool::{Target, ToolRequest}; use crate::commands::{diagnostics, project::environment::CachedEnvironment}; -use crate::printer::Printer; +use crate::printer::{Printer, Stderr}; use crate::settings::ResolverInstallerSettings; use crate::settings::ResolverSettings; @@ -342,9 +341,13 @@ pub(crate) async fn run( } Err(ProjectError::Requirements(err)) => { - let err = miette::Report::msg(format!("{err}")) - .context("Failed to resolve `--with` requirement"); - eprint!("{err:?}"); + let err = anyhow::Error::from(err).context("Failed to resolve `--with` requirement"); + let _ = uv_warnings::write_error_chain( + err.as_ref(), + Stderr::Enabled, + "error", + owo_colors::AnsiColors::Red, + ); return Ok(ExitStatus::Failure); } Err(err) => return Err(err.into()), diff --git a/crates/uv/src/lib.rs b/crates/uv/src/lib.rs index d8d4dbb91..5129f5680 100644 --- a/crates/uv/src/lib.rs +++ b/crates/uv/src/lib.rs @@ -421,21 +421,6 @@ async fn run(mut cli: Cli) -> Result { anstream::ColorChoice::write_global(globals.color.into()); - miette::set_hook(Box::new(|_| { - Box::new( - miette::MietteHandlerOpts::new() - .break_words(false) - .word_separator(textwrap::WordSeparator::AsciiSpace) - .word_splitter(textwrap::WordSplitter::NoHyphenation) - .wrap_lines( - std::env::var(EnvVars::UV_NO_WRAP) - .map(|_| false) - .unwrap_or(true), - ) - .build(), - ) - }))?; - // Don't initialize the rayon threadpool yet, this is too costly when we're doing a noop sync. uv_configuration::RAYON_PARALLELISM.store(globals.concurrency.installs, Ordering::Relaxed); diff --git a/crates/uv/tests/it/auth.rs b/crates/uv/tests/it/auth.rs index 4ce3efa29..3a33d2697 100644 --- a/crates/uv/tests/it/auth.rs +++ b/crates/uv/tests/it/auth.rs @@ -148,10 +148,10 @@ fn add_package_native_auth() -> Result<()> { ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because anyio was not found in the package registry and your project depends on anyio, we can conclude that your project's requirements are unsatisfiable. + error: No solution found when resolving dependencies: + Caused by: Because anyio was not found in the package registry and your project depends on anyio, we can conclude that your project's requirements are unsatisfiable. - hint: An index URL (https://pypi-proxy.fly.dev/basic-auth/simple) could not be queried due to a lack of valid authentication credentials (401 Unauthorized). + hint: An index URL (https://pypi-proxy.fly.dev/basic-auth/simple) could not be queried due to a lack of valid authentication credentials (401 Unauthorized). help: If you want to add the package regardless of the failed resolution, provide the `--frozen` flag to skip locking and syncing. " ); diff --git a/crates/uv/tests/it/branching_urls.rs b/crates/uv/tests/it/branching_urls.rs index 29493ef14..308c76f3b 100644 --- a/crates/uv/tests/it/branching_urls.rs +++ b/crates/uv/tests/it/branching_urls.rs @@ -67,10 +67,10 @@ fn branching_urls_overlapping() -> Result<()> { ----- stdout ----- ----- stderr ----- - × Failed to resolve dependencies for `a` (v0.1.0) - ╰─▶ Requirements contain conflicting URLs for package `iniconfig` in split `python_full_version == '3.11.*'`: - - https://files.pythonhosted.org/packages/9b/dd/b3c12c6d707058fa947864b67f0c4e0c39ef8610988d7baea9578f3c48f3/iniconfig-1.1.1-py2.py3-none-any.whl - - https://files.pythonhosted.org/packages/ef/a6/62565a6e1cf69e10f5727360368e451d4b7f58beeac6173dc9db836a5b46/iniconfig-2.0.0-py3-none-any.whl + error: Failed to resolve dependencies for `a` (v0.1.0) + Caused by: Requirements contain conflicting URLs for package `iniconfig` in split `python_full_version == '3.11.*'`: + - https://files.pythonhosted.org/packages/9b/dd/b3c12c6d707058fa947864b67f0c4e0c39ef8610988d7baea9578f3c48f3/iniconfig-1.1.1-py2.py3-none-any.whl + - https://files.pythonhosted.org/packages/ef/a6/62565a6e1cf69e10f5727360368e451d4b7f58beeac6173dc9db836a5b46/iniconfig-2.0.0-py3-none-any.whl " ); @@ -135,11 +135,12 @@ fn root_package_splits_but_transitive_conflict() -> Result<()> { ----- stdout ----- ----- stderr ----- - × Failed to resolve dependencies for `b2` (v0.1.0) - ╰─▶ Requirements contain conflicting URLs for package `iniconfig` in split `python_full_version >= '3.12'`: - - https://files.pythonhosted.org/packages/9b/dd/b3c12c6d707058fa947864b67f0c4e0c39ef8610988d7baea9578f3c48f3/iniconfig-1.1.1-py2.py3-none-any.whl - - https://files.pythonhosted.org/packages/ef/a6/62565a6e1cf69e10f5727360368e451d4b7f58beeac6173dc9db836a5b46/iniconfig-2.0.0-py3-none-any.whl - help: `b2` (v0.1.0) was included because `a` (v0.1.0) depends on `b` (v0.1.0) which depends on `b2` + error: Failed to resolve dependencies for `b2` (v0.1.0) + Caused by: Requirements contain conflicting URLs for package `iniconfig` in split `python_full_version >= '3.12'`: + - https://files.pythonhosted.org/packages/9b/dd/b3c12c6d707058fa947864b67f0c4e0c39ef8610988d7baea9578f3c48f3/iniconfig-1.1.1-py2.py3-none-any.whl + - https://files.pythonhosted.org/packages/ef/a6/62565a6e1cf69e10f5727360368e451d4b7f58beeac6173dc9db836a5b46/iniconfig-2.0.0-py3-none-any.whl + + hint: `b2` (v0.1.0) was included because `a` (v0.1.0) depends on `b` (v0.1.0) which depends on `b2` " ); @@ -736,10 +737,10 @@ fn branching_urls_of_different_sources_conflict() -> Result<()> { ----- stdout ----- ----- stderr ----- - × Failed to resolve dependencies for `a` (v0.1.0) - ╰─▶ Requirements contain conflicting URLs for package `iniconfig` in split `python_full_version == '3.11.*'`: - - git+https://github.com/pytest-dev/iniconfig@93f5930e668c0d1ddf4597e38dd0dea4e2665e7a - - https://files.pythonhosted.org/packages/9b/dd/b3c12c6d707058fa947864b67f0c4e0c39ef8610988d7baea9578f3c48f3/iniconfig-1.1.1-py2.py3-none-any.whl + error: Failed to resolve dependencies for `a` (v0.1.0) + Caused by: Requirements contain conflicting URLs for package `iniconfig` in split `python_full_version == '3.11.*'`: + - git+https://github.com/pytest-dev/iniconfig@93f5930e668c0d1ddf4597e38dd0dea4e2665e7a + - https://files.pythonhosted.org/packages/9b/dd/b3c12c6d707058fa947864b67f0c4e0c39ef8610988d7baea9578f3c48f3/iniconfig-1.1.1-py2.py3-none-any.whl " ); diff --git a/crates/uv/tests/it/build.rs b/crates/uv/tests/it/build.rs index 73b746cb1..db6715957 100644 --- a/crates/uv/tests/it/build.rs +++ b/crates/uv/tests/it/build.rs @@ -92,16 +92,16 @@ fn build_basic() -> Result<()> { fs_err::remove_dir_all(project.child("dist"))?; // Error if there's nothing to build. - uv_snapshot!(&filters, context.build(), @r###" + uv_snapshot!(&filters, context.build(), @r" success: false exit_code: 2 ----- stdout ----- ----- stderr ----- Building source distribution... - × Failed to build `[TEMP_DIR]/` - ╰─▶ [TEMP_DIR]/ does not appear to be a Python project, as neither `pyproject.toml` nor `setup.py` are present in the directory - "###); + error: Failed to build `[TEMP_DIR]/` + Caused by: [TEMP_DIR]/ does not appear to be a Python project, as neither `pyproject.toml` nor `setup.py` are present in the directory + "); // Build to a specified path. uv_snapshot!(&filters, context.build().arg("--out-dir").arg("out").current_dir(project.path()), @r###" @@ -352,26 +352,26 @@ fn build_wheel_from_sdist() -> Result<()> { .assert(predicate::path::missing()); // Error if `--wheel` is not specified. - uv_snapshot!(&filters, context.build().arg("./dist/project-0.1.0.tar.gz").current_dir(&project), @r###" + uv_snapshot!(&filters, context.build().arg("./dist/project-0.1.0.tar.gz").current_dir(&project), @r" success: false exit_code: 2 ----- stdout ----- ----- stderr ----- - × Failed to build `[TEMP_DIR]/project/dist/project-0.1.0.tar.gz` - ╰─▶ Pass `--wheel` explicitly to build a wheel from a source distribution - "###); + error: Failed to build `[TEMP_DIR]/project/dist/project-0.1.0.tar.gz` + Caused by: Pass `--wheel` explicitly to build a wheel from a source distribution + "); // Error if `--sdist` is specified. - uv_snapshot!(&filters, context.build().arg("./dist/project-0.1.0.tar.gz").arg("--sdist").current_dir(&project), @r###" + uv_snapshot!(&filters, context.build().arg("./dist/project-0.1.0.tar.gz").arg("--sdist").current_dir(&project), @r" success: false exit_code: 2 ----- stdout ----- ----- stderr ----- - × Failed to build `[TEMP_DIR]/project/dist/project-0.1.0.tar.gz` - ╰─▶ Building an `--sdist` from a source distribution is not supported - "###); + error: Failed to build `[TEMP_DIR]/project/dist/project-0.1.0.tar.gz` + Caused by: Building an `--sdist` from a source distribution is not supported + "); // Build the wheel from the sdist. uv_snapshot!(&filters, context.build().arg("./dist/project-0.1.0.tar.gz").arg("--wheel").current_dir(&project), @r###" @@ -394,15 +394,15 @@ fn build_wheel_from_sdist() -> Result<()> { .assert(predicate::path::is_file()); // Passing a wheel is an error. - uv_snapshot!(&filters, context.build().arg("./dist/project-0.1.0-py3-none-any.whl").arg("--wheel").current_dir(&project), @r###" + uv_snapshot!(&filters, context.build().arg("./dist/project-0.1.0-py3-none-any.whl").arg("--wheel").current_dir(&project), @r" success: false exit_code: 2 ----- stdout ----- ----- stderr ----- - × Failed to build `[TEMP_DIR]/project/dist/project-0.1.0-py3-none-any.whl` - ╰─▶ `dist/project-0.1.0-py3-none-any.whl` is not a valid build source. Expected to receive a source directory, or a source distribution ending in one of: `.tar.gz`, `.zip`, `.tar.bz2`, `.tar.lz`, `.tar.lzma`, `.tar.xz`, `.tar.zst`, `.tar`, `.tbz`, `.tgz`, `.tlz`, or `.txz`. - "###); + error: Failed to build `[TEMP_DIR]/project/dist/project-0.1.0-py3-none-any.whl` + Caused by: `dist/project-0.1.0-py3-none-any.whl` is not a valid build source. Expected to receive a source directory, or a source distribution ending in one of: `.tar.gz`, `.zip`, `.tar.bz2`, `.tar.lz`, `.tar.lzma`, `.tar.xz`, `.tar.zst`, `.tar`, `.tbz`, `.tgz`, `.tlz`, or `.txz`. + "); Ok(()) } @@ -454,7 +454,7 @@ fn build_fail() -> Result<()> { )?; // Build the specified path. - uv_snapshot!(&filters, context.build().arg("project"), @r###" + uv_snapshot!(&filters, context.build().arg("project"), @r#" success: false exit_code: 2 ----- stdout ----- @@ -473,11 +473,11 @@ fn build_fail() -> Result<()> { File "", line 2 from setuptools import setup IndentationError: unexpected indent - × Failed to build `[TEMP_DIR]/project` - ├─▶ The build backend returned an error - ╰─▶ Call to `setuptools.build_meta.build_sdist` failed (exit status: 1) - hint: This usually indicates a problem with the package or the build environment. - "###); + error: Failed to build `[TEMP_DIR]/project` + Caused by: The build backend returned an error + Caused by: Call to `setuptools.build_meta.build_sdist` failed (exit status: 1) + hint: This usually indicates a problem with the package or the build environment. + "#); Ok(()) } @@ -790,7 +790,7 @@ fn build_all_with_failure() -> Result<()> { )?; // Build all the packages - uv_snapshot!(&filters, context.build().arg("--all").arg("--no-build-logs").current_dir(&project), @r###" + uv_snapshot!(&filters, context.build().arg("--all").arg("--no-build-logs").current_dir(&project), @r" success: false exit_code: 2 ----- stdout ----- @@ -803,13 +803,13 @@ fn build_all_with_failure() -> Result<()> { [PKG] Building wheel from source distribution... Successfully built dist/member_a-0.1.0.tar.gz Successfully built dist/member_a-0.1.0-py3-none-any.whl - × Failed to build `member-b @ [TEMP_DIR]/project/packages/member_b` - ├─▶ The build backend returned an error - ╰─▶ Call to `setuptools.build_meta.build_sdist` failed (exit status: 1) - hint: This usually indicates a problem with the package or the build environment. + error: Failed to build `member-b @ [TEMP_DIR]/project/packages/member_b` + Caused by: The build backend returned an error + Caused by: Call to `setuptools.build_meta.build_sdist` failed (exit status: 1) + hint: This usually indicates a problem with the package or the build environment. Successfully built dist/project-0.1.0.tar.gz Successfully built dist/project-0.1.0-py3-none-any.whl - "###); + "); // project and member_a should be built, regardless of member_b build failure project @@ -869,18 +869,18 @@ fn build_constraints() -> Result<()> { .touch()?; project.child("README").touch()?; - uv_snapshot!(&filters, context.build().arg("--build-constraint").arg("constraints.txt").current_dir(&project), @r###" + uv_snapshot!(&filters, context.build().arg("--build-constraint").arg("constraints.txt").current_dir(&project), @r" success: false exit_code: 2 ----- stdout ----- ----- stderr ----- Building source distribution... - × Failed to build `[TEMP_DIR]/project` - ├─▶ Failed to resolve requirements from `build-system.requires` - ├─▶ No solution found when resolving: `hatchling>=1.0` - ╰─▶ Because you require hatchling>=1.0 and hatchling==0.1.0, we can conclude that your requirements are unsatisfiable. - "###); + error: Failed to build `[TEMP_DIR]/project` + Caused by: Failed to resolve requirements from `build-system.requires` + Caused by: No solution found when resolving: `hatchling>=1.0` + Caused by: Because you require hatchling>=1.0 and hatchling==0.1.0, we can conclude that your requirements are unsatisfiable. + "); project .child("dist") @@ -955,25 +955,25 @@ fn build_sha() -> Result<()> { # via hatchling "})?; - uv_snapshot!(&filters, context.build().arg("--build-constraint").arg("constraints.txt").current_dir(&project), @r###" + uv_snapshot!(&filters, context.build().arg("--build-constraint").arg("constraints.txt").current_dir(&project), @r" success: false exit_code: 2 ----- stdout ----- ----- stderr ----- Building source distribution... - × Failed to build `[TEMP_DIR]/project` - ├─▶ Failed to install requirements from `build-system.requires` - ├─▶ Failed to download `hatchling==1.22.4` - ╰─▶ Hash mismatch for `hatchling==1.22.4` - - Expected: - sha256:a248cb506794bececcddeddb1678bc722f9cfcacf02f98f7c0af6b9ed893caf2 - sha256:e16da5bfc396af7b29daa3164851dd04991c994083f56cb054b5003675caecdc - - Computed: - sha256:f56da5bfc396af7b29daa3164851dd04991c994083f56cb054b5003675caecdc - "###); + error: Failed to build `[TEMP_DIR]/project` + Caused by: Failed to install requirements from `build-system.requires` + Caused by: Failed to download `hatchling==1.22.4` + Caused by: Hash mismatch for `hatchling==1.22.4` + + Expected: + sha256:a248cb506794bececcddeddb1678bc722f9cfcacf02f98f7c0af6b9ed893caf2 + sha256:e16da5bfc396af7b29daa3164851dd04991c994083f56cb054b5003675caecdc + + Computed: + sha256:f56da5bfc396af7b29daa3164851dd04991c994083f56cb054b5003675caecdc + "); project .child("dist") @@ -987,25 +987,25 @@ fn build_sha() -> Result<()> { fs_err::remove_dir_all(project.child("dist"))?; // Reject a missing hash with `--requires-hashes`. - uv_snapshot!(&filters, context.build().arg("--build-constraint").arg("constraints.txt").arg("--require-hashes").current_dir(&project), @r###" + uv_snapshot!(&filters, context.build().arg("--build-constraint").arg("constraints.txt").arg("--require-hashes").current_dir(&project), @r" success: false exit_code: 2 ----- stdout ----- ----- stderr ----- Building source distribution... - × Failed to build `[TEMP_DIR]/project` - ├─▶ Failed to install requirements from `build-system.requires` - ├─▶ Failed to download `hatchling==1.22.4` - ╰─▶ Hash mismatch for `hatchling==1.22.4` - - Expected: - sha256:a248cb506794bececcddeddb1678bc722f9cfcacf02f98f7c0af6b9ed893caf2 - sha256:e16da5bfc396af7b29daa3164851dd04991c994083f56cb054b5003675caecdc - - Computed: - sha256:f56da5bfc396af7b29daa3164851dd04991c994083f56cb054b5003675caecdc - "###); + error: Failed to build `[TEMP_DIR]/project` + Caused by: Failed to install requirements from `build-system.requires` + Caused by: Failed to download `hatchling==1.22.4` + Caused by: Hash mismatch for `hatchling==1.22.4` + + Expected: + sha256:a248cb506794bececcddeddb1678bc722f9cfcacf02f98f7c0af6b9ed893caf2 + sha256:e16da5bfc396af7b29daa3164851dd04991c994083f56cb054b5003675caecdc + + Computed: + sha256:f56da5bfc396af7b29daa3164851dd04991c994083f56cb054b5003675caecdc + "); project .child("dist") @@ -1022,18 +1022,18 @@ fn build_sha() -> Result<()> { let constraints = project.child("constraints.txt"); constraints.write_str("hatchling==1.22.4")?; - uv_snapshot!(&filters, context.build().arg("--build-constraint").arg("constraints.txt").arg("--require-hashes").current_dir(&project), @r###" + uv_snapshot!(&filters, context.build().arg("--build-constraint").arg("constraints.txt").arg("--require-hashes").current_dir(&project), @r" success: false exit_code: 2 ----- stdout ----- ----- stderr ----- Building source distribution... - × Failed to build `[TEMP_DIR]/project` - ├─▶ Failed to resolve requirements from `build-system.requires` - ├─▶ No solution found when resolving: `hatchling` - ╰─▶ In `--require-hashes` mode, all requirements must be pinned upfront with `==`, but found: `hatchling` - "###); + error: Failed to build `[TEMP_DIR]/project` + Caused by: Failed to resolve requirements from `build-system.requires` + Caused by: No solution found when resolving: `hatchling` + Caused by: In `--require-hashes` mode, all requirements must be pinned upfront with `==`, but found: `hatchling` + "); project .child("dist") @@ -1260,18 +1260,18 @@ fn build_hide_build_output_on_failure() -> Result<()> { "#})?; // With `UV_HIDE_BUILD_OUTPUT`, the output is hidden even on failure. - uv_snapshot!(&filters, context.build().arg("project").env(EnvVars::UV_HIDE_BUILD_OUTPUT, "1").env("FOO", "bar"), @r###" + uv_snapshot!(&filters, context.build().arg("project").env(EnvVars::UV_HIDE_BUILD_OUTPUT, "1").env("FOO", "bar"), @r" success: false exit_code: 2 ----- stdout ----- ----- stderr ----- Building source distribution... - × Failed to build `[TEMP_DIR]/project` - ├─▶ The build backend returned an error - ╰─▶ Call to `setuptools.build_meta.build_sdist` failed (exit status: 1) - hint: This usually indicates a problem with the package or the build environment. - "###); + error: Failed to build `[TEMP_DIR]/project` + Caused by: The build backend returned an error + Caused by: Call to `setuptools.build_meta.build_sdist` failed (exit status: 1) + hint: This usually indicates a problem with the package or the build environment. + "); Ok(()) } @@ -1787,15 +1787,15 @@ fn build_list_files_errors() -> Result<()> { .arg(&anyio_local) .arg("--out-dir") .arg(context.temp_dir.join("output2")) - .arg("--list"), @r###" + .arg("--list"), @r" success: false exit_code: 2 ----- stdout ----- ----- stderr ----- - × Failed to build `[WORKSPACE]/test/packages/anyio_local` - ╰─▶ Can only use `--list` with the uv backend - "###); + error: Failed to build `[WORKSPACE]/test/packages/anyio_local` + Caused by: Can only use `--list` with the uv backend + "); Ok(()) } @@ -1820,16 +1820,16 @@ fn build_version_mismatch() -> Result<()> { .arg(wrong_source_dist.path()) .arg("--wheel") .arg("--out-dir") - .arg(context.temp_dir.path()), @r###" + .arg(context.temp_dir.path()), @r" success: false exit_code: 2 ----- stdout ----- ----- stderr ----- Building wheel from source distribution... - × Failed to build `[TEMP_DIR]/anyio-1.2.3.tar.gz` - ╰─▶ The source distribution declares version 1.2.3, but the wheel declares version 4.3.0+foo - "###); + error: Failed to build `[TEMP_DIR]/anyio-1.2.3.tar.gz` + Caused by: The source distribution declares version 1.2.3, but the wheel declares version 4.3.0+foo + "); Ok(()) } @@ -2101,8 +2101,8 @@ fn force_pep517() -> Result<()> { ----- stderr ----- Building source distribution (uv build backend)... - × Failed to build `[TEMP_DIR]/` - ╰─▶ Expected a Python module at: src/does_not_exist/__init__.py + error: Failed to build `[TEMP_DIR]/` + Caused by: Expected a Python module at: src/does_not_exist/__init__.py "); uv_snapshot!(context.filters(), context.build().arg("--force-pep517").env(EnvVars::RUST_BACKTRACE, "0"), @r" @@ -2113,10 +2113,10 @@ fn force_pep517() -> Result<()> { ----- stderr ----- Building source distribution... Error: Missing source directory at: `src` - × Failed to build `[TEMP_DIR]/` - ├─▶ The build backend returned an error - ╰─▶ Call to `uv_build.build_sdist` failed (exit status: 1) - hint: This usually indicates a problem with the package or the build environment. + error: Failed to build `[TEMP_DIR]/` + Caused by: The build backend returned an error + Caused by: Call to `uv_build.build_sdist` failed (exit status: 1) + hint: This usually indicates a problem with the package or the build environment. "); Ok(()) @@ -2171,11 +2171,12 @@ fn venv_included_in_sdist() -> Result<()> { ----- stderr ----- Building source distribution... - × Failed to build `[TEMP_DIR]/` - ├─▶ Invalid tar file - ├─▶ failed to unpack `[CACHE_DIR]/sdists-v9/[TMP]/python` - ╰─▶ symlink path `[PYTHON-3.12]` is absolute, but external symlinks are not allowed - help: This file seems to be part of a virtual environment. Virtual environments must be excluded from source distributions. + error: Failed to build `[TEMP_DIR]/` + Caused by: Invalid tar file + Caused by: failed to unpack `[CACHE_DIR]/sdists-v9/[TMP]/python` + Caused by: symlink path `[PYTHON-3.12]` is absolute, but external symlinks are not allowed + + hint: This file seems to be part of a virtual environment. Virtual environments must be excluded from source distributions. "); Ok(()) diff --git a/crates/uv/tests/it/build_backend.rs b/crates/uv/tests/it/build_backend.rs index 0afa76bf6..a4b99e6e0 100644 --- a/crates/uv/tests/it/build_backend.rs +++ b/crates/uv/tests/it/build_backend.rs @@ -1003,8 +1003,8 @@ fn error_on_relative_module_root_outside_project_root() -> Result<()> { ----- stderr ----- Building source distribution (uv build backend)... - × Failed to build `[TEMP_DIR]/` - ╰─▶ Module root must be inside the project: .. + error: Failed to build `[TEMP_DIR]/` + Caused by: Module root must be inside the project: .. "); uv_snapshot!(context.filters(), context.build().arg("--wheel"), @r" @@ -1014,8 +1014,8 @@ fn error_on_relative_module_root_outside_project_root() -> Result<()> { ----- stderr ----- Building wheel (uv build backend)... - × Failed to build `[TEMP_DIR]/` - ╰─▶ Module root must be inside the project: .. + error: Failed to build `[TEMP_DIR]/` + Caused by: Module root must be inside the project: .. "); Ok(()) @@ -1058,8 +1058,8 @@ fn error_on_relative_data_dir_outside_project_root() -> Result<()> { ----- stderr ----- Building source distribution (uv build backend)... - × Failed to build `[TEMP_DIR]/project` - ╰─▶ The path for the data directory headers must be inside the project: ../header + error: Failed to build `[TEMP_DIR]/project` + Caused by: The path for the data directory headers must be inside the project: ../header "); uv_snapshot!(context.filters(), context.build().arg("project").arg("--wheel"), @r" @@ -1069,8 +1069,8 @@ fn error_on_relative_data_dir_outside_project_root() -> Result<()> { ----- stderr ----- Building wheel (uv build backend)... - × Failed to build `[TEMP_DIR]/project` - ╰─▶ The path for the data directory headers must be inside the project: ../header + error: Failed to build `[TEMP_DIR]/project` + Caused by: The path for the data directory headers must be inside the project: ../header "); Ok(()) @@ -1102,8 +1102,8 @@ fn venv_in_source_tree() { ----- stderr ----- Building source distribution (uv build backend)... - × Failed to build `[TEMP_DIR]/` - ╰─▶ Virtual environments must not be added to source distributions or wheels, remove the directory or exclude it from the build: src/foo/.venv + error: Failed to build `[TEMP_DIR]/` + Caused by: Virtual environments must not be added to source distributions or wheels, remove the directory or exclude it from the build: src/foo/.venv "); uv_snapshot!(context.filters(), context.build().arg("--wheel"), @r" @@ -1113,8 +1113,8 @@ fn venv_in_source_tree() { ----- stderr ----- Building wheel (uv build backend)... - × Failed to build `[TEMP_DIR]/` - ╰─▶ Virtual environments must not be added to source distributions or wheels, remove the directory or exclude it from the build: src/foo/.venv + error: Failed to build `[TEMP_DIR]/` + Caused by: Virtual environments must not be added to source distributions or wheels, remove the directory or exclude it from the build: src/foo/.venv "); } @@ -1211,13 +1211,13 @@ fn invalid_pyproject_toml() -> Result<()> { ----- stderr ----- Building source distribution (uv build backend)... - × Failed to build `[TEMP_DIR]/child` - ├─▶ Invalid metadata format in: child/pyproject.toml - ╰─▶ TOML parse error at line 2, column 8 - | - 2 | name = 1 - | ^ - invalid type: integer `1`, expected a string + error: Failed to build `[TEMP_DIR]/child` + Caused by: Invalid metadata format in: child/pyproject.toml + Caused by: TOML parse error at line 2, column 8 + | + 2 | name = 1 + | ^ + invalid type: integer `1`, expected a string "); Ok(()) diff --git a/crates/uv/tests/it/cache_prune.rs b/crates/uv/tests/it/cache_prune.rs index 5a2000393..7978d355a 100644 --- a/crates/uv/tests/it/cache_prune.rs +++ b/crates/uv/tests/it/cache_prune.rs @@ -317,12 +317,12 @@ fn prune_unzipped() -> Result<()> { ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because all versions of iniconfig need to be downloaded from a registry and you require iniconfig, we can conclude that your requirements are unsatisfiable. - - hint: Pre-releases are available for `iniconfig` in the requested range (e.g., 0.2.dev0), but pre-releases weren't enabled (try: `--prerelease=allow`) - - hint: Packages were unavailable because the network was disabled. When the network is disabled, registry packages may only be read from the cache. + error: No solution found when resolving dependencies: + Caused by: Because all versions of iniconfig need to be downloaded from a registry and you require iniconfig, we can conclude that your requirements are unsatisfiable. + + hint: Pre-releases are available for `iniconfig` in the requested range (e.g., 0.2.dev0), but pre-releases weren't enabled (try: `--prerelease=allow`) + + hint: Packages were unavailable because the network was disabled. When the network is disabled, registry packages may only be read from the cache. "); Ok(()) diff --git a/crates/uv/tests/it/edit.rs b/crates/uv/tests/it/edit.rs index 1cb07b383..3a920c01e 100644 --- a/crates/uv/tests/it/edit.rs +++ b/crates/uv/tests/it/edit.rs @@ -4473,16 +4473,17 @@ fn add_error() -> Result<()> { dependencies = [] "#})?; - uv_snapshot!(context.filters(), context.add().arg("xyz"), @r###" + uv_snapshot!(context.filters(), context.add().arg("xyz"), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because there are no versions of xyz and your project depends on xyz, we can conclude that your project's requirements are unsatisfiable. - help: If you want to add the package regardless of the failed resolution, provide the `--frozen` flag to skip locking and syncing. - "###); + error: No solution found when resolving dependencies: + Caused by: Because there are no versions of xyz and your project depends on xyz, we can conclude that your project's requirements are unsatisfiable. + + hint: If you want to add the package regardless of the failed resolution, provide the `--frozen` flag to skip locking and syncing. + "); uv_snapshot!(context.filters(), context.add().arg("xyz").arg("--frozen"), @r###" success: true @@ -8570,25 +8571,26 @@ fn fail_to_add_revert_project() -> Result<()> { ----- stderr ----- Resolved 3 packages in [TIME] - × Failed to build `child @ file://[TEMP_DIR]/child` - ├─▶ The build backend returned an error - ╰─▶ Call to `setuptools.build_meta.build_wheel` failed (exit status: 1) + error: Failed to build `child @ file://[TEMP_DIR]/child` + Caused by: The build backend returned an error + Caused by: Call to `setuptools.build_meta.build_wheel` failed (exit status: 1) + + [stderr] + Traceback (most recent call last): + File "", line 14, in + File "[CACHE_DIR]/builds-v0/[TMP]/build_meta.py", line 325, in get_requires_for_build_wheel + return self._get_build_requires(config_settings, requirements=['wheel']) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "[CACHE_DIR]/builds-v0/[TMP]/build_meta.py", line 295, in _get_build_requires + self.run_setup() + File "[CACHE_DIR]/builds-v0/[TMP]/build_meta.py", line 311, in run_setup + exec(code, locals()) + File "", line 1, in + ZeroDivisionError: division by zero + + hint: This usually indicates a problem with the package or the build environment. - [stderr] - Traceback (most recent call last): - File "", line 14, in - File "[CACHE_DIR]/builds-v0/[TMP]/build_meta.py", line 325, in get_requires_for_build_wheel - return self._get_build_requires(config_settings, requirements=['wheel']) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "[CACHE_DIR]/builds-v0/[TMP]/build_meta.py", line 295, in _get_build_requires - self.run_setup() - File "[CACHE_DIR]/builds-v0/[TMP]/build_meta.py", line 311, in run_setup - exec(code, locals()) - File "", line 1, in - ZeroDivisionError: division by zero - - hint: This usually indicates a problem with the package or the build environment. - help: If you want to add the package regardless of the failed resolution, provide the `--frozen` flag to skip locking and syncing. + hint: If you want to add the package regardless of the failed resolution, provide the `--frozen` flag to skip locking and syncing. "#); let pyproject_toml = fs_err::read_to_string(context.temp_dir.join("pyproject.toml"))?; @@ -8672,25 +8674,26 @@ fn fail_to_edit_revert_project() -> Result<()> { ----- stderr ----- Resolved 3 packages in [TIME] - × Failed to build `child @ file://[TEMP_DIR]/child` - ├─▶ The build backend returned an error - ╰─▶ Call to `setuptools.build_meta.build_wheel` failed (exit status: 1) + error: Failed to build `child @ file://[TEMP_DIR]/child` + Caused by: The build backend returned an error + Caused by: Call to `setuptools.build_meta.build_wheel` failed (exit status: 1) + + [stderr] + Traceback (most recent call last): + File "", line 14, in + File "[CACHE_DIR]/builds-v0/[TMP]/build_meta.py", line 325, in get_requires_for_build_wheel + return self._get_build_requires(config_settings, requirements=['wheel']) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "[CACHE_DIR]/builds-v0/[TMP]/build_meta.py", line 295, in _get_build_requires + self.run_setup() + File "[CACHE_DIR]/builds-v0/[TMP]/build_meta.py", line 311, in run_setup + exec(code, locals()) + File "", line 1, in + ZeroDivisionError: division by zero + + hint: This usually indicates a problem with the package or the build environment. - [stderr] - Traceback (most recent call last): - File "", line 14, in - File "[CACHE_DIR]/builds-v0/[TMP]/build_meta.py", line 325, in get_requires_for_build_wheel - return self._get_build_requires(config_settings, requirements=['wheel']) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "[CACHE_DIR]/builds-v0/[TMP]/build_meta.py", line 295, in _get_build_requires - self.run_setup() - File "[CACHE_DIR]/builds-v0/[TMP]/build_meta.py", line 311, in run_setup - exec(code, locals()) - File "", line 1, in - ZeroDivisionError: division by zero - - hint: This usually indicates a problem with the package or the build environment. - help: If you want to add the package regardless of the failed resolution, provide the `--frozen` flag to skip locking and syncing. + hint: If you want to add the package regardless of the failed resolution, provide the `--frozen` flag to skip locking and syncing. "#); let pyproject_toml = fs_err::read_to_string(context.temp_dir.join("pyproject.toml"))?; @@ -8782,28 +8785,29 @@ fn fail_to_add_revert_workspace_root() -> Result<()> { ----- stderr ----- Added `broken` to workspace members Resolved 3 packages in [TIME] - × Failed to build `broken @ file://[TEMP_DIR]/broken` - ├─▶ The build backend returned an error - ╰─▶ Call to `setuptools.build_meta.build_editable` failed (exit status: 1) + error: Failed to build `broken @ file://[TEMP_DIR]/broken` + Caused by: The build backend returned an error + Caused by: Call to `setuptools.build_meta.build_editable` failed (exit status: 1) + + [stderr] + Traceback (most recent call last): + File "", line 14, in + File "[CACHE_DIR]/builds-v0/[TMP]/build_meta.py", line 448, in get_requires_for_build_editable + return self.get_requires_for_build_wheel(config_settings) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "[CACHE_DIR]/builds-v0/[TMP]/build_meta.py", line 325, in get_requires_for_build_wheel + return self._get_build_requires(config_settings, requirements=['wheel']) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "[CACHE_DIR]/builds-v0/[TMP]/build_meta.py", line 295, in _get_build_requires + self.run_setup() + File "[CACHE_DIR]/builds-v0/[TMP]/build_meta.py", line 311, in run_setup + exec(code, locals()) + File "", line 1, in + ZeroDivisionError: division by zero + + hint: This usually indicates a problem with the package or the build environment. - [stderr] - Traceback (most recent call last): - File "", line 14, in - File "[CACHE_DIR]/builds-v0/[TMP]/build_meta.py", line 448, in get_requires_for_build_editable - return self.get_requires_for_build_wheel(config_settings) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "[CACHE_DIR]/builds-v0/[TMP]/build_meta.py", line 325, in get_requires_for_build_wheel - return self._get_build_requires(config_settings, requirements=['wheel']) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "[CACHE_DIR]/builds-v0/[TMP]/build_meta.py", line 295, in _get_build_requires - self.run_setup() - File "[CACHE_DIR]/builds-v0/[TMP]/build_meta.py", line 311, in run_setup - exec(code, locals()) - File "", line 1, in - ZeroDivisionError: division by zero - - hint: This usually indicates a problem with the package or the build environment. - help: If you want to add the package regardless of the failed resolution, provide the `--frozen` flag to skip locking and syncing. + hint: If you want to add the package regardless of the failed resolution, provide the `--frozen` flag to skip locking and syncing. "#); let pyproject_toml = fs_err::read_to_string(context.temp_dir.join("pyproject.toml"))?; @@ -8897,28 +8901,29 @@ fn fail_to_add_revert_workspace_member() -> Result<()> { ----- stderr ----- Added `broken` to workspace members Resolved 4 packages in [TIME] - × Failed to build `broken @ file://[TEMP_DIR]/broken` - ├─▶ The build backend returned an error - ╰─▶ Call to `setuptools.build_meta.build_editable` failed (exit status: 1) + error: Failed to build `broken @ file://[TEMP_DIR]/broken` + Caused by: The build backend returned an error + Caused by: Call to `setuptools.build_meta.build_editable` failed (exit status: 1) + + [stderr] + Traceback (most recent call last): + File "", line 14, in + File "[CACHE_DIR]/builds-v0/[TMP]/build_meta.py", line 448, in get_requires_for_build_editable + return self.get_requires_for_build_wheel(config_settings) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "[CACHE_DIR]/builds-v0/[TMP]/build_meta.py", line 325, in get_requires_for_build_wheel + return self._get_build_requires(config_settings, requirements=['wheel']) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "[CACHE_DIR]/builds-v0/[TMP]/build_meta.py", line 295, in _get_build_requires + self.run_setup() + File "[CACHE_DIR]/builds-v0/[TMP]/build_meta.py", line 311, in run_setup + exec(code, locals()) + File "", line 1, in + ZeroDivisionError: division by zero + + hint: This usually indicates a problem with the package or the build environment. - [stderr] - Traceback (most recent call last): - File "", line 14, in - File "[CACHE_DIR]/builds-v0/[TMP]/build_meta.py", line 448, in get_requires_for_build_editable - return self.get_requires_for_build_wheel(config_settings) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "[CACHE_DIR]/builds-v0/[TMP]/build_meta.py", line 325, in get_requires_for_build_wheel - return self._get_build_requires(config_settings, requirements=['wheel']) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "[CACHE_DIR]/builds-v0/[TMP]/build_meta.py", line 295, in _get_build_requires - self.run_setup() - File "[CACHE_DIR]/builds-v0/[TMP]/build_meta.py", line 311, in run_setup - exec(code, locals()) - File "", line 1, in - ZeroDivisionError: division by zero - - hint: This usually indicates a problem with the package or the build environment. - help: If you want to add the package regardless of the failed resolution, provide the `--frozen` flag to skip locking and syncing. + hint: If you want to add the package regardless of the failed resolution, provide the `--frozen` flag to skip locking and syncing. "#); let pyproject_toml = fs_err::read_to_string(context.temp_dir.join("pyproject.toml"))?; @@ -9622,18 +9627,19 @@ fn add_shadowed_name() -> Result<()> { "#})?; // Pinned constrained, check for a direct dependency loop. - uv_snapshot!(context.filters(), context.add().arg("dagster-webserver==1.6.13"), @r###" + uv_snapshot!(context.filters(), context.add().arg("dagster-webserver==1.6.13"), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because dagster-webserver==1.6.13 depends on your project and your project depends on dagster-webserver==1.6.13, we can conclude that your project's requirements are unsatisfiable. + error: No solution found when resolving dependencies: + Caused by: Because dagster-webserver==1.6.13 depends on your project and your project depends on dagster-webserver==1.6.13, we can conclude that your project's requirements are unsatisfiable. + + hint: The package `dagster-webserver` depends on the package `dagster` but the name is shadowed by your project. Consider changing the name of the project. - hint: The package `dagster-webserver` depends on the package `dagster` but the name is shadowed by your project. Consider changing the name of the project. - help: If you want to add the package regardless of the failed resolution, provide the `--frozen` flag to skip locking and syncing. - "###); + hint: If you want to add the package regardless of the failed resolution, provide the `--frozen` flag to skip locking and syncing. + "); // Constraint with several available versions, check for an indirect dependency loop. uv_snapshot!(context.filters(), context.add().arg("dagster-webserver>=1.6.11,<1.7.0"), @r" @@ -9642,17 +9648,18 @@ fn add_shadowed_name() -> Result<()> { ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because only the following versions of dagster-webserver are available: - dagster-webserver<=1.6.11 - dagster-webserver==1.6.12 - dagster-webserver==1.6.13 - and dagster-webserver==1.6.11 depends on your project, we can conclude that dagster-webserver>=1.6.11,<1.6.12 depends on your project. - And because dagster-webserver==1.6.12 depends on your project, we can conclude that dagster-webserver>=1.6.11,<1.6.13 depends on your project. - And because dagster-webserver==1.6.13 depends on your project and your project depends on dagster-webserver>=1.6.11, we can conclude that your project's requirements are unsatisfiable. + error: No solution found when resolving dependencies: + Caused by: Because only the following versions of dagster-webserver are available: + dagster-webserver<=1.6.11 + dagster-webserver==1.6.12 + dagster-webserver==1.6.13 + and dagster-webserver==1.6.11 depends on your project, we can conclude that dagster-webserver>=1.6.11,<1.6.12 depends on your project. + And because dagster-webserver==1.6.12 depends on your project, we can conclude that dagster-webserver>=1.6.11,<1.6.13 depends on your project. + And because dagster-webserver==1.6.13 depends on your project and your project depends on dagster-webserver>=1.6.11, we can conclude that your project's requirements are unsatisfiable. + + hint: The package `dagster-webserver` depends on the package `dagster` but the name is shadowed by your project. Consider changing the name of the project. - hint: The package `dagster-webserver` depends on the package `dagster` but the name is shadowed by your project. Consider changing the name of the project. - help: If you want to add the package regardless of the failed resolution, provide the `--frozen` flag to skip locking and syncing. + hint: If you want to add the package regardless of the failed resolution, provide the `--frozen` flag to skip locking and syncing. "); Ok(()) @@ -9747,11 +9754,12 @@ fn add_warn_index_url() -> Result<()> { ----- stderr ----- warning: Indexes specified via `--extra-index-url` will not be persisted to the `pyproject.toml` file; use `--index` instead. - × No solution found when resolving dependencies: - ╰─▶ Because only idna==2.7 is available and your project depends on idna>=3.6, we can conclude that your project's requirements are unsatisfiable. + error: No solution found when resolving dependencies: + Caused by: Because only idna==2.7 is available and your project depends on idna>=3.6, we can conclude that your project's requirements are unsatisfiable. + + hint: `idna` was found on https://test.pypi.org/simple, but not at the requested version (idna>=3.6). A compatible version may be available on a subsequent index (e.g., https://pypi.org/simple). By default, uv will only consider versions that are published on the first index that contains a given package, to avoid dependency confusion attacks. If all indexes are equally trusted, use `--index-strategy unsafe-best-match` to consider all versions from all indexes, regardless of the order in which they were defined. - hint: `idna` was found on https://test.pypi.org/simple, but not at the requested version (idna>=3.6). A compatible version may be available on a subsequent index (e.g., https://pypi.org/simple). By default, uv will only consider versions that are published on the first index that contains a given package, to avoid dependency confusion attacks. If all indexes are equally trusted, use `--index-strategy unsafe-best-match` to consider all versions from all indexes, regardless of the order in which they were defined. - help: If you want to add the package regardless of the failed resolution, provide the `--frozen` flag to skip locking and syncing. + hint: If you want to add the package regardless of the failed resolution, provide the `--frozen` flag to skip locking and syncing. "); Ok(()) @@ -12951,18 +12959,19 @@ fn add_with_build_constraints() -> Result<()> { build-constraint-dependencies = ["setuptools==1"] "#})?; - uv_snapshot!(context.filters(), context.add().arg("requests==1.2"), @r###" + uv_snapshot!(context.filters(), context.add().arg("requests==1.2"), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- - × Failed to download and build `requests==1.2.0` - ├─▶ Failed to resolve requirements from `setup.py` build - ├─▶ No solution found when resolving: `setuptools>=40.8.0` - ╰─▶ Because you require setuptools>=40.8.0 and setuptools==1, we can conclude that your requirements are unsatisfiable. - help: If you want to add the package regardless of the failed resolution, provide the `--frozen` flag to skip locking and syncing. - "###); + error: Failed to download and build `requests==1.2.0` + Caused by: Failed to resolve requirements from `setup.py` build + Caused by: No solution found when resolving: `setuptools>=40.8.0` + Caused by: Because you require setuptools>=40.8.0 and setuptools==1, we can conclude that your requirements are unsatisfiable. + + hint: If you want to add the package regardless of the failed resolution, provide the `--frozen` flag to skip locking and syncing. + "); let pyproject_toml = context.temp_dir.child("pyproject.toml"); pyproject_toml.write_str(indoc! {r#" @@ -13115,11 +13124,12 @@ fn add_full_url_in_keyring() -> Result<()> { ----- stderr ----- Keyring request for public@https://pypi-proxy.fly.dev/basic-auth/simple Keyring request for public@pypi-proxy.fly.dev - × No solution found when resolving dependencies: - ╰─▶ Because anyio was not found in the package registry and your project depends on anyio, we can conclude that your project's requirements are unsatisfiable. + error: No solution found when resolving dependencies: + Caused by: Because anyio was not found in the package registry and your project depends on anyio, we can conclude that your project's requirements are unsatisfiable. + + hint: An index URL (https://pypi-proxy.fly.dev/basic-auth/simple) could not be queried due to a lack of valid authentication credentials (401 Unauthorized). - hint: An index URL (https://pypi-proxy.fly.dev/basic-auth/simple) could not be queried due to a lack of valid authentication credentials (401 Unauthorized). - help: If you want to add the package regardless of the failed resolution, provide the `--frozen` flag to skip locking and syncing. + hint: If you want to add the package regardless of the failed resolution, provide the `--frozen` flag to skip locking and syncing. " ); Ok(()) @@ -13150,11 +13160,12 @@ fn add_stop_index_search_early_on_auth_failure() -> Result<()> { ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because anyio was not found in the package registry and your project depends on anyio, we can conclude that your project's requirements are unsatisfiable. + error: No solution found when resolving dependencies: + Caused by: Because anyio was not found in the package registry and your project depends on anyio, we can conclude that your project's requirements are unsatisfiable. + + hint: An index URL (https://pypi-proxy.fly.dev/basic-auth/simple) could not be queried due to a lack of valid authentication credentials (401 Unauthorized). - hint: An index URL (https://pypi-proxy.fly.dev/basic-auth/simple) could not be queried due to a lack of valid authentication credentials (401 Unauthorized). - help: If you want to add the package regardless of the failed resolution, provide the `--frozen` flag to skip locking and syncing. + hint: If you want to add the package regardless of the failed resolution, provide the `--frozen` flag to skip locking and syncing. " ); Ok(()) @@ -13231,11 +13242,12 @@ fn add_empty_ignore_error_codes() -> Result<()> { ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because flask was not found in the package registry and your project depends on flask, we can conclude that your project's requirements are unsatisfiable. + error: No solution found when resolving dependencies: + Caused by: Because flask was not found in the package registry and your project depends on flask, we can conclude that your project's requirements are unsatisfiable. + + hint: An index URL (https://download.pytorch.org/whl/cpu) returned a 403 Forbidden error. This could indicate lack of valid authentication credentials, or the package may not exist on this index. - hint: An index URL (https://download.pytorch.org/whl/cpu) returned a 403 Forbidden error. This could indicate lack of valid authentication credentials, or the package may not exist on this index. - help: If you want to add the package regardless of the failed resolution, provide the `--frozen` flag to skip locking and syncing. + hint: If you want to add the package regardless of the failed resolution, provide the `--frozen` flag to skip locking and syncing. " ); Ok(()) @@ -13270,9 +13282,10 @@ fn add_missing_package_on_pytorch() -> Result<()> { ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because fakepkg was not found in the package registry and your project depends on fakepkg, we can conclude that your project's requirements are unsatisfiable. - help: If you want to add the package regardless of the failed resolution, provide the `--frozen` flag to skip locking and syncing. + error: No solution found when resolving dependencies: + Caused by: Because fakepkg was not found in the package registry and your project depends on fakepkg, we can conclude that your project's requirements are unsatisfiable. + + hint: If you want to add the package regardless of the failed resolution, provide the `--frozen` flag to skip locking and syncing. " ); Ok(()) @@ -13585,11 +13598,12 @@ fn add_auth_policy_never_with_env_var_credentials() -> Result<()> { ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because anyio was not found in the package registry and your project depends on anyio, we can conclude that your project's requirements are unsatisfiable. + error: No solution found when resolving dependencies: + Caused by: Because anyio was not found in the package registry and your project depends on anyio, we can conclude that your project's requirements are unsatisfiable. + + hint: An index URL (https://pypi-proxy.fly.dev/basic-auth/simple) could not be queried due to a lack of valid authentication credentials (401 Unauthorized). - hint: An index URL (https://pypi-proxy.fly.dev/basic-auth/simple) could not be queried due to a lack of valid authentication credentials (401 Unauthorized). - help: If you want to add the package regardless of the failed resolution, provide the `--frozen` flag to skip locking and syncing. + hint: If you want to add the package regardless of the failed resolution, provide the `--frozen` flag to skip locking and syncing. " ); @@ -13679,11 +13693,12 @@ async fn add_redirect_cross_origin() -> Result<()> { ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because anyio was not found in the package registry and your project depends on anyio, we can conclude that your project's requirements are unsatisfiable. + error: No solution found when resolving dependencies: + Caused by: Because anyio was not found in the package registry and your project depends on anyio, we can conclude that your project's requirements are unsatisfiable. + + hint: An index URL (http://[LOCALHOST]/) could not be queried due to a lack of valid authentication credentials (401 Unauthorized). - hint: An index URL (http://[LOCALHOST]/) could not be queried due to a lack of valid authentication credentials (401 Unauthorized). - help: If you want to add the package regardless of the failed resolution, provide the `--frozen` flag to skip locking and syncing. + hint: If you want to add the package regardless of the failed resolution, provide the `--frozen` flag to skip locking and syncing. " ); @@ -13808,11 +13823,12 @@ async fn add_redirect_with_keyring_cross_origin() -> Result<()> { ----- stderr ----- Keyring request for public@http://[LOCALHOST]/ Keyring request for public@[LOCALHOST] - × No solution found when resolving dependencies: - ╰─▶ Because anyio was not found in the package registry and your project depends on anyio, we can conclude that your project's requirements are unsatisfiable. + error: No solution found when resolving dependencies: + Caused by: Because anyio was not found in the package registry and your project depends on anyio, we can conclude that your project's requirements are unsatisfiable. + + hint: An index URL (http://[LOCALHOST]/) could not be queried due to a lack of valid authentication credentials (401 Unauthorized). - hint: An index URL (http://[LOCALHOST]/) could not be queried due to a lack of valid authentication credentials (401 Unauthorized). - help: If you want to add the package regardless of the failed resolution, provide the `--frozen` flag to skip locking and syncing. + hint: If you want to add the package regardless of the failed resolution, provide the `--frozen` flag to skip locking and syncing. " ); diff --git a/crates/uv/tests/it/export.rs b/crates/uv/tests/it/export.rs index c1b96bb47..16ea76f73 100644 --- a/crates/uv/tests/it/export.rs +++ b/crates/uv/tests/it/export.rs @@ -969,16 +969,16 @@ fn requirements_txt_frozen() -> Result<()> { // Remove the child `pyproject.toml`. fs_err::remove_dir_all(child.path())?; - uv_snapshot!(context.filters(), context.export().arg("--all-packages"), @r###" + uv_snapshot!(context.filters(), context.export().arg("--all-packages"), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- - × Failed to build `project @ file://[TEMP_DIR]/` - ├─▶ Failed to parse entry: `child` - ╰─▶ `child` references a workspace in `tool.uv.sources` (e.g., `child = { workspace = true }`), but is not a workspace member - "###); + error: Failed to build `project @ file://[TEMP_DIR]/` + Caused by: Failed to parse entry: `child` + Caused by: `child` references a workspace in `tool.uv.sources` (e.g., `child = { workspace = true }`), but is not a workspace member + "); uv_snapshot!(context.filters(), context.export().arg("--all-packages").arg("--frozen"), @r###" success: true @@ -1355,18 +1355,18 @@ fn requirements_txt_ssh_git_username() -> Result<()> { ----- stdout ----- ----- stderr ----- - × Failed to download and build `uv-private-pypackage @ git+ssh://git@github.com/astral-test/uv-private-pypackage.git@d780faf0ac91257d4d5a4f0c5a0e4509608c0071` - ├─▶ Git operation failed - ├─▶ failed to clone into: [PATH] - ├─▶ failed to fetch branch, tag, or commit `d780faf0ac91257d4d5a4f0c5a0e4509608c0071` - ╰─▶ process didn't exit successfully: [GIT_COMMAND_ERROR] - --- stderr - Load key "[TEMP_DIR]/fake_deploy_key": [ERROR] - git@github.com: Permission denied (publickey). - fatal: Could not read from remote repository. - - Please make sure you have the correct access rights - and the repository exists. + error: Failed to download and build `uv-private-pypackage @ git+ssh://git@github.com/astral-test/uv-private-pypackage.git@d780faf0ac91257d4d5a4f0c5a0e4509608c0071` + Caused by: Git operation failed + Caused by: failed to clone into: [PATH] + Caused by: failed to fetch branch, tag, or commit `d780faf0ac91257d4d5a4f0c5a0e4509608c0071` + Caused by: process didn't exit successfully: [GIT_COMMAND_ERROR] + --- stderr + Load key "[TEMP_DIR]/fake_deploy_key": [ERROR] + git@github.com: Permission denied (publickey). + fatal: Could not read from remote repository. + + Please make sure you have the correct access rights + and the repository exists. "#); let ssh_deploy_key = context.temp_dir.child("uv_test_key"); @@ -5970,16 +5970,16 @@ fn cyclonedx_export_workspace_frozen() -> Result<()> { // Remove the child `pyproject.toml`. fs_err::remove_dir_all(child.path())?; - uv_snapshot!(context.filters(), context.export().arg("--format").arg("cyclonedx1.5").arg("--all-packages"), @r###" + uv_snapshot!(context.filters(), context.export().arg("--format").arg("cyclonedx1.5").arg("--all-packages"), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- - × Failed to build `project @ file://[TEMP_DIR]/` - ├─▶ Failed to parse entry: `child` - ╰─▶ `child` references a workspace in `tool.uv.sources` (e.g., `child = { workspace = true }`), but is not a workspace member - "###); + error: Failed to build `project @ file://[TEMP_DIR]/` + Caused by: Failed to parse entry: `child` + Caused by: `child` references a workspace in `tool.uv.sources` (e.g., `child = { workspace = true }`), but is not a workspace member + "); uv_snapshot!(context.filters(), context.export().arg("--format").arg("cyclonedx1.5").arg("--all-packages").arg("--frozen"), @r#" success: true diff --git a/crates/uv/tests/it/lock.rs b/crates/uv/tests/it/lock.rs index 6f7256932..46088e712 100644 --- a/crates/uv/tests/it/lock.rs +++ b/crates/uv/tests/it/lock.rs @@ -2158,11 +2158,12 @@ fn lock_project_with_build_constraints() -> Result<()> { ----- stdout ----- ----- stderr ----- - × Failed to download and build `requests==1.2.0` - ├─▶ Failed to resolve requirements from `setup.py` build - ├─▶ No solution found when resolving: `setuptools>=40.8.0` - ╰─▶ Because you require setuptools>=40.8.0 and setuptools==1, we can conclude that your requirements are unsatisfiable. - help: `requests` (v1.2.0) was included because `project` (v0.1.0) depends on `requests==1.2` + error: Failed to download and build `requests==1.2.0` + Caused by: Failed to resolve requirements from `setup.py` build + Caused by: No solution found when resolving: `setuptools>=40.8.0` + Caused by: Because you require setuptools>=40.8.0 and setuptools==1, we can conclude that your requirements are unsatisfiable. + + hint: `requests` (v1.2.0) was included because `project` (v0.1.0) depends on `requests==1.2` "); Ok(()) @@ -2935,9 +2936,9 @@ fn lock_conflicting_project_basic1() -> Result<()> { ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because your project depends on sortedcontainers==2.3.0 and project:foo depends on sortedcontainers==2.4.0, we can conclude that your project and project:foo are incompatible. - And because your project requires your project and project:foo, we can conclude that your project's requirements are unsatisfiable. + error: No solution found when resolving dependencies: + Caused by: Because your project depends on sortedcontainers==2.3.0 and project:foo depends on sortedcontainers==2.4.0, we can conclude that your project and project:foo are incompatible. + And because your project requires your project and project:foo, we can conclude that your project's requirements are unsatisfiable. "); // And now with the same group configuration, we tell uv about the @@ -3338,9 +3339,9 @@ fn lock_conflicting_workspace_members_depends_direct() -> Result<()> { ----- stderr ----- warning: Declaring conflicts for packages (`package = ...`) is experimental and may change without warning. Pass `--preview-features package-conflicts` to disable this warning. - × No solution found when resolving dependencies for split (included: example; excluded: subexample): - ╰─▶ Because subexample depends on sortedcontainers==2.4.0 and example depends on sortedcontainers==2.3.0, we can conclude that example and subexample are incompatible. - And because example depends on subexample and your workspace requires example, we can conclude that your workspace's requirements are unsatisfiable. + error: No solution found when resolving dependencies for split (included: example; excluded: subexample): + Caused by: Because subexample depends on sortedcontainers==2.4.0 and example depends on sortedcontainers==2.3.0, we can conclude that example and subexample are incompatible. + And because example depends on subexample and your workspace requires example, we can conclude that your workspace's requirements are unsatisfiable. "); Ok(()) @@ -3635,10 +3636,10 @@ fn lock_conflicting_workspace_members_depends_transitive() -> Result<()> { ----- stderr ----- warning: Declaring conflicts for packages (`package = ...`) is experimental and may change without warning. Pass `--preview-features package-conflicts` to disable this warning. - × No solution found when resolving dependencies for split (included: example; excluded: subexample): - ╰─▶ Because subexample depends on sortedcontainers==2.4.0 and indirection depends on subexample, we can conclude that indirection depends on sortedcontainers==2.4.0. - And because example depends on sortedcontainers==2.3.0, we can conclude that example and indirection are incompatible. - And because your workspace requires example and indirection, we can conclude that your workspace's requirements are unsatisfiable. + error: No solution found when resolving dependencies for split (included: example; excluded: subexample): + Caused by: Because subexample depends on sortedcontainers==2.4.0 and indirection depends on subexample, we can conclude that indirection depends on sortedcontainers==2.4.0. + And because example depends on sortedcontainers==2.3.0, we can conclude that example and indirection are incompatible. + And because your workspace requires example and indirection, we can conclude that your workspace's requirements are unsatisfiable. "); Ok(()) @@ -4081,9 +4082,9 @@ fn lock_conflicting_mixed() -> Result<()> { ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because project:project1 depends on sortedcontainers==2.3.0 and project[project2] depends on sortedcontainers==2.4.0, we can conclude that project:project1 and project[project2] are incompatible. - And because your project requires project[project2] and project:project1, we can conclude that your project's requirements are unsatisfiable. + error: No solution found when resolving dependencies: + Caused by: Because project:project1 depends on sortedcontainers==2.3.0 and project[project2] depends on sortedcontainers==2.4.0, we can conclude that project:project1 and project[project2] are incompatible. + And because your project requires project[project2] and project:project1, we can conclude that your project's requirements are unsatisfiable. "); // And now with the same extra/group configuration, we tell uv @@ -5217,24 +5218,24 @@ fn lock_requires_python() -> Result<()> { ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies for split (markers: python_full_version >= '3.7' and python_full_version < '3.7.9'): - ╰─▶ Because the requested Python version (>=3.7) does not satisfy Python>=3.7.9 and pygls>=1.1.0,<=1.2.1 depends on Python>=3.7.9,<4, we can conclude that pygls>=1.1.0,<=1.2.1 cannot be used. - And because only the following versions of pygls are available: - pygls<=1.1.0 - pygls==1.1.1 - pygls==1.1.2 - pygls==1.2.0 - pygls==1.2.1 - pygls==1.3.0 - we can conclude that pygls>=1.1.0,<1.3.0 cannot be used. (1) - - Because the requested Python version (>=3.7) does not satisfy Python>=3.8 and pygls==1.3.0 depends on Python>=3.8, we can conclude that pygls==1.3.0 cannot be used. - And because we know from (1) that pygls>=1.1.0,<1.3.0 cannot be used, we can conclude that pygls>=1.1.0 cannot be used. - And because your project depends on pygls>=1.1.0, we can conclude that your project's requirements are unsatisfiable. - - hint: The `requires-python` value (>=3.7) includes Python versions that are not supported by your dependencies (e.g., pygls>=1.1.0,<=1.2.1 only supports >=3.7.9, <4). Consider using a more restrictive `requires-python` value (like >=3.7.9, <4). - - hint: While the active Python version is 3.12, the resolution failed for other Python versions supported by your project. Consider limiting your project's supported Python versions using `requires-python`. + error: No solution found when resolving dependencies for split (markers: python_full_version >= '3.7' and python_full_version < '3.7.9'): + Caused by: Because the requested Python version (>=3.7) does not satisfy Python>=3.7.9 and pygls>=1.1.0,<=1.2.1 depends on Python>=3.7.9,<4, we can conclude that pygls>=1.1.0,<=1.2.1 cannot be used. + And because only the following versions of pygls are available: + pygls<=1.1.0 + pygls==1.1.1 + pygls==1.1.2 + pygls==1.2.0 + pygls==1.2.1 + pygls==1.3.0 + we can conclude that pygls>=1.1.0,<1.3.0 cannot be used. (1) + + Because the requested Python version (>=3.7) does not satisfy Python>=3.8 and pygls==1.3.0 depends on Python>=3.8, we can conclude that pygls==1.3.0 cannot be used. + And because we know from (1) that pygls>=1.1.0,<1.3.0 cannot be used, we can conclude that pygls>=1.1.0 cannot be used. + And because your project depends on pygls>=1.1.0, we can conclude that your project's requirements are unsatisfiable. + + hint: The `requires-python` value (>=3.7) includes Python versions that are not supported by your dependencies (e.g., pygls>=1.1.0,<=1.2.1 only supports >=3.7.9, <4). Consider using a more restrictive `requires-python` value (like >=3.7.9, <4). + + hint: While the active Python version is 3.12, the resolution failed for other Python versions supported by your project. Consider limiting your project's supported Python versions using `requires-python`. "); // Require >=3.7, and allow locking to a version of `pygls` that is compatible (==1.0.1). @@ -8227,16 +8228,17 @@ fn lock_invalid_hash() -> Result<()> { ----- stdout ----- ----- stderr ----- - × Failed to download `idna==3.6` - ╰─▶ Hash mismatch for `idna==3.6` + error: Failed to download `idna==3.6` + Caused by: Hash mismatch for `idna==3.6` + + Expected: + sha256:aecdbbd083b06798ae1e86adcbfe8ab1479cf864e4ee30fe4e46a003d12491ca + sha256:d05567e9c24a6b9faaa835c4821bad0590fbb9d5779e7caa6e1cc4978e7eb24f + + Computed: + sha256:c05567e9c24a6b9faaa835c4821bad0590fbb9d5779e7caa6e1cc4978e7eb24f - Expected: - sha256:aecdbbd083b06798ae1e86adcbfe8ab1479cf864e4ee30fe4e46a003d12491ca - sha256:d05567e9c24a6b9faaa835c4821bad0590fbb9d5779e7caa6e1cc4978e7eb24f - - Computed: - sha256:c05567e9c24a6b9faaa835c4821bad0590fbb9d5779e7caa6e1cc4978e7eb24f - help: `idna` (v3.6) was included because `project` (v0.1.0) depends on `anyio` (v3.7.0) which depends on `idna` + hint: `idna` (v3.6) was included because `project` (v0.1.0) depends on `anyio` (v3.7.0) which depends on `idna` "); Ok(()) @@ -8438,17 +8440,17 @@ fn lock_requires_python_no_wheels() -> Result<()> { "#, )?; - uv_snapshot!(context.filters(), context.lock(), @r###" + uv_snapshot!(context.filters(), context.lock(), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because dearpygui==1.9.1 has no wheels with a matching Python version tag (e.g., `cp312`) and your project depends on dearpygui==1.9.1, we can conclude that your project's requirements are unsatisfiable. - - hint: Wheels are available for `dearpygui` (v1.9.1) with the following Python ABI tags: `cp37m`, `cp38`, `cp39`, `cp310`, `cp311` - "###); + error: No solution found when resolving dependencies: + Caused by: Because dearpygui==1.9.1 has no wheels with a matching Python version tag (e.g., `cp312`) and your project depends on dearpygui==1.9.1, we can conclude that your project's requirements are unsatisfiable. + + hint: Wheels are available for `dearpygui` (v1.9.1) with the following Python ABI tags: `cp37m`, `cp38`, `cp39`, `cp310`, `cp311` + "); Ok(()) } @@ -8920,16 +8922,16 @@ fn lock_non_workspace_source() -> Result<()> { "#, )?; - uv_snapshot!(context.filters(), context.lock().current_dir(&child), @r###" + uv_snapshot!(context.filters(), context.lock().current_dir(&child), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- - × Failed to build `project @ file://[TEMP_DIR]/` - ├─▶ Failed to parse entry: `child` - ╰─▶ `child` is included as a workspace member, but references a path in `tool.uv.sources`. Workspace members must be declared as workspace sources (e.g., `child = { workspace = true }`). - "###); + error: Failed to build `project @ file://[TEMP_DIR]/` + Caused by: Failed to parse entry: `child` + Caused by: `child` is included as a workspace member, but references a path in `tool.uv.sources`. Workspace members must be declared as workspace sources (e.g., `child = { workspace = true }`). + "); Ok(()) } @@ -8971,16 +8973,16 @@ fn lock_no_workspace_source() -> Result<()> { "#, )?; - uv_snapshot!(context.filters(), context.lock().current_dir(&child), @r###" + uv_snapshot!(context.filters(), context.lock().current_dir(&child), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- - × Failed to build `project @ file://[TEMP_DIR]/` - ├─▶ Failed to parse entry: `child` - ╰─▶ `child` is included as a workspace member, but is missing an entry in `tool.uv.sources` (e.g., `child = { workspace = true }`) - "###); + error: Failed to build `project @ file://[TEMP_DIR]/` + Caused by: Failed to parse entry: `child` + Caused by: `child` is included as a workspace member, but is missing an entry in `tool.uv.sources` (e.g., `child = { workspace = true }`) + "); Ok(()) } @@ -9145,9 +9147,9 @@ fn lock_index_workspace_member() -> Result<()> { ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because iniconfig was not found in the package registry and child depends on iniconfig>=2, we can conclude that child's requirements are unsatisfiable. - And because your workspace requires child, we can conclude that your workspace's requirements are unsatisfiable. + error: No solution found when resolving dependencies: + Caused by: Because iniconfig was not found in the package registry and child depends on iniconfig>=2, we can conclude that child's requirements are unsatisfiable. + And because your workspace requires child, we can conclude that your workspace's requirements are unsatisfiable. "); uv_snapshot!(context.filters(), context.lock() @@ -9493,30 +9495,32 @@ fn lock_redact_https() -> Result<()> { // Installing from the lockfile should fail without credentials. Omit the root, so that we fail // when installing `iniconfig`, rather than when building `foo`. - uv_snapshot!(context.filters(), context.sync().arg("--frozen").arg("--index-url").arg("https://pypi-proxy.fly.dev/basic-auth/simple").arg("--no-install-project"), @r###" + uv_snapshot!(context.filters(), context.sync().arg("--frozen").arg("--index-url").arg("https://pypi-proxy.fly.dev/basic-auth/simple").arg("--no-install-project"), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- - × Failed to download `iniconfig==2.0.0` - ├─▶ Failed to fetch: `https://pypi-proxy.fly.dev/basic-auth/files/packages/ef/a6/62565a6e1cf69e10f5727360368e451d4b7f58beeac6173dc9db836a5b46/iniconfig-2.0.0-py3-none-any.whl` - ╰─▶ HTTP status client error (401 Unauthorized) for url (https://pypi-proxy.fly.dev/basic-auth/files/packages/ef/a6/62565a6e1cf69e10f5727360368e451d4b7f58beeac6173dc9db836a5b46/iniconfig-2.0.0-py3-none-any.whl) - help: `iniconfig` (v2.0.0) was included because `foo` (v0.1.0) depends on `iniconfig` - "###); + error: Failed to download `iniconfig==2.0.0` + Caused by: Failed to fetch: `https://pypi-proxy.fly.dev/basic-auth/files/packages/ef/a6/62565a6e1cf69e10f5727360368e451d4b7f58beeac6173dc9db836a5b46/iniconfig-2.0.0-py3-none-any.whl` + Caused by: HTTP status client error (401 Unauthorized) for url (https://pypi-proxy.fly.dev/basic-auth/files/packages/ef/a6/62565a6e1cf69e10f5727360368e451d4b7f58beeac6173dc9db836a5b46/iniconfig-2.0.0-py3-none-any.whl) + + hint: `iniconfig` (v2.0.0) was included because `foo` (v0.1.0) depends on `iniconfig` + "); // Installing from the lockfile should fail without an index. - uv_snapshot!(context.filters(), context.sync().arg("--frozen").arg("--no-install-project"), @r###" + uv_snapshot!(context.filters(), context.sync().arg("--frozen").arg("--no-install-project"), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- - × Failed to download `iniconfig==2.0.0` - ├─▶ Failed to fetch: `https://pypi-proxy.fly.dev/basic-auth/files/packages/ef/a6/62565a6e1cf69e10f5727360368e451d4b7f58beeac6173dc9db836a5b46/iniconfig-2.0.0-py3-none-any.whl` - ╰─▶ HTTP status client error (401 Unauthorized) for url (https://pypi-proxy.fly.dev/basic-auth/files/packages/ef/a6/62565a6e1cf69e10f5727360368e451d4b7f58beeac6173dc9db836a5b46/iniconfig-2.0.0-py3-none-any.whl) - help: `iniconfig` (v2.0.0) was included because `foo` (v0.1.0) depends on `iniconfig` - "###); + error: Failed to download `iniconfig==2.0.0` + Caused by: Failed to fetch: `https://pypi-proxy.fly.dev/basic-auth/files/packages/ef/a6/62565a6e1cf69e10f5727360368e451d4b7f58beeac6173dc9db836a5b46/iniconfig-2.0.0-py3-none-any.whl` + Caused by: HTTP status client error (401 Unauthorized) for url (https://pypi-proxy.fly.dev/basic-auth/files/packages/ef/a6/62565a6e1cf69e10f5727360368e451d4b7f58beeac6173dc9db836a5b46/iniconfig-2.0.0-py3-none-any.whl) + + hint: `iniconfig` (v2.0.0) was included because `foo` (v0.1.0) depends on `iniconfig` + "); // Installing from the lockfile should succeed when credentials are included on the command-line. uv_snapshot!(context.filters(), context.sync().arg("--frozen").arg("--index-url").arg("https://public:heron@pypi-proxy.fly.dev/basic-auth/simple"), @r###" @@ -9544,17 +9548,18 @@ fn lock_redact_https() -> Result<()> { "###); // Installing without credentials will fail without a cache. - uv_snapshot!(context.filters(), context.sync().arg("--frozen").arg("--reinstall").arg("--no-cache").arg("--no-install-project"), @r###" + uv_snapshot!(context.filters(), context.sync().arg("--frozen").arg("--reinstall").arg("--no-cache").arg("--no-install-project"), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- - × Failed to download `iniconfig==2.0.0` - ├─▶ Failed to fetch: `https://pypi-proxy.fly.dev/basic-auth/files/packages/ef/a6/62565a6e1cf69e10f5727360368e451d4b7f58beeac6173dc9db836a5b46/iniconfig-2.0.0-py3-none-any.whl` - ╰─▶ HTTP status client error (401 Unauthorized) for url (https://pypi-proxy.fly.dev/basic-auth/files/packages/ef/a6/62565a6e1cf69e10f5727360368e451d4b7f58beeac6173dc9db836a5b46/iniconfig-2.0.0-py3-none-any.whl) - help: `iniconfig` (v2.0.0) was included because `foo` (v0.1.0) depends on `iniconfig` - "###); + error: Failed to download `iniconfig==2.0.0` + Caused by: Failed to fetch: `https://pypi-proxy.fly.dev/basic-auth/files/packages/ef/a6/62565a6e1cf69e10f5727360368e451d4b7f58beeac6173dc9db836a5b46/iniconfig-2.0.0-py3-none-any.whl` + Caused by: HTTP status client error (401 Unauthorized) for url (https://pypi-proxy.fly.dev/basic-auth/files/packages/ef/a6/62565a6e1cf69e10f5727360368e451d4b7f58beeac6173dc9db836a5b46/iniconfig-2.0.0-py3-none-any.whl) + + hint: `iniconfig` (v2.0.0) was included because `foo` (v0.1.0) depends on `iniconfig` + "); // Installing with credentials from with `UV_INDEX_URL` should succeed. uv_snapshot!(context.filters(), context.sync().arg("--frozen").arg("--reinstall").arg("--no-cache").env(EnvVars::UV_INDEX_URL, "https://public:heron@pypi-proxy.fly.dev/basic-auth/simple"), @r###" @@ -10062,10 +10067,10 @@ fn lock_env_credentials() -> Result<()> { ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because iniconfig was not found in the package registry and your project depends on iniconfig, we can conclude that your project's requirements are unsatisfiable. - - hint: An index URL (https://pypi-proxy.fly.dev/basic-auth/simple) could not be queried due to a lack of valid authentication credentials (401 Unauthorized). + error: No solution found when resolving dependencies: + Caused by: Because iniconfig was not found in the package registry and your project depends on iniconfig, we can conclude that your project's requirements are unsatisfiable. + + hint: An index URL (https://pypi-proxy.fly.dev/basic-auth/simple) could not be queried due to a lack of valid authentication credentials (401 Unauthorized). "); // Provide credentials via environment variables. @@ -12663,10 +12668,10 @@ fn lock_editable() -> Result<()> { ----- stdout ----- ----- stderr ----- - × Failed to resolve dependencies for `workspace` (v0.1.0) - ╰─▶ Requirements contain conflicting URLs for package `library` in all marker environments: - - file://[TEMP_DIR]/library - - file://[TEMP_DIR]/library (editable) + error: Failed to resolve dependencies for `workspace` (v0.1.0) + Caused by: Requirements contain conflicting URLs for package `library` in all marker environments: + - file://[TEMP_DIR]/library + - file://[TEMP_DIR]/library (editable) "); Ok(()) @@ -13309,8 +13314,8 @@ fn unconditional_overlapping_marker_disjoint_version_constraints() -> Result<()> ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because your project depends on datasets<2.19 and datasets>=2.19, we can conclude that your project's requirements are unsatisfiable. + error: No solution found when resolving dependencies: + Caused by: Because your project depends on datasets<2.19 and datasets>=2.19, we can conclude that your project's requirements are unsatisfiable. "); Ok(()) @@ -14081,18 +14086,18 @@ fn lock_add_member_with_build_system() -> Result<()> { "); // Re-run with `--offline`. This should also fail, during the resolve phase. - uv_snapshot!(context.filters(), context.lock().arg("--locked").arg("--offline").arg("--no-cache"), @r###" + uv_snapshot!(context.filters(), context.lock().arg("--locked").arg("--offline").arg("--no-cache"), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because anyio was not found in the cache and leaf depends on anyio>3, we can conclude that leaf's requirements are unsatisfiable. - And because your workspace requires leaf, we can conclude that your workspace's requirements are unsatisfiable. - - hint: Packages were unavailable because the network was disabled. When the network is disabled, registry packages may only be read from the cache. - "###); + error: No solution found when resolving dependencies: + Caused by: Because anyio was not found in the cache and leaf depends on anyio>3, we can conclude that leaf's requirements are unsatisfiable. + And because your workspace requires leaf, we can conclude that your workspace's requirements are unsatisfiable. + + hint: Packages were unavailable because the network was disabled. When the network is disabled, registry packages may only be read from the cache. + "); // Re-run without `--locked`. uv_snapshot!(context.filters(), context.lock(), @r" @@ -14289,18 +14294,18 @@ fn lock_add_member_without_build_system() -> Result<()> { "); // Re-run with `--offline`. This should also fail, during the resolve phase. - uv_snapshot!(context.filters(), context.lock().arg("--locked").arg("--offline").arg("--no-cache"), @r###" + uv_snapshot!(context.filters(), context.lock().arg("--locked").arg("--offline").arg("--no-cache"), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because anyio was not found in the cache and leaf depends on anyio>3, we can conclude that leaf's requirements are unsatisfiable. - And because your workspace requires leaf, we can conclude that your workspace's requirements are unsatisfiable. - - hint: Packages were unavailable because the network was disabled. When the network is disabled, registry packages may only be read from the cache. - "###); + error: No solution found when resolving dependencies: + Caused by: Because anyio was not found in the cache and leaf depends on anyio>3, we can conclude that leaf's requirements are unsatisfiable. + And because your workspace requires leaf, we can conclude that your workspace's requirements are unsatisfiable. + + hint: Packages were unavailable because the network was disabled. When the network is disabled, registry packages may only be read from the cache. + "); // Re-run without `--locked`. uv_snapshot!(context.filters(), context.lock(), @r" @@ -17999,8 +18004,8 @@ fn lock_explicit_default_index() -> Result<()> { DEBUG Recording unit propagation conflict of anyio from incompatibility of (project) DEBUG Searching for a compatible version of project @ file://[TEMP_DIR]/ (<0.1.0 | >0.1.0) DEBUG No compatible version found for: project - × No solution found when resolving dependencies: - ╰─▶ Because anyio was not found in the package registry and your project depends on anyio, we can conclude that your project's requirements are unsatisfiable. + error: No solution found when resolving dependencies: + Caused by: Because anyio was not found in the package registry and your project depends on anyio, we can conclude that your project's requirements are unsatisfiable. DEBUG Released lock at `[CACHE_DIR]/.lock` "#); @@ -18203,15 +18208,15 @@ fn lock_default_index() -> Result<()> { "#, )?; - uv_snapshot!(context.filters(), context.lock(), @r###" + uv_snapshot!(context.filters(), context.lock(), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because iniconfig was not found in the package registry and your project depends on iniconfig, we can conclude that your project's requirements are unsatisfiable. - "###); + error: No solution found when resolving dependencies: + Caused by: Because iniconfig was not found in the package registry and your project depends on iniconfig, we can conclude that your project's requirements are unsatisfiable. + "); let lock = fs_err::read_to_string(context.temp_dir.join("uv.lock")).unwrap(); @@ -18272,16 +18277,16 @@ fn lock_named_index_cli() -> Result<()> { )?; // The package references a non-existent index. - uv_snapshot!(context.filters(), context.lock(), @r###" + uv_snapshot!(context.filters(), context.lock(), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- - × Failed to build `project @ file://[TEMP_DIR]/` - ├─▶ Failed to parse entry: `jinja2` - ╰─▶ Package `jinja2` references an undeclared index: `pytorch` - "###); + error: Failed to build `project @ file://[TEMP_DIR]/` + Caused by: Failed to parse entry: `jinja2` + Caused by: Package `jinja2` references an undeclared index: `pytorch` + "); // But it's fine if it comes from the CLI. uv_snapshot!(context.filters(), context.lock().arg("--index").arg("pytorch=https://astral-sh.github.io/pytorch-mirror/whl/cu121"), @r###" @@ -20641,21 +20646,21 @@ fn lock_invalid_project_table() -> Result<()> { ", )?; - uv_snapshot!(context.filters(), context.lock().current_dir(context.temp_dir.join("a")), @r###" + uv_snapshot!(context.filters(), context.lock().current_dir(context.temp_dir.join("a")), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- Using CPython 3.12.[X] interpreter at: [PYTHON-3.12] - × Failed to build `b @ file://[TEMP_DIR]/b` - ├─▶ Failed to parse metadata from built wheel - ╰─▶ TOML parse error at line 2, column 10 - | - 2 | [project.urls] - | ^^^^^^^ - `pyproject.toml` is using the `[project]` table, but the required `project.name` field is not set - "###); + error: Failed to build `b @ file://[TEMP_DIR]/b` + Caused by: Failed to parse metadata from built wheel + Caused by: TOML parse error at line 2, column 10 + | + 2 | [project.urls] + | ^^^^^^^ + `pyproject.toml` is using the `[project]` table, but the required `project.name` field is not set + "); Ok(()) } @@ -21196,10 +21201,10 @@ fn lock_keyring_explicit_always() -> Result<()> { ----- stderr ----- Keyring request for https://pypi-proxy.fly.dev/basic-auth/simple Keyring request for pypi-proxy.fly.dev - × No solution found when resolving dependencies: - ╰─▶ Because iniconfig was not found in the package registry and your project depends on iniconfig, we can conclude that your project's requirements are unsatisfiable. - - hint: An index URL (https://pypi-proxy.fly.dev/basic-auth/simple) could not be queried due to a lack of valid authentication credentials (401 Unauthorized). + error: No solution found when resolving dependencies: + Caused by: Because iniconfig was not found in the package registry and your project depends on iniconfig, we can conclude that your project's requirements are unsatisfiable. + + hint: An index URL (https://pypi-proxy.fly.dev/basic-auth/simple) could not be queried due to a lack of valid authentication credentials (401 Unauthorized). "); // With valid credentials, we should succeed @@ -22392,10 +22397,10 @@ fn lock_multiple_sources_index_overlapping_extras() -> Result<()> { ----- stdout ----- ----- stderr ----- - × Failed to resolve dependencies for `project` (v0.1.0) - ╰─▶ Requirements contain conflicting indexes for package `jinja2` in all marker environments: - - https://astral-sh.github.io/pytorch-mirror/whl/cu118 - - https://astral-sh.github.io/pytorch-mirror/whl/cu124 + error: Failed to resolve dependencies for `project` (v0.1.0) + Caused by: Requirements contain conflicting indexes for package `jinja2` in all marker environments: + - https://astral-sh.github.io/pytorch-mirror/whl/cu118 + - https://astral-sh.github.io/pytorch-mirror/whl/cu124 "); Ok(()) @@ -22427,15 +22432,15 @@ fn lock_multiple_index_with_missing_extra() -> Result<()> { "#, )?; - uv_snapshot!(context.filters(), context.lock(), @r###" + uv_snapshot!(context.filters(), context.lock(), @r#" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- - × Failed to build `project @ file://[TEMP_DIR]/` - ╰─▶ Source entry for `jinja2` only applies to extra `cu118`, but the `cu118` extra does not exist. When an extra is present on a source (e.g., `extra = "cu118"`), the relevant package must be included in the `project.optional-dependencies` section for that extra (e.g., `project.optional-dependencies = { "cu118" = ["jinja2"] }`). - "###); + error: Failed to build `project @ file://[TEMP_DIR]/` + Caused by: Source entry for `jinja2` only applies to extra `cu118`, but the `cu118` extra does not exist. When an extra is present on a source (e.g., `extra = "cu118"`), the relevant package must be included in the `project.optional-dependencies` section for that extra (e.g., `project.optional-dependencies = { "cu118" = ["jinja2"] }`). + "#); Ok(()) } @@ -22470,15 +22475,15 @@ fn lock_multiple_index_with_absent_extra() -> Result<()> { "#, )?; - uv_snapshot!(context.filters(), context.lock(), @r###" + uv_snapshot!(context.filters(), context.lock(), @r#" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- - × Failed to build `project @ file://[TEMP_DIR]/` - ╰─▶ Source entry for `jinja2` only applies to extra `cu118`, but `jinja2` was not found under the `project.optional-dependencies` section for that extra. When an extra is present on a source (e.g., `extra = "cu118"`), the relevant package must be included in the `project.optional-dependencies` section for that extra (e.g., `project.optional-dependencies = { "cu118" = ["jinja2"] }`). - "###); + error: Failed to build `project @ file://[TEMP_DIR]/` + Caused by: Source entry for `jinja2` only applies to extra `cu118`, but `jinja2` was not found under the `project.optional-dependencies` section for that extra. When an extra is present on a source (e.g., `extra = "cu118"`), the relevant package must be included in the `project.optional-dependencies` section for that extra (e.g., `project.optional-dependencies = { "cu118" = ["jinja2"] }`). + "#); Ok(()) } @@ -22509,15 +22514,15 @@ fn lock_multiple_index_with_missing_group() -> Result<()> { "#, )?; - uv_snapshot!(context.filters(), context.lock(), @r###" + uv_snapshot!(context.filters(), context.lock(), @r#" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- - × Failed to build `project @ file://[TEMP_DIR]/` - ╰─▶ Source entry for `jinja2` only applies to dependency group `cu118`, but the `cu118` group does not exist. When a group is present on a source (e.g., `group = "cu118"`), the relevant package must be included in the `dependency-groups` section for that extra (e.g., `dependency-groups = { "cu118" = ["jinja2"] }`). - "###); + error: Failed to build `project @ file://[TEMP_DIR]/` + Caused by: Source entry for `jinja2` only applies to dependency group `cu118`, but the `cu118` group does not exist. When a group is present on a source (e.g., `group = "cu118"`), the relevant package must be included in the `dependency-groups` section for that extra (e.g., `dependency-groups = { "cu118" = ["jinja2"] }`). + "#); Ok(()) } @@ -22552,15 +22557,15 @@ fn lock_multiple_index_with_absent_group() -> Result<()> { "#, )?; - uv_snapshot!(context.filters(), context.lock(), @r###" + uv_snapshot!(context.filters(), context.lock(), @r#" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- - × Failed to build `project @ file://[TEMP_DIR]/` - ╰─▶ Source entry for `jinja2` only applies to dependency group `cu118`, but `jinja2` was not found under the `dependency-groups` section for that group. When a group is present on a source (e.g., `group = "cu118"`), the relevant package must be included in the `dependency-groups` section for that extra (e.g., `dependency-groups = { "cu118" = ["jinja2"] }`). - "###); + error: Failed to build `project @ file://[TEMP_DIR]/` + Caused by: Source entry for `jinja2` only applies to dependency group `cu118`, but `jinja2` was not found under the `dependency-groups` section for that group. When a group is present on a source (e.g., `group = "cu118"`), the relevant package must be included in the `dependency-groups` section for that extra (e.g., `dependency-groups = { "cu118" = ["jinja2"] }`). + "#); Ok(()) } @@ -25781,30 +25786,31 @@ fn lock_derivation_chain_prod() -> Result<()> { ----- stdout ----- ----- stderr ----- - × Failed to build `wsgiref==0.1.2` - ├─▶ The build backend returned an error - ╰─▶ Call to `setuptools.build_meta:__legacy__.build_wheel` failed (exit status: 1) + error: Failed to build `wsgiref==0.1.2` + Caused by: The build backend returned an error + Caused by: Call to `setuptools.build_meta:__legacy__.build_wheel` failed (exit status: 1) + + [stderr] + Traceback (most recent call last): + File "", line 14, in + File "[CACHE_DIR]/builds-v0/[TMP]/build_meta.py", line 325, in get_requires_for_build_wheel + return self._get_build_requires(config_settings, requirements=['wheel']) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "[CACHE_DIR]/builds-v0/[TMP]/build_meta.py", line 295, in _get_build_requires + self.run_setup() + File "[CACHE_DIR]/builds-v0/[TMP]/build_meta.py", line 487, in run_setup + super().run_setup(setup_script=setup_script) + File "[CACHE_DIR]/builds-v0/[TMP]/build_meta.py", line 311, in run_setup + exec(code, locals()) + File "", line 5, in + File "[CACHE_DIR]/[TMP]/src/ez_setup/__init__.py", line 170 + print "Setuptools version",version,"or greater has been installed." + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + SyntaxError: Missing parentheses in call to 'print'. Did you mean print(...)? + + hint: This usually indicates a problem with the package or the build environment. - [stderr] - Traceback (most recent call last): - File "", line 14, in - File "[CACHE_DIR]/builds-v0/[TMP]/build_meta.py", line 325, in get_requires_for_build_wheel - return self._get_build_requires(config_settings, requirements=['wheel']) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "[CACHE_DIR]/builds-v0/[TMP]/build_meta.py", line 295, in _get_build_requires - self.run_setup() - File "[CACHE_DIR]/builds-v0/[TMP]/build_meta.py", line 487, in run_setup - super().run_setup(setup_script=setup_script) - File "[CACHE_DIR]/builds-v0/[TMP]/build_meta.py", line 311, in run_setup - exec(code, locals()) - File "", line 5, in - File "[CACHE_DIR]/[TMP]/src/ez_setup/__init__.py", line 170 - print "Setuptools version",version,"or greater has been installed." - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - SyntaxError: Missing parentheses in call to 'print'. Did you mean print(...)? - - hint: This usually indicates a problem with the package or the build environment. - help: `wsgiref` (v0.1.2) was included because `project` (v0.1.0) depends on `wsgiref==0.1.2` + hint: `wsgiref` (v0.1.2) was included because `project` (v0.1.0) depends on `wsgiref==0.1.2` "#); Ok(()) @@ -25838,30 +25844,31 @@ fn lock_derivation_chain_extra() -> Result<()> { ----- stdout ----- ----- stderr ----- - × Failed to build `wsgiref==0.1.2` - ├─▶ The build backend returned an error - ╰─▶ Call to `setuptools.build_meta:__legacy__.build_wheel` failed (exit status: 1) + error: Failed to build `wsgiref==0.1.2` + Caused by: The build backend returned an error + Caused by: Call to `setuptools.build_meta:__legacy__.build_wheel` failed (exit status: 1) + + [stderr] + Traceback (most recent call last): + File "", line 14, in + File "[CACHE_DIR]/builds-v0/[TMP]/build_meta.py", line 325, in get_requires_for_build_wheel + return self._get_build_requires(config_settings, requirements=['wheel']) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "[CACHE_DIR]/builds-v0/[TMP]/build_meta.py", line 295, in _get_build_requires + self.run_setup() + File "[CACHE_DIR]/builds-v0/[TMP]/build_meta.py", line 487, in run_setup + super().run_setup(setup_script=setup_script) + File "[CACHE_DIR]/builds-v0/[TMP]/build_meta.py", line 311, in run_setup + exec(code, locals()) + File "", line 5, in + File "[CACHE_DIR]/[TMP]/src/ez_setup/__init__.py", line 170 + print "Setuptools version",version,"or greater has been installed." + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + SyntaxError: Missing parentheses in call to 'print'. Did you mean print(...)? + + hint: This usually indicates a problem with the package or the build environment. - [stderr] - Traceback (most recent call last): - File "", line 14, in - File "[CACHE_DIR]/builds-v0/[TMP]/build_meta.py", line 325, in get_requires_for_build_wheel - return self._get_build_requires(config_settings, requirements=['wheel']) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "[CACHE_DIR]/builds-v0/[TMP]/build_meta.py", line 295, in _get_build_requires - self.run_setup() - File "[CACHE_DIR]/builds-v0/[TMP]/build_meta.py", line 487, in run_setup - super().run_setup(setup_script=setup_script) - File "[CACHE_DIR]/builds-v0/[TMP]/build_meta.py", line 311, in run_setup - exec(code, locals()) - File "", line 5, in - File "[CACHE_DIR]/[TMP]/src/ez_setup/__init__.py", line 170 - print "Setuptools version",version,"or greater has been installed." - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - SyntaxError: Missing parentheses in call to 'print'. Did you mean print(...)? - - hint: This usually indicates a problem with the package or the build environment. - help: `wsgiref` (v0.1.2) was included because `project[wsgi]` (v0.1.0) depends on `wsgiref>=0.1` + hint: `wsgiref` (v0.1.2) was included because `project[wsgi]` (v0.1.0) depends on `wsgiref>=0.1` "#); Ok(()) @@ -25897,30 +25904,31 @@ fn lock_derivation_chain_group() -> Result<()> { ----- stdout ----- ----- stderr ----- - × Failed to build `wsgiref==0.1.2` - ├─▶ The build backend returned an error - ╰─▶ Call to `setuptools.build_meta:__legacy__.build_wheel` failed (exit status: 1) + error: Failed to build `wsgiref==0.1.2` + Caused by: The build backend returned an error + Caused by: Call to `setuptools.build_meta:__legacy__.build_wheel` failed (exit status: 1) + + [stderr] + Traceback (most recent call last): + File "", line 14, in + File "[CACHE_DIR]/builds-v0/[TMP]/build_meta.py", line 325, in get_requires_for_build_wheel + return self._get_build_requires(config_settings, requirements=['wheel']) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "[CACHE_DIR]/builds-v0/[TMP]/build_meta.py", line 295, in _get_build_requires + self.run_setup() + File "[CACHE_DIR]/builds-v0/[TMP]/build_meta.py", line 487, in run_setup + super().run_setup(setup_script=setup_script) + File "[CACHE_DIR]/builds-v0/[TMP]/build_meta.py", line 311, in run_setup + exec(code, locals()) + File "", line 5, in + File "[CACHE_DIR]/[TMP]/src/ez_setup/__init__.py", line 170 + print "Setuptools version",version,"or greater has been installed." + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + SyntaxError: Missing parentheses in call to 'print'. Did you mean print(...)? + + hint: This usually indicates a problem with the package or the build environment. - [stderr] - Traceback (most recent call last): - File "", line 14, in - File "[CACHE_DIR]/builds-v0/[TMP]/build_meta.py", line 325, in get_requires_for_build_wheel - return self._get_build_requires(config_settings, requirements=['wheel']) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "[CACHE_DIR]/builds-v0/[TMP]/build_meta.py", line 295, in _get_build_requires - self.run_setup() - File "[CACHE_DIR]/builds-v0/[TMP]/build_meta.py", line 487, in run_setup - super().run_setup(setup_script=setup_script) - File "[CACHE_DIR]/builds-v0/[TMP]/build_meta.py", line 311, in run_setup - exec(code, locals()) - File "", line 5, in - File "[CACHE_DIR]/[TMP]/src/ez_setup/__init__.py", line 170 - print "Setuptools version",version,"or greater has been installed." - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - SyntaxError: Missing parentheses in call to 'print'. Did you mean print(...)? - - hint: This usually indicates a problem with the package or the build environment. - help: `wsgiref` (v0.1.2) was included because `project:wsgi` (v0.1.0) depends on `wsgiref` + hint: `wsgiref` (v0.1.2) was included because `project:wsgi` (v0.1.0) depends on `wsgiref` "#); Ok(()) @@ -25967,30 +25975,31 @@ fn lock_derivation_chain_extended() -> Result<()> { ----- stdout ----- ----- stderr ----- - × Failed to build `wsgiref==0.1.2` - ├─▶ The build backend returned an error - ╰─▶ Call to `setuptools.build_meta:__legacy__.build_wheel` failed (exit status: 1) + error: Failed to build `wsgiref==0.1.2` + Caused by: The build backend returned an error + Caused by: Call to `setuptools.build_meta:__legacy__.build_wheel` failed (exit status: 1) + + [stderr] + Traceback (most recent call last): + File "", line 14, in + File "[CACHE_DIR]/builds-v0/[TMP]/build_meta.py", line 325, in get_requires_for_build_wheel + return self._get_build_requires(config_settings, requirements=['wheel']) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "[CACHE_DIR]/builds-v0/[TMP]/build_meta.py", line 295, in _get_build_requires + self.run_setup() + File "[CACHE_DIR]/builds-v0/[TMP]/build_meta.py", line 487, in run_setup + super().run_setup(setup_script=setup_script) + File "[CACHE_DIR]/builds-v0/[TMP]/build_meta.py", line 311, in run_setup + exec(code, locals()) + File "", line 5, in + File "[CACHE_DIR]/[TMP]/src/ez_setup/__init__.py", line 170 + print "Setuptools version",version,"or greater has been installed." + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + SyntaxError: Missing parentheses in call to 'print'. Did you mean print(...)? + + hint: This usually indicates a problem with the package or the build environment. - [stderr] - Traceback (most recent call last): - File "", line 14, in - File "[CACHE_DIR]/builds-v0/[TMP]/build_meta.py", line 325, in get_requires_for_build_wheel - return self._get_build_requires(config_settings, requirements=['wheel']) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "[CACHE_DIR]/builds-v0/[TMP]/build_meta.py", line 295, in _get_build_requires - self.run_setup() - File "[CACHE_DIR]/builds-v0/[TMP]/build_meta.py", line 487, in run_setup - super().run_setup(setup_script=setup_script) - File "[CACHE_DIR]/builds-v0/[TMP]/build_meta.py", line 311, in run_setup - exec(code, locals()) - File "", line 5, in - File "[CACHE_DIR]/[TMP]/src/ez_setup/__init__.py", line 170 - print "Setuptools version",version,"or greater has been installed." - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - SyntaxError: Missing parentheses in call to 'print'. Did you mean print(...)? - - hint: This usually indicates a problem with the package or the build environment. - help: `wsgiref` (v0.1.2) was included because `project` (v0.1.0) depends on `child` (v0.1.0) which depends on `wsgiref>=0.1, <0.2` + hint: `wsgiref` (v0.1.2) was included because `project` (v0.1.0) depends on `child` (v0.1.0) which depends on `wsgiref>=0.1, <0.2` "#); Ok(()) @@ -26017,17 +26026,18 @@ fn mismatched_name_self_editable() -> Result<()> { )?; // Running `uv sync` should generate a lockfile. - uv_snapshot!(context.filters(), context.sync(), @r###" + uv_snapshot!(context.filters(), context.sync(), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- Resolved 2 packages in [TIME] - × Failed to build `foo @ file://[TEMP_DIR]/` - ╰─▶ Package metadata name `project` does not match given name `foo` - help: `foo` was included because `project` (v0.1.0) depends on `foo` - "###); + error: Failed to build `foo @ file://[TEMP_DIR]/` + Caused by: Package metadata name `project` does not match given name `foo` + + hint: `foo` was included because `project` (v0.1.0) depends on `foo` + "); Ok(()) } @@ -26392,15 +26402,15 @@ fn lock_no_build_dynamic_metadata() -> Result<()> { "#, )?; - uv_snapshot!(context.filters(), context.lock().arg("--no-build"), @r###" + uv_snapshot!(context.filters(), context.lock().arg("--no-build"), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- - × Failed to build `dummy @ file://[TEMP_DIR]/` - ╰─▶ Building source distributions for `dummy` is disabled - "###); + error: Failed to build `dummy @ file://[TEMP_DIR]/` + Caused by: Building source distributions for `dummy` is disabled + "); Ok(()) } @@ -26626,10 +26636,10 @@ fn lock_self_incompatible() -> Result<()> { ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because your project depends on itself at an incompatible version (project==0.2.0), we can conclude that your project's requirements are unsatisfiable. - - hint: The project `project` depends on itself at an incompatible version. This is likely a mistake. If you intended to depend on a third-party package named `project`, consider renaming the project `project` to avoid creating a conflict. + error: No solution found when resolving dependencies: + Caused by: Because your project depends on itself at an incompatible version (project==0.2.0), we can conclude that your project's requirements are unsatisfiable. + + hint: The project `project` depends on itself at an incompatible version. This is likely a mistake. If you intended to depend on a third-party package named `project`, consider renaming the project `project` to avoid creating a conflict. "); Ok(()) @@ -26763,10 +26773,10 @@ fn lock_self_extra_to_same_extra_incompatible() -> Result<()> { ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because project[foo] depends on itself at an incompatible version (project==0.2.0) and your project requires project[foo], we can conclude that your project's requirements are unsatisfiable. - - hint: The project `project` depends on itself at an incompatible version. This is likely a mistake. If you intended to depend on a third-party package named `project`, consider renaming the project `project` to avoid creating a conflict. + error: No solution found when resolving dependencies: + Caused by: Because project[foo] depends on itself at an incompatible version (project==0.2.0) and your project requires project[foo], we can conclude that your project's requirements are unsatisfiable. + + hint: The project `project` depends on itself at an incompatible version. This is likely a mistake. If you intended to depend on a third-party package named `project`, consider renaming the project `project` to avoid creating a conflict. "); Ok(()) @@ -26797,10 +26807,10 @@ fn lock_self_extra_to_other_extra_incompatible() -> Result<()> { ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because project[foo] depends on itself at an incompatible version (project==0.2.0) and your project requires project[foo], we can conclude that your project's requirements are unsatisfiable. - - hint: The project `project` depends on itself at an incompatible version. This is likely a mistake. If you intended to depend on a third-party package named `project`, consider renaming the project `project` to avoid creating a conflict. + error: No solution found when resolving dependencies: + Caused by: Because project[foo] depends on itself at an incompatible version (project==0.2.0) and your project requires project[foo], we can conclude that your project's requirements are unsatisfiable. + + hint: The project `project` depends on itself at an incompatible version. This is likely a mistake. If you intended to depend on a third-party package named `project`, consider renaming the project `project` to avoid creating a conflict. "); Ok(()) @@ -26934,10 +26944,10 @@ fn lock_self_extra_incompatible() -> Result<()> { ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because project[foo] depends on itself at an incompatible version (project==0.2.0) and your project requires project[foo], we can conclude that your project's requirements are unsatisfiable. - - hint: The project `project` depends on itself at an incompatible version. This is likely a mistake. If you intended to depend on a third-party package named `project`, consider renaming the project `project` to avoid creating a conflict. + error: No solution found when resolving dependencies: + Caused by: Because project[foo] depends on itself at an incompatible version (project==0.2.0) and your project requires project[foo], we can conclude that your project's requirements are unsatisfiable. + + hint: The project `project` depends on itself at an incompatible version. This is likely a mistake. If you intended to depend on a third-party package named `project`, consider renaming the project `project` to avoid creating a conflict. "); Ok(()) @@ -27064,10 +27074,10 @@ fn lock_self_marker_incompatible() -> Result<()> { ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because your project depends on itself at an incompatible version (project{sys_platform == 'win32'}>0.1), we can conclude that your project's requirements are unsatisfiable. - - hint: The project `project` depends on itself at an incompatible version. This is likely a mistake. If you intended to depend on a third-party package named `project`, consider renaming the project `project` to avoid creating a conflict. + error: No solution found when resolving dependencies: + Caused by: Because your project depends on itself at an incompatible version (project{sys_platform == 'win32'}>0.1), we can conclude that your project's requirements are unsatisfiable. + + hint: The project `project` depends on itself at an incompatible version. This is likely a mistake. If you intended to depend on a third-party package named `project`, consider renaming the project `project` to avoid creating a conflict. "); Ok(()) @@ -27185,16 +27195,16 @@ fn lock_missing_git_prefix() -> Result<()> { "#, )?; - uv_snapshot!(context.filters(), context.lock(), @r###" + uv_snapshot!(context.filters(), context.lock(), @r#" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- - × Failed to build `project @ file://[TEMP_DIR]/` - ├─▶ Failed to parse entry: `workspace-in-root-test` - ╰─▶ `workspace-in-root-test` is associated with a URL source, but references a Git repository. Consider using a Git source instead (e.g., `workspace-in-root-test = { git = "https://github.com/astral-sh/workspace-in-root-test" }`) - "###); + error: Failed to build `project @ file://[TEMP_DIR]/` + Caused by: Failed to parse entry: `workspace-in-root-test` + Caused by: `workspace-in-root-test` is associated with a URL source, but references a Git repository. Consider using a Git source instead (e.g., `workspace-in-root-test = { git = "https://github.com/astral-sh/workspace-in-root-test" }`) + "#); Ok(()) } @@ -30236,11 +30246,11 @@ fn lock_conflict_for_disjoint_python_version() -> Result<()> { ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies for split (markers: python_full_version >= '3.11'): - ╰─▶ Because pandas==1.5.3 depends on numpy{python_full_version >= '3.10'}>=1.21.0 and your project depends on numpy==1.20.3, we can conclude that your project and pandas==1.5.3 are incompatible. - And because your project depends on pandas==1.5.3, we can conclude that your project's requirements are unsatisfiable. - - hint: While the active Python version is 3.9, the resolution failed for other Python versions supported by your project. Consider limiting your project's supported Python versions using `requires-python`. + error: No solution found when resolving dependencies for split (markers: python_full_version >= '3.11'): + Caused by: Because pandas==1.5.3 depends on numpy{python_full_version >= '3.10'}>=1.21.0 and your project depends on numpy==1.20.3, we can conclude that your project and pandas==1.5.3 are incompatible. + And because your project depends on pandas==1.5.3, we can conclude that your project's requirements are unsatisfiable. + + hint: While the active Python version is 3.9, the resolution failed for other Python versions supported by your project. Consider limiting your project's supported Python versions using `requires-python`. "); // Check that the resolution passes on the restricted Python environment. @@ -30458,10 +30468,10 @@ fn lock_conflict_for_disjoint_platform() -> Result<()> { ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies for split (markers: sys_platform == 'exotic'): - ╰─▶ Because your project depends on numpy{sys_platform == 'exotic'}>=1.24,<1.26 and numpy>=1.26, we can conclude that your project's requirements are unsatisfiable. - - hint: The resolution failed for an environment that is not the current one, consider limiting the environments with `tool.uv.environments`. + error: No solution found when resolving dependencies for split (markers: sys_platform == 'exotic'): + Caused by: Because your project depends on numpy{sys_platform == 'exotic'}>=1.24,<1.26 and numpy>=1.26, we can conclude that your project's requirements are unsatisfiable. + + hint: The resolution failed for an environment that is not the current one, consider limiting the environments with `tool.uv.environments`. "); // Check that the resolution passes on the restricted environment. @@ -31063,8 +31073,8 @@ fn lock_prefix_match() -> Result<()> { ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because only anyio<=4.3.0 is available and your project depends on anyio==5.4.*, we can conclude that your project's requirements are unsatisfiable. + error: No solution found when resolving dependencies: + Caused by: Because only anyio<=4.3.0 is available and your project depends on anyio==5.4.*, we can conclude that your project's requirements are unsatisfiable. "); Ok(()) @@ -32181,10 +32191,10 @@ fn collapsed_error_with_marker_packages() -> Result<()> { ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies for split (markers: python_full_version < '3.14' and sys_platform == 'other'): - ╰─▶ Because your project depends on anyio{sys_platform == 'other'} and anyio{python_full_version < '3.14'}>=4.4.0, we can conclude that your project's requirements are unsatisfiable. - - hint: The resolution failed for an environment that is not the current one, consider limiting the environments with `tool.uv.environments`. + error: No solution found when resolving dependencies for split (markers: python_full_version < '3.14' and sys_platform == 'other'): + Caused by: Because your project depends on anyio{sys_platform == 'other'} and anyio{python_full_version < '3.14'}>=4.4.0, we can conclude that your project's requirements are unsatisfiable. + + hint: The resolution failed for an environment that is not the current one, consider limiting the environments with `tool.uv.environments`. "); Ok(()) @@ -32242,9 +32252,9 @@ fn lock_unsupported_wheel_url_requires_python() -> Result<()> { ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because only numpy==2.3.5 is available and numpy==2.3.5 has no wheels with a matching Python version tag (e.g., `cp312`), we can conclude that all versions of numpy cannot be used. - And because your project depends on numpy, we can conclude that your project's requirements are unsatisfiable. + error: No solution found when resolving dependencies: + Caused by: Because only numpy==2.3.5 is available and numpy==2.3.5 has no wheels with a matching Python version tag (e.g., `cp312`), we can conclude that all versions of numpy cannot be used. + And because your project depends on numpy, we can conclude that your project's requirements are unsatisfiable. "); Ok(()) @@ -32274,9 +32284,9 @@ fn lock_unsupported_wheel_url_required_platform() -> Result<()> { ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because only numpy==2.3.5 is available and numpy==2.3.5 has no Windows-compatible wheels, we can conclude that all versions of numpy cannot be used. - And because your project depends on numpy, we can conclude that your project's requirements are unsatisfiable. + error: No solution found when resolving dependencies: + Caused by: Because only numpy==2.3.5 is available and numpy==2.3.5 has no Windows-compatible wheels, we can conclude that all versions of numpy cannot be used. + And because your project depends on numpy, we can conclude that your project's requirements are unsatisfiable. "); Ok(()) diff --git a/crates/uv/tests/it/lock_conflict.rs b/crates/uv/tests/it/lock_conflict.rs index 335b0b9fe..640d37e4e 100644 --- a/crates/uv/tests/it/lock_conflict.rs +++ b/crates/uv/tests/it/lock_conflict.rs @@ -38,16 +38,16 @@ fn extra_basic() -> Result<()> { "#, )?; - uv_snapshot!(context.filters(), context.lock(), @r###" + uv_snapshot!(context.filters(), context.lock(), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because project[extra2] depends on sortedcontainers==2.4.0 and project[extra1] depends on sortedcontainers==2.3.0, we can conclude that project[extra1] and project[extra2] are incompatible. - And because your project requires project[extra1] and project[extra2], we can conclude that your project's requirements are unsatisfiable. - "###); + error: No solution found when resolving dependencies: + Caused by: Because project[extra2] depends on sortedcontainers==2.4.0 and project[extra1] depends on sortedcontainers==2.3.0, we can conclude that project[extra1] and project[extra2] are incompatible. + And because your project requires project[extra1] and project[extra2], we can conclude that your project's requirements are unsatisfiable. + "); // And now with the same extra configuration, we tell uv about // the conflicting extras, which forces it to resolve each in @@ -230,16 +230,16 @@ fn extra_basic_three_extras() -> Result<()> { "#, )?; - uv_snapshot!(context.filters(), context.lock(), @r###" + uv_snapshot!(context.filters(), context.lock(), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because project[extra2] depends on sortedcontainers==2.3.0 and project[extra1] depends on sortedcontainers==2.2.0, we can conclude that project[extra1] and project[extra2] are incompatible. - And because your project requires project[extra1] and project[extra2], we can conclude that your project's requirements are unsatisfiable. - "###); + error: No solution found when resolving dependencies: + Caused by: Because project[extra2] depends on sortedcontainers==2.3.0 and project[extra1] depends on sortedcontainers==2.2.0, we can conclude that project[extra1] and project[extra2] are incompatible. + And because your project requires project[extra1] and project[extra2], we can conclude that your project's requirements are unsatisfiable. + "); // And now with the same extra configuration, we tell uv about // the conflicting extras, which forces it to resolve each in @@ -506,16 +506,16 @@ fn extra_multiple_not_conflicting2() -> Result<()> { )?; // Fails, as expected. - uv_snapshot!(context.filters(), context.lock(), @r###" + uv_snapshot!(context.filters(), context.lock(), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because project[extra2] depends on sortedcontainers==2.4.0 and project[extra1] depends on sortedcontainers==2.3.0, we can conclude that project[extra1] and project[extra2] are incompatible. - And because your project requires project[extra1] and project[extra2], we can conclude that your project's requirements are unsatisfiable. - "###); + error: No solution found when resolving dependencies: + Caused by: Because project[extra2] depends on sortedcontainers==2.4.0 and project[extra1] depends on sortedcontainers==2.3.0, we can conclude that project[extra1] and project[extra2] are incompatible. + And because your project requires project[extra1] and project[extra2], we can conclude that your project's requirements are unsatisfiable. + "); // If we define extra1/extra2 as conflicting and project3/project4 // as conflicting, that still isn't enough! That's because extra1 @@ -552,9 +552,9 @@ fn extra_multiple_not_conflicting2() -> Result<()> { ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies for split (included: project[extra2], project[project3]; excluded: project[extra1], project[project4]): - ╰─▶ Because project[project3] depends on sortedcontainers==2.3.0 and project[extra2] depends on sortedcontainers==2.4.0, we can conclude that project[extra2] and project[project3] are incompatible. - And because your project requires project[extra2] and project[project3], we can conclude that your project's requirements are unsatisfiable. + error: No solution found when resolving dependencies for split (included: project[extra2], project[project3]; excluded: project[extra1], project[project4]): + Caused by: Because project[project3] depends on sortedcontainers==2.3.0 and project[extra2] depends on sortedcontainers==2.4.0, we can conclude that project[extra2] and project[project3] are incompatible. + And because your project requires project[extra2] and project[project3], we can conclude that your project's requirements are unsatisfiable. "); // One could try to declare all pairs of conflicting extras as @@ -667,16 +667,16 @@ fn extra_multiple_independent() -> Result<()> { project4 = ["anyio==4.2.0"] "#, )?; - uv_snapshot!(context.filters(), context.lock(), @r###" + uv_snapshot!(context.filters(), context.lock(), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because project[extra2] depends on sortedcontainers==2.4.0 and project[extra1] depends on sortedcontainers==2.3.0, we can conclude that project[extra1] and project[extra2] are incompatible. - And because your project requires project[extra1] and project[extra2], we can conclude that your project's requirements are unsatisfiable. - "###); + error: No solution found when resolving dependencies: + Caused by: Because project[extra2] depends on sortedcontainers==2.4.0 and project[extra1] depends on sortedcontainers==2.3.0, we can conclude that project[extra1] and project[extra2] are incompatible. + And because your project requires project[extra1] and project[extra2], we can conclude that your project's requirements are unsatisfiable. + "); // OK, responding to the error, we declare our anyio extras // as conflicting. But now we should see sortedcontainers as @@ -709,9 +709,9 @@ fn extra_multiple_independent() -> Result<()> { ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies for split (included: project[project4]; excluded: project[project3]): - ╰─▶ Because project[extra2] depends on sortedcontainers==2.4.0 and project[extra1] depends on sortedcontainers==2.3.0, we can conclude that project[extra1] and project[extra2] are incompatible. - And because your project requires project[extra1] and project[extra2], we can conclude that your project's requirements are unsatisfiable. + error: No solution found when resolving dependencies for split (included: project[project4]; excluded: project[project3]): + Caused by: Because project[extra2] depends on sortedcontainers==2.4.0 and project[extra1] depends on sortedcontainers==2.3.0, we can conclude that project[extra1] and project[extra2] are incompatible. + And because your project requires project[extra1] and project[extra2], we can conclude that your project's requirements are unsatisfiable. "); // Once we declare ALL our conflicting extras, resolution succeeds. @@ -987,16 +987,16 @@ fn extra_config_change_ignore_lockfile() -> Result<()> { )?; // Re-run with `--locked`, which should now fail because of // the conflicting group config removal. - uv_snapshot!(context.filters(), context.lock().arg("--locked"), @r###" + uv_snapshot!(context.filters(), context.lock().arg("--locked"), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because project[extra2] depends on sortedcontainers==2.4.0 and project[extra1] depends on sortedcontainers==2.3.0, we can conclude that project[extra1] and project[extra2] are incompatible. - And because your project requires project[extra1] and project[extra2], we can conclude that your project's requirements are unsatisfiable. - "###); + error: No solution found when resolving dependencies: + Caused by: Because project[extra2] depends on sortedcontainers==2.4.0 and project[extra1] depends on sortedcontainers==2.3.0, we can conclude that project[extra1] and project[extra2] are incompatible. + And because your project requires project[extra1] and project[extra2], we can conclude that your project's requirements are unsatisfiable. + "); Ok(()) } @@ -1557,13 +1557,13 @@ fn extra_nested_across_workspace() -> Result<()> { ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies for split (included: dummy[extra2], dummysub[extra1]; excluded: dummy[extra1], dummysub[extra2]): - ╰─▶ Because dummy[extra2] depends on proxy1[extra2] and only proxy1[extra2]==0.1.0 is available, we can conclude that dummy[extra2] depends on proxy1[extra2]==0.1.0. (1) - - Because proxy1[extra1]==0.1.0 depends on anyio==4.1.0 and proxy1[extra2]==0.1.0 depends on anyio==4.2.0, we can conclude that proxy1[extra1]==0.1.0 and proxy1[extra2]==0.1.0 are incompatible. - And because we know from (1) that dummy[extra2] depends on proxy1[extra2]==0.1.0, we can conclude that dummy[extra2] and proxy1[extra1]==0.1.0 are incompatible. - And because only proxy1[extra1]==0.1.0 is available and dummysub[extra1] depends on proxy1[extra1], we can conclude that dummysub[extra1] and dummy[extra2] are incompatible. - And because your workspace requires dummy[extra2] and dummysub[extra1], we can conclude that your workspace's requirements are unsatisfiable. + error: No solution found when resolving dependencies for split (included: dummy[extra2], dummysub[extra1]; excluded: dummy[extra1], dummysub[extra2]): + Caused by: Because dummy[extra2] depends on proxy1[extra2] and only proxy1[extra2]==0.1.0 is available, we can conclude that dummy[extra2] depends on proxy1[extra2]==0.1.0. (1) + + Because proxy1[extra1]==0.1.0 depends on anyio==4.1.0 and proxy1[extra2]==0.1.0 depends on anyio==4.2.0, we can conclude that proxy1[extra1]==0.1.0 and proxy1[extra2]==0.1.0 are incompatible. + And because we know from (1) that dummy[extra2] depends on proxy1[extra2]==0.1.0, we can conclude that dummy[extra2] and proxy1[extra1]==0.1.0 are incompatible. + And because only proxy1[extra1]==0.1.0 is available and dummysub[extra1] depends on proxy1[extra1], we can conclude that dummysub[extra1] and dummy[extra2] are incompatible. + And because your workspace requires dummy[extra2] and dummysub[extra1], we can conclude that your workspace's requirements are unsatisfiable. "); // Now let's write out the full set of conflicts, taking @@ -1696,9 +1696,9 @@ fn extra_depends_on_conflicting_extra() -> Result<()> { ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies for split (included: example[foo]; excluded: example[bar]): - ╰─▶ Because example[foo] depends on sortedcontainers==2.3.0 and sortedcontainers==2.4.0, we can conclude that example[foo]'s requirements are unsatisfiable. - And because your project requires example[foo], we can conclude that your project's requirements are unsatisfiable. + error: No solution found when resolving dependencies for split (included: example[foo]; excluded: example[bar]): + Caused by: Because example[foo] depends on sortedcontainers==2.3.0 and sortedcontainers==2.4.0, we can conclude that example[foo]'s requirements are unsatisfiable. + And because your project requires example[foo], we can conclude that your project's requirements are unsatisfiable. "); Ok(()) @@ -1918,16 +1918,16 @@ fn group_basic() -> Result<()> { "#, )?; - uv_snapshot!(context.filters(), context.lock(), @r###" + uv_snapshot!(context.filters(), context.lock(), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because project:group2 depends on sortedcontainers==2.4.0 and project:group1 depends on sortedcontainers==2.3.0, we can conclude that project:group1 and project:group2 are incompatible. - And because your project requires project:group1 and project:group2, we can conclude that your project's requirements are unsatisfiable. - "###); + error: No solution found when resolving dependencies: + Caused by: Because project:group2 depends on sortedcontainers==2.4.0 and project:group1 depends on sortedcontainers==2.3.0, we can conclude that project:group1 and project:group2 are incompatible. + And because your project requires project:group1 and project:group2, we can conclude that your project's requirements are unsatisfiable. + "); // And now with the same group configuration, we tell uv about // the conflicting groups, which forces it to resolve each in @@ -2283,16 +2283,16 @@ fn mixed() -> Result<()> { "#, )?; - uv_snapshot!(context.filters(), context.lock(), @r###" + uv_snapshot!(context.filters(), context.lock(), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because project:group1 depends on sortedcontainers==2.3.0 and project[extra1] depends on sortedcontainers==2.4.0, we can conclude that project:group1 and project[extra1] are incompatible. - And because your project requires project[extra1] and project:group1, we can conclude that your project's requirements are unsatisfiable. - "###); + error: No solution found when resolving dependencies: + Caused by: Because project:group1 depends on sortedcontainers==2.3.0 and project[extra1] depends on sortedcontainers==2.4.0, we can conclude that project:group1 and project[extra1] are incompatible. + And because your project requires project[extra1] and project:group1, we can conclude that your project's requirements are unsatisfiable. + "); // And now with the same extra/group configuration, we tell uv // about the conflicting groups, which forces it to resolve each in diff --git a/crates/uv/tests/it/lock_exclude_newer_relative.rs b/crates/uv/tests/it/lock_exclude_newer_relative.rs index fe7ddf0c7..0f174adf6 100644 --- a/crates/uv/tests/it/lock_exclude_newer_relative.rs +++ b/crates/uv/tests/it/lock_exclude_newer_relative.rs @@ -1012,8 +1012,8 @@ fn lock_exclude_newer_relative_values() -> Result<()> { ----- stderr ----- Ignoring existing lockfile due to removal of exclude newer span - × No solution found when resolving dependencies: - ╰─▶ Because there are no versions of iniconfig and your project depends on iniconfig, we can conclude that your project's requirements are unsatisfiable. + error: No solution found when resolving dependencies: + Caused by: Because there are no versions of iniconfig and your project depends on iniconfig, we can conclude that your project's requirements are unsatisfiable. "); uv_snapshot!(context.filters(), context diff --git a/crates/uv/tests/it/lock_scenarios.rs b/crates/uv/tests/it/lock_scenarios.rs index 088fc18c3..a9e28570a 100644 --- a/crates/uv/tests/it/lock_scenarios.rs +++ b/crates/uv/tests/it/lock_scenarios.rs @@ -777,16 +777,16 @@ fn conflict_in_fork() -> Result<()> { ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies for split (markers: sys_platform == 'os2'): - ╰─▶ Because only package-b==1.0.0 is available and package-b==1.0.0 depends on package-d==1, we can conclude that all versions of package-b depend on package-d==1. - And because package-c==1.0.0 depends on package-d==2 and only package-c==1.0.0 is available, we can conclude that all versions of package-b and all versions of package-c are incompatible. - And because package-a==1.0.0 depends on package-b and package-c, we can conclude that package-a==1.0.0 cannot be used. - And because only the following versions of package-a{sys_platform == 'os2'} are available: - package-a{sys_platform == 'os2'}==1.0.0 - package-a{sys_platform == 'os2'}>=2 - and your project depends on package-a{sys_platform == 'os2'}<2, we can conclude that your project's requirements are unsatisfiable. - - hint: The resolution failed for an environment that is not the current one, consider limiting the environments with `tool.uv.environments`. + error: No solution found when resolving dependencies for split (markers: sys_platform == 'os2'): + Caused by: Because only package-b==1.0.0 is available and package-b==1.0.0 depends on package-d==1, we can conclude that all versions of package-b depend on package-d==1. + And because package-c==1.0.0 depends on package-d==2 and only package-c==1.0.0 is available, we can conclude that all versions of package-b and all versions of package-c are incompatible. + And because package-a==1.0.0 depends on package-b and package-c, we can conclude that package-a==1.0.0 cannot be used. + And because only the following versions of package-a{sys_platform == 'os2'} are available: + package-a{sys_platform == 'os2'}==1.0.0 + package-a{sys_platform == 'os2'}>=2 + and your project depends on package-a{sys_platform == 'os2'}<2, we can conclude that your project's requirements are unsatisfiable. + + hint: The resolution failed for an environment that is not the current one, consider limiting the environments with `tool.uv.environments`. " ); @@ -847,8 +847,8 @@ fn fork_conflict_unsatisfiable() -> Result<()> { ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because your project depends on package-a>=2 and package-a<2, we can conclude that your project's requirements are unsatisfiable. + error: No solution found when resolving dependencies: + Caused by: Because your project depends on package-a>=2 and package-a<2, we can conclude that your project's requirements are unsatisfiable. " ); @@ -1518,8 +1518,8 @@ fn fork_marker_disjoint() -> Result<()> { ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because your project depends on package-a{sys_platform == 'linux'}>=2 and package-a{sys_platform == 'linux'}<2, we can conclude that your project's requirements are unsatisfiable. + error: No solution found when resolving dependencies: + Caused by: Because your project depends on package-a{sys_platform == 'linux'}>=2 and package-a{sys_platform == 'linux'}<2, we can conclude that your project's requirements are unsatisfiable. " ); @@ -3147,9 +3147,9 @@ fn fork_non_local_fork_marker_direct() -> Result<()> { ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because package-a==1.0.0 depends on package-c<2.0.0 and package-b==1.0.0 depends on package-c>=2.0.0, we can conclude that package-b==1.0.0 and package-a{sys_platform == 'linux'}==1.0.0 are incompatible. - And because your project depends on package-a{sys_platform == 'linux'}==1.0.0 and package-b{sys_platform == 'darwin'}==1.0.0, we can conclude that your project's requirements are unsatisfiable. + error: No solution found when resolving dependencies: + Caused by: Because package-a==1.0.0 depends on package-c<2.0.0 and package-b==1.0.0 depends on package-c>=2.0.0, we can conclude that package-b==1.0.0 and package-a{sys_platform == 'linux'}==1.0.0 are incompatible. + And because your project depends on package-a{sys_platform == 'linux'}==1.0.0 and package-b{sys_platform == 'darwin'}==1.0.0, we can conclude that your project's requirements are unsatisfiable. " ); @@ -3219,9 +3219,9 @@ fn fork_non_local_fork_marker_transitive() -> Result<()> { ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because package-a==1.0.0 depends on package-c{sys_platform == 'linux'}<2.0.0 and package-b==1.0.0 depends on package-c{sys_platform == 'darwin'}>=2.0.0, we can conclude that package-a==1.0.0 and package-b==1.0.0 are incompatible. - And because your project depends on package-a==1.0.0 and package-b==1.0.0, we can conclude that your project's requirements are unsatisfiable. + error: No solution found when resolving dependencies: + Caused by: Because package-a==1.0.0 depends on package-c{sys_platform == 'linux'}<2.0.0 and package-b==1.0.0 depends on package-c{sys_platform == 'darwin'}>=2.0.0, we can conclude that package-a==1.0.0 and package-b==1.0.0 are incompatible. + And because your project depends on package-a==1.0.0 and package-b==1.0.0, we can conclude that your project's requirements are unsatisfiable. " ); diff --git a/crates/uv/tests/it/network.rs b/crates/uv/tests/it/network.rs index 991ad27c3..27463b900 100644 --- a/crates/uv/tests/it/network.rs +++ b/crates/uv/tests/it/network.rs @@ -171,10 +171,10 @@ async fn direct_url_http_500() { ----- stdout ----- ----- stderr ----- - × Failed to download `tqdm @ [SERVER]/packages/d0/30/dc54f88dd4a2b5dc8a0279bdd7270e735851848b762aeb1c1184ed1f6b14/tqdm-4.67.1-py3-none-any.whl` - ├─▶ Request failed after 3 retries - ├─▶ Failed to fetch: `[SERVER]/packages/d0/30/dc54f88dd4a2b5dc8a0279bdd7270e735851848b762aeb1c1184ed1f6b14/tqdm-4.67.1-py3-none-any.whl` - ╰─▶ HTTP status server error (500 Internal Server Error) for url ([SERVER]/packages/d0/30/dc54f88dd4a2b5dc8a0279bdd7270e735851848b762aeb1c1184ed1f6b14/tqdm-4.67.1-py3-none-any.whl) + error: Failed to download `tqdm @ [SERVER]/packages/d0/30/dc54f88dd4a2b5dc8a0279bdd7270e735851848b762aeb1c1184ed1f6b14/tqdm-4.67.1-py3-none-any.whl` + Caused by: Request failed after 3 retries + Caused by: Failed to fetch: `[SERVER]/packages/d0/30/dc54f88dd4a2b5dc8a0279bdd7270e735851848b762aeb1c1184ed1f6b14/tqdm-4.67.1-py3-none-any.whl` + Caused by: HTTP status server error (500 Internal Server Error) for url ([SERVER]/packages/d0/30/dc54f88dd4a2b5dc8a0279bdd7270e735851848b762aeb1c1184ed1f6b14/tqdm-4.67.1-py3-none-any.whl) "); } @@ -199,12 +199,12 @@ async fn direct_url_io_error() { ----- stdout ----- ----- stderr ----- - × Failed to download `tqdm @ [SERVER]/packages/d0/30/dc54f88dd4a2b5dc8a0279bdd7270e735851848b762aeb1c1184ed1f6b14/tqdm-4.67.1-py3-none-any.whl` - ├─▶ Failed to fetch: `[SERVER]/packages/d0/30/dc54f88dd4a2b5dc8a0279bdd7270e735851848b762aeb1c1184ed1f6b14/tqdm-4.67.1-py3-none-any.whl` - ├─▶ Request failed after 3 retries - ├─▶ error sending request for url ([SERVER]/packages/d0/30/dc54f88dd4a2b5dc8a0279bdd7270e735851848b762aeb1c1184ed1f6b14/tqdm-4.67.1-py3-none-any.whl) - ├─▶ client error (SendRequest) - ╰─▶ connection closed before message completed + error: Failed to download `tqdm @ [SERVER]/packages/d0/30/dc54f88dd4a2b5dc8a0279bdd7270e735851848b762aeb1c1184ed1f6b14/tqdm-4.67.1-py3-none-any.whl` + Caused by: Failed to fetch: `[SERVER]/packages/d0/30/dc54f88dd4a2b5dc8a0279bdd7270e735851848b762aeb1c1184ed1f6b14/tqdm-4.67.1-py3-none-any.whl` + Caused by: Request failed after 3 retries + Caused by: error sending request for url ([SERVER]/packages/d0/30/dc54f88dd4a2b5dc8a0279bdd7270e735851848b762aeb1c1184ed1f6b14/tqdm-4.67.1-py3-none-any.whl) + Caused by: client error (SendRequest) + Caused by: connection closed before message completed "); } @@ -415,9 +415,9 @@ async fn rfc9457_problem_details_license_violation() { ----- stdout ----- ----- stderr ----- - × Failed to download `tqdm @ [SERVER]/packages/tqdm-4.67.1-py3-none-any.whl` - ├─▶ Failed to fetch: `[SERVER]/packages/tqdm-4.67.1-py3-none-any.whl` - ├─▶ Server message: License Compliance Issue, This package version has a license that violates organizational policy. - ╰─▶ HTTP status client error (403 Forbidden) for url ([SERVER]/packages/tqdm-4.67.1-py3-none-any.whl) + error: Failed to download `tqdm @ [SERVER]/packages/tqdm-4.67.1-py3-none-any.whl` + Caused by: Failed to fetch: `[SERVER]/packages/tqdm-4.67.1-py3-none-any.whl` + Caused by: Server message: License Compliance Issue, This package version has a license that violates organizational policy. + Caused by: HTTP status client error (403 Forbidden) for url ([SERVER]/packages/tqdm-4.67.1-py3-none-any.whl) "); } diff --git a/crates/uv/tests/it/pip_compile.rs b/crates/uv/tests/it/pip_compile.rs index 9d01ae9b3..9fca23c14 100644 --- a/crates/uv/tests/it/pip_compile.rs +++ b/crates/uv/tests/it/pip_compile.rs @@ -1970,18 +1970,18 @@ fn compile_python_37() -> Result<()> { uv_snapshot!(filters, context.pip_compile() .arg("requirements.in") .arg("--python-version") - .arg("3.7"), @r###" + .arg("3.7"), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because the requested Python version (>=3.7) does not satisfy Python>=3.8 and black==23.10.1 depends on Python>=3.8, we can conclude that black==23.10.1 cannot be used. - And because you require black==23.10.1, we can conclude that your requirements are unsatisfiable. - - hint: The `--python-version` value (>=3.7) includes Python versions that are not supported by your dependencies (e.g., black==23.10.1 only supports >=3.8). Consider using a higher `--python-version` value. - "###); + error: No solution found when resolving dependencies: + Caused by: Because the requested Python version (>=3.7) does not satisfy Python>=3.8 and black==23.10.1 depends on Python>=3.8, we can conclude that black==23.10.1 cannot be used. + And because you require black==23.10.1, we can conclude that your requirements are unsatisfiable. + + hint: The `--python-version` value (>=3.7) includes Python versions that are not supported by your dependencies (e.g., black==23.10.1 only supports >=3.8). Consider using a higher `--python-version` value. + "); Ok(()) } @@ -2509,15 +2509,15 @@ fn compile_git_mismatched_name() -> Result<()> { .write_str("flask @ git+https://github.com/pallets/flask.git@2.0.0\ndask @ git+https://github.com/pallets/flask.git@3.0.0")?; uv_snapshot!(context.filters(), context.pip_compile() - .arg("requirements.in"), @r###" + .arg("requirements.in"), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- - × Failed to download and build `dask @ git+https://github.com/pallets/flask.git@3.0.0` - ╰─▶ Package metadata name `flask` does not match given name `dask` - "### + error: Failed to download and build `dask @ git+https://github.com/pallets/flask.git@3.0.0` + Caused by: Package metadata name `flask` does not match given name `dask` + " ); Ok(()) @@ -2602,15 +2602,15 @@ fn conflicting_direct_url_dependency() -> Result<()> { requirements_in.write_str("werkzeug==3.0.0\nwerkzeug @ https://files.pythonhosted.org/packages/ff/1d/960bb4017c68674a1cb099534840f18d3def3ce44aed12b5ed8b78e0153e/Werkzeug-2.0.0-py3-none-any.whl")?; uv_snapshot!(context.filters(), context.pip_compile() - .arg("requirements.in"), @r###" + .arg("requirements.in"), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because there is no version of werkzeug==3.0.0 and you require werkzeug==3.0.0, we can conclude that your requirements are unsatisfiable. - "### + error: No solution found when resolving dependencies: + Caused by: Because there is no version of werkzeug==3.0.0 and you require werkzeug==3.0.0, we can conclude that your requirements are unsatisfiable. + " ); Ok(()) @@ -2728,16 +2728,16 @@ fn conflicting_transitive_url_dependency() -> Result<()> { requirements_in.write_str("flask==3.0.0\nwerkzeug @ https://files.pythonhosted.org/packages/ff/1d/960bb4017c68674a1cb099534840f18d3def3ce44aed12b5ed8b78e0153e/Werkzeug-2.0.0-py3-none-any.whl")?; uv_snapshot!(context.filters(), context.pip_compile() - .arg("requirements.in"), @r###" + .arg("requirements.in"), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because only werkzeug<3.0.0 is available and flask==3.0.0 depends on werkzeug>=3.0.0, we can conclude that flask==3.0.0 cannot be used. - And because you require flask==3.0.0, we can conclude that your requirements are unsatisfiable. - "### + error: No solution found when resolving dependencies: + Caused by: Because only werkzeug<3.0.0 is available and flask==3.0.0 depends on werkzeug>=3.0.0, we can conclude that flask==3.0.0 cannot be used. + And because you require flask==3.0.0, we can conclude that your requirements are unsatisfiable. + " ); Ok(()) @@ -3080,15 +3080,15 @@ fn requirement_constraint_override_url() -> Result<()> { .arg("--constraint") .arg("constraints.txt") .arg("--override") - .arg("overrides.txt"), @r###" + .arg("overrides.txt"), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because there is no version of anyio==3.7.0 and you require anyio==3.7.0, we can conclude that your requirements are unsatisfiable. - "### + error: No solution found when resolving dependencies: + Caused by: Because there is no version of anyio==3.7.0 and you require anyio==3.7.0, we can conclude that your requirements are unsatisfiable. + " ); Ok(()) @@ -3302,15 +3302,15 @@ dependencies = ["anyio==3.7.0", "anyio==4.0.0"] )?; uv_snapshot!(context.filters(), context.pip_compile() - .arg("pyproject.toml"), @r###" + .arg("pyproject.toml"), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because my-project depends on anyio==3.7.0 and anyio==4.0.0, we can conclude that your requirements are unsatisfiable. - "### + error: No solution found when resolving dependencies: + Caused by: Because my-project depends on anyio==3.7.0 and anyio==4.0.0, we can conclude that your requirements are unsatisfiable. + " ); Ok(()) @@ -3334,15 +3334,15 @@ dependencies = ["anyio==300.1.4"] )?; uv_snapshot!(context.filters(), context.pip_compile() - .arg("pyproject.toml"), @r###" + .arg("pyproject.toml"), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because there is no version of anyio==300.1.4 and my-project depends on anyio==300.1.4, we can conclude that your requirements are unsatisfiable. - "### + error: No solution found when resolving dependencies: + Caused by: Because there is no version of anyio==300.1.4 and my-project depends on anyio==300.1.4, we can conclude that your requirements are unsatisfiable. + " ); Ok(()) @@ -3958,13 +3958,13 @@ fn compile_yanked_version_indirect() -> Result<()> { ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because only the following versions of attrs are available: - attrs<=20.3.0 - attrs==21.1.0 - attrs>=21.2.0 - and attrs==21.1.0 was yanked (reason: Installable but not importable on Python 3.4), we can conclude that attrs>20.3.0,<21.2.0 cannot be used. - And because you require attrs>20.3.0,<21.2.0, we can conclude that your requirements are unsatisfiable. + error: No solution found when resolving dependencies: + Caused by: Because only the following versions of attrs are available: + attrs<=20.3.0 + attrs==21.1.0 + attrs>=21.2.0 + and attrs==21.1.0 was yanked (reason: Installable but not importable on Python 3.4), we can conclude that attrs>20.3.0,<21.2.0 cannot be used. + And because you require attrs>20.3.0,<21.2.0, we can conclude that your requirements are unsatisfiable. " ); @@ -6668,17 +6668,17 @@ fn no_index_requirements_txt() -> Result<()> { requirements_in.write_str("--no-index\ntqdm")?; uv_snapshot!(context.filters(), context.pip_compile() - .arg("requirements.in"), @r###" + .arg("requirements.in"), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because tqdm was not found in the provided package locations and you require tqdm, we can conclude that your requirements are unsatisfiable. - - hint: Packages were unavailable because index lookups were disabled and no additional package locations were provided (try: `--find-links `) - "### + error: No solution found when resolving dependencies: + Caused by: Because tqdm was not found in the provided package locations and you require tqdm, we can conclude that your requirements are unsatisfiable. + + hint: Packages were unavailable because index lookups were disabled and no additional package locations were provided (try: `--find-links `) + " ); Ok(()) @@ -6777,17 +6777,17 @@ fn offline_registry() -> Result<()> { // Resolve with `--offline` with an empty cache. uv_snapshot!(context.filters(), context.pip_compile() .arg("requirements.in") - .arg("--offline"), @r###" + .arg("--offline"), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because black was not found in the cache and you require black==23.10.1, we can conclude that your requirements are unsatisfiable. - - hint: Packages were unavailable because the network was disabled. When the network is disabled, registry packages may only be read from the cache. - "### + error: No solution found when resolving dependencies: + Caused by: Because black was not found in the cache and you require black==23.10.1, we can conclude that your requirements are unsatisfiable. + + hint: Packages were unavailable because the network was disabled. When the network is disabled, registry packages may only be read from the cache. + " ); // Populate the cache. @@ -6908,17 +6908,17 @@ fn offline_find_links() -> Result<()> { .arg("requirements.in") .arg("--find-links") .arg("https://astral-sh.github.io/pytorch-mirror/whl/torch_stable.html") - .arg("--offline"), @r###" + .arg("--offline"), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because tqdm was not found in the cache and you require tqdm, we can conclude that your requirements are unsatisfiable. - - hint: Packages were unavailable because the network was disabled. When the network is disabled, registry packages may only be read from the cache. - "### + error: No solution found when resolving dependencies: + Caused by: Because tqdm was not found in the cache and you require tqdm, we can conclude that your requirements are unsatisfiable. + + hint: Packages were unavailable because the network was disabled. When the network is disabled, registry packages may only be read from the cache. + " ); // Resolve with `--offline`, `--find-links`, and `--no-index`. @@ -6927,17 +6927,17 @@ fn offline_find_links() -> Result<()> { .arg("--find-links") .arg("https://astral-sh.github.io/pytorch-mirror/whl/torch_stable.html") .arg("--no-index") - .arg("--offline"), @r###" + .arg("--offline"), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because tqdm was not found in the cache and you require tqdm, we can conclude that your requirements are unsatisfiable. - - hint: Packages were unavailable because the network was disabled. When the network is disabled, registry packages may only be read from the cache. - "### + error: No solution found when resolving dependencies: + Caused by: Because tqdm was not found in the cache and you require tqdm, we can conclude that your requirements are unsatisfiable. + + hint: Packages were unavailable because the network was disabled. When the network is disabled, registry packages may only be read from the cache. + " ); Ok(()) @@ -6953,15 +6953,15 @@ fn offline_direct_url() -> Result<()> { // Resolve with `--offline` with an empty cache. uv_snapshot!(context.filters(), context.pip_compile() .arg("requirements.in") - .arg("--offline"), @r###" + .arg("--offline"), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- - × Failed to download `iniconfig @ https://files.pythonhosted.org/packages/ef/a6/62565a6e1cf69e10f5727360368e451d4b7f58beeac6173dc9db836a5b46/iniconfig-2.0.0-py3-none-any.whl` - ╰─▶ Network connectivity is disabled, but the requested data wasn't found in the cache for: `https://files.pythonhosted.org/packages/ef/a6/62565a6e1cf69e10f5727360368e451d4b7f58beeac6173dc9db836a5b46/iniconfig-2.0.0-py3-none-any.whl` - "### + error: Failed to download `iniconfig @ https://files.pythonhosted.org/packages/ef/a6/62565a6e1cf69e10f5727360368e451d4b7f58beeac6173dc9db836a5b46/iniconfig-2.0.0-py3-none-any.whl` + Caused by: Network connectivity is disabled, but the requested data wasn't found in the cache for: `https://files.pythonhosted.org/packages/ef/a6/62565a6e1cf69e10f5727360368e451d4b7f58beeac6173dc9db836a5b46/iniconfig-2.0.0-py3-none-any.whl` + " ); // Populate the cache. @@ -7013,20 +7013,20 @@ fn invalid_metadata_requires_python() -> Result<()> { .arg("requirements.in") .arg("--no-index") .arg("--find-links") - .arg(context.workspace_root.join("test").join("links")), @r###" + .arg(context.workspace_root.join("test").join("links")), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because validation==2.0.0 has invalid metadata and you require validation==2.0.0, we can conclude that your requirements are unsatisfiable. - - hint: Metadata for `validation` (v2.0.0) could not be parsed: - Failed to parse version: Unexpected end of version specifier, expected operator. Did you mean `==12`?: - 12 - ^^ - "### + error: No solution found when resolving dependencies: + Caused by: Because validation==2.0.0 has invalid metadata and you require validation==2.0.0, we can conclude that your requirements are unsatisfiable. + + hint: Metadata for `validation` (v2.0.0) could not be parsed: + Failed to parse version: Unexpected end of version specifier, expected operator. Did you mean `==12`?: + 12 + ^^ + " ); Ok(()) @@ -7044,18 +7044,18 @@ fn invalid_metadata_multiple_dist_info() -> Result<()> { .arg("requirements.in") .arg("--no-index") .arg("--find-links") - .arg(context.workspace_root.join("test").join("links")), @r###" + .arg(context.workspace_root.join("test").join("links")), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because validation==3.0.0 has an invalid package format and you require validation==3.0.0, we can conclude that your requirements are unsatisfiable. - - hint: The structure of `validation` (v3.0.0) was invalid: - Multiple .dist-info directories found: validation-2.0.0, validation-3.0.0 - "### + error: No solution found when resolving dependencies: + Caused by: Because validation==3.0.0 has an invalid package format and you require validation==3.0.0, we can conclude that your requirements are unsatisfiable. + + hint: The structure of `validation` (v3.0.0) was invalid: + Multiple .dist-info directories found: validation-2.0.0, validation-3.0.0 + " ); Ok(()) @@ -7313,15 +7313,15 @@ fn compile_constraints_incompatible_url() -> Result<()> { uv_snapshot!(context.filters(), context.pip_compile() .arg("requirements.in") .arg("--constraint") - .arg("constraints.txt"), @r###" + .arg("constraints.txt"), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because only anyio>=4 is available and you require anyio<4, we can conclude that your requirements are unsatisfiable. - "### + error: No solution found when resolving dependencies: + Caused by: Because only anyio>=4 is available and you require anyio<4, we can conclude that your requirements are unsatisfiable. + " ); Ok(()) @@ -7337,15 +7337,15 @@ fn index_url_in_requirements() -> Result<()> { .write_str("--index-url https://astral-sh.github.io/pytorch-mirror/whl\nanyio<4")?; uv_snapshot!(context.filters(), context.pip_compile() - .arg("requirements.in"), @r###" + .arg("requirements.in"), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because anyio was not found in the package registry and you require anyio<4, we can conclude that your requirements are unsatisfiable. - "### + error: No solution found when resolving dependencies: + Caused by: Because anyio was not found in the package registry and you require anyio<4, we can conclude that your requirements are unsatisfiable. + " ); Ok(()) @@ -10087,15 +10087,15 @@ fn compile_constraints_incompatible_version() -> Result<()> { uv_snapshot!(context.filters(), context.pip_compile() .arg("requirements.in") .arg("--constraint") - .arg("constraints.txt"), @r###" + .arg("constraints.txt"), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because you require filelock==1.0.0 and filelock==3.8.0, we can conclude that your requirements are unsatisfiable. - "### + error: No solution found when resolving dependencies: + Caused by: Because you require filelock==1.0.0 and filelock==3.8.0, we can conclude that your requirements are unsatisfiable. + " ); Ok(()) @@ -10115,15 +10115,15 @@ fn conflicting_url_markers() -> Result<()> { uv_snapshot!(context.filters(), context.pip_compile() .arg("requirements.in") .arg("--constraint") - .arg("constraints.txt"), @r###" + .arg("constraints.txt"), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because you require filelock==1.0.0 and filelock==3.8.0, we can conclude that your requirements are unsatisfiable. - "### + error: No solution found when resolving dependencies: + Caused by: Because you require filelock==1.0.0 and filelock==3.8.0, we can conclude that your requirements are unsatisfiable. + " ); Ok(()) @@ -10269,15 +10269,15 @@ fn override_with_incompatible_constraint() -> Result<()> { .arg("--constraint") .arg("constraints.txt") .arg("--override") - .arg("overrides.txt"), @r###" + .arg("overrides.txt"), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because you require anyio>=3.0.0 and anyio<3.0.0, we can conclude that your requirements are unsatisfiable. - "### + error: No solution found when resolving dependencies: + Caused by: Because you require anyio>=3.0.0 and anyio<3.0.0, we can conclude that your requirements are unsatisfiable. + " ); Ok(()) @@ -10926,16 +10926,16 @@ requires-python = ">=3.13" requirements_in.write_str(&format!("-e {}", editable_dir.path().display()))?; uv_snapshot!(context.filters(), context.pip_compile() - .arg("requirements.in"), @r###" + .arg("requirements.in"), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because the current Python version (3.12.[X]) does not satisfy Python>=3.13 and example==0.0.0 depends on Python>=3.13, we can conclude that example==0.0.0 cannot be used. - And because only example==0.0.0 is available and you require example, we can conclude that your requirements are unsatisfiable. - "### + error: No solution found when resolving dependencies: + Caused by: Because the current Python version (3.12.[X]) does not satisfy Python>=3.13 and example==0.0.0 depends on Python>=3.13, we can conclude that example==0.0.0 cannot be used. + And because only example==0.0.0 is available and you require example, we can conclude that your requirements are unsatisfiable. + " ); Ok(()) @@ -10978,16 +10978,16 @@ requires-python = ">=3.13" uv_snapshot!(filters, context.pip_compile() .arg("requirements.in") - .arg("--python-version=3.11"), @r###" + .arg("--python-version=3.11"), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because the current Python version (3.12.[X]) does not satisfy Python>=3.13 and example==0.0.0 depends on Python>=3.13, we can conclude that example==0.0.0 cannot be used. - And because only example==0.0.0 is available and you require example, we can conclude that your requirements are unsatisfiable. - "### + error: No solution found when resolving dependencies: + Caused by: Because the current Python version (3.12.[X]) does not satisfy Python>=3.13 and example==0.0.0 depends on Python>=3.13, we can conclude that example==0.0.0 cannot be used. + And because only example==0.0.0 is available and you require example, we can conclude that your requirements are unsatisfiable. + " ); Ok(()) @@ -11126,16 +11126,16 @@ fn not_found_direct_url() -> Result<()> { requirements_in.write_str("iniconfig @ https://files.pythonhosted.org/packages/ef/a6/fake/iniconfig-2.0.0-py3-none-any.whl")?; uv_snapshot!(context.filters(), context.pip_compile() - .arg("requirements.in"), @r###" + .arg("requirements.in"), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- - × Failed to download `iniconfig @ https://files.pythonhosted.org/packages/ef/a6/fake/iniconfig-2.0.0-py3-none-any.whl` - ├─▶ Failed to fetch: `https://files.pythonhosted.org/packages/ef/a6/fake/iniconfig-2.0.0-py3-none-any.whl` - ╰─▶ HTTP status client error (404 Not Found) for url (https://files.pythonhosted.org/packages/ef/a6/fake/iniconfig-2.0.0-py3-none-any.whl) - "### + error: Failed to download `iniconfig @ https://files.pythonhosted.org/packages/ef/a6/fake/iniconfig-2.0.0-py3-none-any.whl` + Caused by: Failed to fetch: `https://files.pythonhosted.org/packages/ef/a6/fake/iniconfig-2.0.0-py3-none-any.whl` + Caused by: HTTP status client error (404 Not Found) for url (https://files.pythonhosted.org/packages/ef/a6/fake/iniconfig-2.0.0-py3-none-any.whl) + " ); Ok(()) @@ -11166,16 +11166,16 @@ requires-python = ">=3.13" requirements_in.write_str(&format!("example @ {}", editable_dir.path().display()))?; uv_snapshot!(context.filters(), context.pip_compile() - .arg("requirements.in"), @r###" + .arg("requirements.in"), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because the current Python version (3.12.[X]) does not satisfy Python>=3.13 and example==0.0.0 depends on Python>=3.13, we can conclude that example==0.0.0 cannot be used. - And because only example==0.0.0 is available and you require example, we can conclude that your requirements are unsatisfiable. - "### + error: No solution found when resolving dependencies: + Caused by: Because the current Python version (3.12.[X]) does not satisfy Python>=3.13 and example==0.0.0 depends on Python>=3.13, we can conclude that example==0.0.0 cannot be used. + And because only example==0.0.0 is available and you require example, we can conclude that your requirements are unsatisfiable. + " ); Ok(()) @@ -12287,17 +12287,17 @@ requires-python = ">3.8" uv_snapshot!(context.filters(), context.pip_compile() .arg("requirements.in") .arg("--override") - .arg("overrides.txt"), @r###" + .arg("overrides.txt"), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because there is no version of anyio==0.0.0 and lib==0.0.0 depends on anyio==0.0.0, we can conclude that lib==0.0.0 cannot be used. - And because only lib==0.0.0 is available and example==0.0.0 depends on lib, we can conclude that example==0.0.0 cannot be used. - And because only example==0.0.0 is available and you require example, we can conclude that your requirements are unsatisfiable. - "### + error: No solution found when resolving dependencies: + Caused by: Because there is no version of anyio==0.0.0 and lib==0.0.0 depends on anyio==0.0.0, we can conclude that lib==0.0.0 cannot be used. + And because only lib==0.0.0 is available and example==0.0.0 depends on lib, we can conclude that example==0.0.0 cannot be used. + And because only example==0.0.0 is available and you require example, we can conclude that your requirements are unsatisfiable. + " ); // Now constrain `anyio` to the local version. @@ -12460,17 +12460,17 @@ fn compile_index_url_first_match_base() -> Result<()> { .arg("--extra-index-url") .arg("https://astral-sh.github.io/pytorch-mirror/whl/cpu") .arg("requirements.in") - .arg("--no-deps"), @r###" + .arg("--no-deps"), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because there is no version of jinja2==3.1.0 and you require jinja2==3.1.0, we can conclude that your requirements are unsatisfiable. - - hint: `jinja2` was found on https://astral-sh.github.io/pytorch-mirror/whl/cpu, but not at the requested version (jinja2==3.1.0). A compatible version may be available on a subsequent index (e.g., https://pypi.org/simple). By default, uv will only consider versions that are published on the first index that contains a given package, to avoid dependency confusion attacks. If all indexes are equally trusted, use `--index-strategy unsafe-best-match` to consider all versions from all indexes, regardless of the order in which they were defined. - "### + error: No solution found when resolving dependencies: + Caused by: Because there is no version of jinja2==3.1.0 and you require jinja2==3.1.0, we can conclude that your requirements are unsatisfiable. + + hint: `jinja2` was found on https://astral-sh.github.io/pytorch-mirror/whl/cpu, but not at the requested version (jinja2==3.1.0). A compatible version may be available on a subsequent index (e.g., https://pypi.org/simple). By default, uv will only consider versions that are published on the first index that contains a given package, to avoid dependency confusion attacks. If all indexes are equally trusted, use `--index-strategy unsafe-best-match` to consider all versions from all indexes, regardless of the order in which they were defined. + " ); Ok(()) @@ -12494,17 +12494,17 @@ fn compile_index_url_first_match_marker() -> Result<()> { .arg("--extra-index-url") .arg("https://astral-sh.github.io/pytorch-mirror/whl/cpu") .arg("requirements.in") - .arg("--no-deps"), @r###" + .arg("--no-deps"), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because there is no version of jinja2{sys_platform == 'linux'}==3.1.0 and you require jinja2{sys_platform == 'linux'}==3.1.0, we can conclude that your requirements are unsatisfiable. - - hint: `jinja2` was found on https://astral-sh.github.io/pytorch-mirror/whl/cpu, but not at the requested version (jinja2==3.1.0). A compatible version may be available on a subsequent index (e.g., https://pypi.org/simple). By default, uv will only consider versions that are published on the first index that contains a given package, to avoid dependency confusion attacks. If all indexes are equally trusted, use `--index-strategy unsafe-best-match` to consider all versions from all indexes, regardless of the order in which they were defined. - "### + error: No solution found when resolving dependencies: + Caused by: Because there is no version of jinja2{sys_platform == 'linux'}==3.1.0 and you require jinja2{sys_platform == 'linux'}==3.1.0, we can conclude that your requirements are unsatisfiable. + + hint: `jinja2` was found on https://astral-sh.github.io/pytorch-mirror/whl/cpu, but not at the requested version (jinja2==3.1.0). A compatible version may be available on a subsequent index (e.g., https://pypi.org/simple). By default, uv will only consider versions that are published on the first index that contains a given package, to avoid dependency confusion attacks. If all indexes are equally trusted, use `--index-strategy unsafe-best-match` to consider all versions from all indexes, regardless of the order in which they were defined. + " ); Ok(()) @@ -12527,15 +12527,15 @@ fn compile_index_url_first_match_all_versions() -> Result<()> { .arg("--extra-index-url") .arg("https://test.pypi.org/simple") .arg("requirements.in") - .arg("--no-deps"), @r###" + .arg("--no-deps"), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because there are no versions of pandas and you require pandas, we can conclude that your requirements are unsatisfiable. - "### + error: No solution found when resolving dependencies: + Caused by: Because there are no versions of pandas and you require pandas, we can conclude that your requirements are unsatisfiable. + " ); Ok(()) @@ -12912,15 +12912,15 @@ fn no_version_for_direct_dependency() -> Result<()> { uv_snapshot!(context.filters(), context.pip_compile() .arg("requirements.in") // Must error before we make any network requests - .arg("--offline"), @r###" + .arg("--offline"), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ you require pypyp ∅ - "### + error: No solution found when resolving dependencies: + Caused by: you require pypyp ∅ + " ); Ok(()) @@ -13243,20 +13243,20 @@ fn git_source_missing_tag() -> Result<()> { "#})?; uv_snapshot!(filters, context.pip_compile() - .arg("pyproject.toml"), @r###" + .arg("pyproject.toml"), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- - × Failed to download and build `uv-public-pypackage @ git+https://github.com/astral-test/uv-public-pypackage@missing` - ├─▶ Git operation failed - ├─▶ failed to clone into: [CACHE_DIR]/git-v0/db/8dab139913c4b566 - ├─▶ failed to fetch tag `missing` - ╰─▶ process didn't exit successfully: `git fetch --force --update-head-ok 'https://github.com/astral-test/uv-public-pypackage' '+refs/tags/missing:refs/remotes/origin/tags/missing'` (exit status: 128) - --- stderr - fatal: couldn't find remote ref refs/tags/missing - "###); + error: Failed to download and build `uv-public-pypackage @ git+https://github.com/astral-test/uv-public-pypackage@missing` + Caused by: Git operation failed + Caused by: failed to clone into: [CACHE_DIR]/git-v0/db/8dab139913c4b566 + Caused by: failed to fetch tag `missing` + Caused by: process didn't exit successfully: `git fetch --force --update-head-ok 'https://github.com/astral-test/uv-public-pypackage' '+refs/tags/missing:refs/remotes/origin/tags/missing'` (exit status: 128) + --- stderr + fatal: couldn't find remote ref refs/tags/missing + "); Ok(()) } @@ -13548,18 +13548,18 @@ fn no_binary_only_binary() -> Result<()> { .pip_compile() .arg("requirements.in") .arg("--only-binary") - .arg(":all:"), @r###" + .arg(":all:"), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because only source-distribution>=0.0.1 is available and source-distribution==0.0.1 has no usable wheels, we can conclude that source-distribution<=0.0.1 cannot be used. - And because you require source-distribution<=0.0.1, we can conclude that your requirements are unsatisfiable. - - hint: Wheels are required for `source-distribution` because building from source is disabled for all packages (i.e., with `--no-build`) - "### + error: No solution found when resolving dependencies: + Caused by: Because only source-distribution>=0.0.1 is available and source-distribution==0.0.1 has no usable wheels, we can conclude that source-distribution<=0.0.1 cannot be used. + And because you require source-distribution<=0.0.1, we can conclude that your requirements are unsatisfiable. + + hint: Wheels are required for `source-distribution` because building from source is disabled for all packages (i.e., with `--no-build`) + " ); uv_snapshot!(context @@ -13633,17 +13633,17 @@ fn incompatible_build_constraint() -> Result<()> { uv_snapshot!(context.pip_compile() .arg("requirements.txt") .arg("--build-constraint") - .arg("build_constraints.txt"), @r###" + .arg("build_constraints.txt"), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- - × Failed to download and build `requests==1.2.0` - ├─▶ Failed to resolve requirements from `setup.py` build - ├─▶ No solution found when resolving: `setuptools>=40.8.0` - ╰─▶ Because you require setuptools>=40.8.0 and setuptools==1, we can conclude that your requirements are unsatisfiable. - "### + error: Failed to download and build `requests==1.2.0` + Caused by: Failed to resolve requirements from `setup.py` build + Caused by: No solution found when resolving: `setuptools>=40.8.0` + Caused by: Because you require setuptools>=40.8.0 and setuptools==1, we can conclude that your requirements are unsatisfiable. + " ); Ok(()) @@ -13703,17 +13703,17 @@ build-constraint-dependencies = [ )?; uv_snapshot!(context.pip_compile() - .arg("pyproject.toml"), @r###" + .arg("pyproject.toml"), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- - × Failed to download and build `requests==1.2.0` - ├─▶ Failed to resolve requirements from `setup.py` build - ├─▶ No solution found when resolving: `setuptools>=40.8.0` - ╰─▶ Because you require setuptools>=40.8.0 and setuptools==1, we can conclude that your requirements are unsatisfiable. - "### + error: Failed to download and build `requests==1.2.0` + Caused by: Failed to resolve requirements from `setup.py` build + Caused by: No solution found when resolving: `setuptools>=40.8.0` + Caused by: Because you require setuptools>=40.8.0 and setuptools==1, we can conclude that your requirements are unsatisfiable. + " ); Ok(()) @@ -13791,17 +13791,17 @@ build-constraint-dependencies = [ uv_snapshot!(context.pip_compile() .arg("pyproject.toml") .arg("--build-constraint") - .arg("build_constraints.txt"), @r###" + .arg("build_constraints.txt"), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- - × Failed to download and build `requests==1.2.0` - ├─▶ Failed to resolve requirements from `setup.py` build - ├─▶ No solution found when resolving: `setuptools>=40.8.0` - ╰─▶ Because you require setuptools>=40 and setuptools==1, we can conclude that your requirements are unsatisfiable. - "### + error: Failed to download and build `requests==1.2.0` + Caused by: Failed to resolve requirements from `setup.py` build + Caused by: No solution found when resolving: `setuptools>=40.8.0` + Caused by: Because you require setuptools>=40 and setuptools==1, we can conclude that your requirements are unsatisfiable. + " ); // compatible setuptools version in pyproject.toml, incompatible in build_constraints.txt @@ -13830,17 +13830,17 @@ build-constraint-dependencies = [ uv_snapshot!(context.pip_compile() .arg("pyproject.toml") .arg("--build-constraint") - .arg("build_constraints.txt"), @r###" + .arg("build_constraints.txt"), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- - × Failed to download and build `requests==1.2.0` - ├─▶ Failed to resolve requirements from `setup.py` build - ├─▶ No solution found when resolving: `setuptools>=40.8.0` - ╰─▶ Because you require setuptools==1 and setuptools>=40, we can conclude that your requirements are unsatisfiable. - "### + error: Failed to download and build `requests==1.2.0` + Caused by: Failed to resolve requirements from `setup.py` build + Caused by: No solution found when resolving: `setuptools>=40.8.0` + Caused by: Because you require setuptools==1 and setuptools>=40, we can conclude that your requirements are unsatisfiable. + " ); Ok(()) @@ -14122,9 +14122,9 @@ fn compile_enumerate_no_versions() -> Result<()> { ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because the current Python version (3.10.[X]) does not satisfy Python>=3.11,<4.0 and all versions of rooster-blue depend on Python>=3.11,<4.0, we can conclude that all versions of rooster-blue cannot be used. - And because you require rooster-blue, we can conclude that your requirements are unsatisfiable. + error: No solution found when resolving dependencies: + Caused by: Because the current Python version (3.10.[X]) does not satisfy Python>=3.11,<4.0 and all versions of rooster-blue depend on Python>=3.11,<4.0, we can conclude that all versions of rooster-blue cannot be used. + And because you require rooster-blue, we can conclude that your requirements are unsatisfiable. "); Ok(()) @@ -14569,12 +14569,12 @@ fn unsupported_requires_python_dynamic_metadata() -> Result<()> { ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies for split (markers: python_full_version >= '3.10'): - ╰─▶ Because source-distribution==0.0.3 requires Python >=3.10 and you require source-distribution{python_full_version >= '3.10'}==0.0.3, we can conclude that your requirements are unsatisfiable. - - hint: The source distribution for `source-distribution` (v0.0.3) does not include static metadata. Generating metadata for this package requires Python >=3.10, but Python 3.8.[X] is installed. - - hint: While the active Python version is 3.8, the resolution failed for other Python versions supported by your project. Consider limiting your project's supported Python versions using `requires-python`. + error: No solution found when resolving dependencies for split (markers: python_full_version >= '3.10'): + Caused by: Because source-distribution==0.0.3 requires Python >=3.10 and you require source-distribution{python_full_version >= '3.10'}==0.0.3, we can conclude that your requirements are unsatisfiable. + + hint: The source distribution for `source-distribution` (v0.0.3) does not include static metadata. Generating metadata for this package requires Python >=3.10, but Python 3.8.[X] is installed. + + hint: While the active Python version is 3.8, the resolution failed for other Python versions supported by your project. Consider limiting your project's supported Python versions using `requires-python`. "); Ok(()) @@ -14834,37 +14834,38 @@ fn compile_derivation_chain() -> Result<()> { .chain([(r"/.*/src", "/[TMP]/src")]) .collect::>(); - uv_snapshot!(filters, context.pip_compile().arg("pyproject.toml"), @r###" + uv_snapshot!(filters, context.pip_compile().arg("pyproject.toml"), @r#" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- - × Failed to build `wsgiref==0.1.2` - ├─▶ The build backend returned an error - ╰─▶ Call to `setuptools.build_meta:__legacy__.build_wheel` failed (exit status: 1) + error: Failed to build `wsgiref==0.1.2` + Caused by: The build backend returned an error + Caused by: Call to `setuptools.build_meta:__legacy__.build_wheel` failed (exit status: 1) + + [stderr] + Traceback (most recent call last): + File "", line 14, in + File "[CACHE_DIR]/builds-v0/[TMP]/build_meta.py", line 325, in get_requires_for_build_wheel + return self._get_build_requires(config_settings, requirements=['wheel']) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "[CACHE_DIR]/builds-v0/[TMP]/build_meta.py", line 295, in _get_build_requires + self.run_setup() + File "[CACHE_DIR]/builds-v0/[TMP]/build_meta.py", line 487, in run_setup + super().run_setup(setup_script=setup_script) + File "[CACHE_DIR]/builds-v0/[TMP]/build_meta.py", line 311, in run_setup + exec(code, locals()) + File "", line 5, in + File "[CACHE_DIR]/[TMP]/src/ez_setup/__init__.py", line 170 + print "Setuptools version",version,"or greater has been installed." + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + SyntaxError: Missing parentheses in call to 'print'. Did you mean print(...)? + + hint: This usually indicates a problem with the package or the build environment. - [stderr] - Traceback (most recent call last): - File "", line 14, in - File "[CACHE_DIR]/builds-v0/[TMP]/build_meta.py", line 325, in get_requires_for_build_wheel - return self._get_build_requires(config_settings, requirements=['wheel']) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "[CACHE_DIR]/builds-v0/[TMP]/build_meta.py", line 295, in _get_build_requires - self.run_setup() - File "[CACHE_DIR]/builds-v0/[TMP]/build_meta.py", line 487, in run_setup - super().run_setup(setup_script=setup_script) - File "[CACHE_DIR]/builds-v0/[TMP]/build_meta.py", line 311, in run_setup - exec(code, locals()) - File "", line 5, in - File "[CACHE_DIR]/[TMP]/src/ez_setup/__init__.py", line 170 - print "Setuptools version",version,"or greater has been installed." - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - SyntaxError: Missing parentheses in call to 'print'. Did you mean print(...)? - - hint: This usually indicates a problem with the package or the build environment. - help: `wsgiref` (v0.1.2) was included because `child` (v0.1.0) depends on `wsgiref` - "### + hint: `wsgiref` (v0.1.2) was included because `child` (v0.1.0) depends on `wsgiref` + "# ); Ok(()) @@ -14887,30 +14888,30 @@ fn invalid_platform() -> Result<()> { ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because only the following versions of open3d are available: - open3d==0.8.0.0 - open3d==0.9.0.0 - open3d==0.10.0.0 - open3d==0.10.0.1 - open3d==0.11.0 - open3d==0.11.1 - open3d==0.11.2 - open3d==0.12.0 - open3d==0.13.0 - open3d==0.14.1 - open3d==0.15.1 - open3d==0.15.2 - open3d==0.16.0 - open3d==0.16.1 - open3d==0.17.0 - open3d==0.18.0 - and open3d<=0.15.2 has no wheels with a matching Python ABI tag (e.g., `cp310`), we can conclude that open3d<=0.15.2 cannot be used. - And because open3d>=0.16.0 has no wheels with a matching platform tag (e.g., `manylinux_2_17_x86_64`) and you require open3d, we can conclude that your requirements are unsatisfiable. - - hint: You require CPython 3.10 (`cp310`), but we only found wheels for `open3d` (v0.15.2) with the following Python ABI tags: `cp36m`, `cp37m`, `cp38`, `cp39` - - hint: Wheels are available for `open3d` (v0.18.0) on the following platforms: `manylinux_2_27_aarch64`, `manylinux_2_27_x86_64`, `macosx_11_0_x86_64`, `macosx_13_0_arm64`, `win_amd64` + error: No solution found when resolving dependencies: + Caused by: Because only the following versions of open3d are available: + open3d==0.8.0.0 + open3d==0.9.0.0 + open3d==0.10.0.0 + open3d==0.10.0.1 + open3d==0.11.0 + open3d==0.11.1 + open3d==0.11.2 + open3d==0.12.0 + open3d==0.13.0 + open3d==0.14.1 + open3d==0.15.1 + open3d==0.15.2 + open3d==0.16.0 + open3d==0.16.1 + open3d==0.17.0 + open3d==0.18.0 + and open3d<=0.15.2 has no wheels with a matching Python ABI tag (e.g., `cp310`), we can conclude that open3d<=0.15.2 cannot be used. + And because open3d>=0.16.0 has no wheels with a matching platform tag (e.g., `manylinux_2_17_x86_64`) and you require open3d, we can conclude that your requirements are unsatisfiable. + + hint: You require CPython 3.10 (`cp310`), but we only found wheels for `open3d` (v0.15.2) with the following Python ABI tags: `cp36m`, `cp37m`, `cp38`, `cp39` + + hint: Wheels are available for `open3d` (v0.18.0) on the following platforms: `manylinux_2_27_aarch64`, `manylinux_2_27_x86_64`, `macosx_11_0_x86_64`, `macosx_13_0_arm64`, `win_amd64` "); Ok(()) @@ -15018,10 +15019,10 @@ fn universal_conflicting_override_urls() -> Result<()> { ----- stdout ----- ----- stderr ----- - × Failed to resolve dependencies for `anyio` (v4.3.0) - ╰─▶ Requirements contain conflicting URLs for package `sniffio` in split `sys_platform == 'win32'`: - - https://files.pythonhosted.org/packages/c3/a0/5dba8ed157b0136607c7f2151db695885606968d1fae123dc3391e0cfdbf/sniffio-1.3.0-py3-none-any.whl - - https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl + error: Failed to resolve dependencies for `anyio` (v4.3.0) + Caused by: Requirements contain conflicting URLs for package `sniffio` in split `sys_platform == 'win32'`: + - https://files.pythonhosted.org/packages/c3/a0/5dba8ed157b0136607c7f2151db695885606968d1fae123dc3391e0cfdbf/sniffio-1.3.0-py3-none-any.whl + - https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl " ); @@ -17606,9 +17607,9 @@ fn incompatible_cuda() -> Result<()> { ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because torchvision==0.16.0+cu121 depends on system:cuda==12.1 and torch==2.6.0+cu126 depends on system:cuda==12.6, we can conclude that torch==2.6.0+cu126 and torchvision==0.16.0+cu121 are incompatible. - And because you require torch==2.6.0+cu126 and torchvision==0.16.0+cu121, we can conclude that your requirements are unsatisfiable. + error: No solution found when resolving dependencies: + Caused by: Because torchvision==0.16.0+cu121 depends on system:cuda==12.1 and torch==2.6.0+cu126 depends on system:cuda==12.6, we can conclude that torch==2.6.0+cu126 and torchvision==0.16.0+cu121 are incompatible. + And because you require torch==2.6.0+cu126 and torchvision==0.16.0+cu121, we can conclude that your requirements are unsatisfiable. "); Ok(()) @@ -17865,8 +17866,8 @@ fn credentials_from_subdirectory() -> Result<()> { ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because iniconfig was not found in the package registry and foo depends on iniconfig, we can conclude that your requirements are unsatisfiable. + error: No solution found when resolving dependencies: + Caused by: Because iniconfig was not found in the package registry and foo depends on iniconfig, we can conclude that your requirements are unsatisfiable. "); uv_snapshot!(context.filters(), context diff --git a/crates/uv/tests/it/pip_compile_scenarios.rs b/crates/uv/tests/it/pip_compile_scenarios.rs index d1e2abc96..1c17a44fd 100644 --- a/crates/uv/tests/it/pip_compile_scenarios.rs +++ b/crates/uv/tests/it/pip_compile_scenarios.rs @@ -74,11 +74,11 @@ fn compatible_python_incompatible_override() -> Result<()> { ----- stderr ----- warning: The requested Python version 3.9 is not available; 3.11.[X] will be used to build dependencies instead. - × No solution found when resolving dependencies: - ╰─▶ Because the requested Python version (>=3.9) does not satisfy Python>=3.10 and package-a==1.0.0 depends on Python>=3.10, we can conclude that package-a==1.0.0 cannot be used. - And because you require package-a==1.0.0, we can conclude that your requirements are unsatisfiable. - - hint: The `--python-version` value (>=3.9) includes Python versions that are not supported by your dependencies (e.g., package-a==1.0.0 only supports >=3.10). Consider using a higher `--python-version` value. + error: No solution found when resolving dependencies: + Caused by: Because the requested Python version (>=3.9) does not satisfy Python>=3.10 and package-a==1.0.0 depends on Python>=3.10, we can conclude that package-a==1.0.0 cannot be used. + And because you require package-a==1.0.0, we can conclude that your requirements are unsatisfiable. + + hint: The `--python-version` value (>=3.9) includes Python versions that are not supported by your dependencies (e.g., package-a==1.0.0 only supports >=3.10). Consider using a higher `--python-version` value. " ); @@ -383,11 +383,11 @@ fn python_patch_override_no_patch() -> Result<()> { ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because the requested Python version (>=3.9) does not satisfy Python>=3.9.4 and package-a==1.0.0 depends on Python>=3.9.4, we can conclude that package-a==1.0.0 cannot be used. - And because you require package-a==1.0.0, we can conclude that your requirements are unsatisfiable. + error: No solution found when resolving dependencies: + Caused by: Because the requested Python version (>=3.9) does not satisfy Python>=3.9.4 and package-a==1.0.0 depends on Python>=3.9.4, we can conclude that package-a==1.0.0 cannot be used. + And because you require package-a==1.0.0, we can conclude that your requirements are unsatisfiable. - hint: The `--python-version` value (>=3.9) includes Python versions that are not supported by your dependencies (e.g., package-a==1.0.0 only supports >=3.9.4). Consider using a higher `--python-version` value. + hint: The `--python-version` value (>=3.9) includes Python versions that are not supported by your dependencies (e.g., package-a==1.0.0 only supports >=3.9.4). Consider using a higher `--python-version` value. " ); diff --git a/crates/uv/tests/it/pip_install.rs b/crates/uv/tests/it/pip_install.rs index e7129c40b..535da2eda 100644 --- a/crates/uv/tests/it/pip_install.rs +++ b/crates/uv/tests/it/pip_install.rs @@ -367,69 +367,69 @@ dependencies = ["flask==1.0.x"] uv_snapshot!(context.filters(), context.pip_install() .arg("-r") - .arg("requirements.txt"), @r###" + .arg("requirements.txt"), @r##" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- - × Failed to build `project @ file://[TEMP_DIR]/path_dep` - ├─▶ The build backend returned an error - ╰─▶ Call to `setuptools.build_meta:__legacy__.build_wheel` failed (exit status: 1) - - [stdout] - configuration error: `project.dependencies[0]` must be pep508 - DESCRIPTION: - Project dependency specification according to PEP 508 - - GIVEN VALUE: - "flask==1.0.x" - - OFFENDING RULE: 'format' - - DEFINITION: - { - "$id": "#/definitions/dependency", - "title": "Dependency", - "type": "string", - "format": "pep508" - } - - [stderr] - Traceback (most recent call last): - File "", line 14, in - File "[CACHE_DIR]/builds-v0/[TMP]/build_meta.py", line 325, in get_requires_for_build_wheel - return self._get_build_requires(config_settings, requirements=['wheel']) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "[CACHE_DIR]/builds-v0/[TMP]/build_meta.py", line 295, in _get_build_requires - self.run_setup() - File "[CACHE_DIR]/builds-v0/[TMP]/build_meta.py", line 487, in run_setup - super().run_setup(setup_script=setup_script) - File "[CACHE_DIR]/builds-v0/[TMP]/build_meta.py", line 311, in run_setup - exec(code, locals()) - File "", line 1, in - File "[CACHE_DIR]/builds-v0/[TMP]/__init__.py", line 104, in setup - return distutils.core.setup(**attrs) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "[CACHE_DIR]/builds-v0/[TMP]/core.py", line 159, in setup - dist.parse_config_files() - File "[CACHE_DIR]/builds-v0/[TMP]/_virtualenv.py", line 20, in parse_config_files - result = old_parse_config_files(self, *args, **kwargs) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "[CACHE_DIR]/builds-v0/[TMP]/dist.py", line 631, in parse_config_files - pyprojecttoml.apply_configuration(self, filename, ignore_option_errors) - File "[CACHE_DIR]/builds-v0/[TMP]/pyprojecttoml.py", line 68, in apply_configuration - config = read_configuration(filepath, True, ignore_option_errors, dist) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "[CACHE_DIR]/builds-v0/[TMP]/pyprojecttoml.py", line 129, in read_configuration - validate(subset, filepath) - File "[CACHE_DIR]/builds-v0/[TMP]/pyprojecttoml.py", line 57, in validate - raise ValueError(f"{error}/n{summary}") from None - ValueError: invalid pyproject.toml config: `project.dependencies[0]`. - configuration error: `project.dependencies[0]` must be pep508 - - hint: This usually indicates a problem with the package or the build environment. - "### + error: Failed to build `project @ file://[TEMP_DIR]/path_dep` + Caused by: The build backend returned an error + Caused by: Call to `setuptools.build_meta:__legacy__.build_wheel` failed (exit status: 1) + + [stdout] + configuration error: `project.dependencies[0]` must be pep508 + DESCRIPTION: + Project dependency specification according to PEP 508 + + GIVEN VALUE: + "flask==1.0.x" + + OFFENDING RULE: 'format' + + DEFINITION: + { + "$id": "#/definitions/dependency", + "title": "Dependency", + "type": "string", + "format": "pep508" + } + + [stderr] + Traceback (most recent call last): + File "", line 14, in + File "[CACHE_DIR]/builds-v0/[TMP]/build_meta.py", line 325, in get_requires_for_build_wheel + return self._get_build_requires(config_settings, requirements=['wheel']) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "[CACHE_DIR]/builds-v0/[TMP]/build_meta.py", line 295, in _get_build_requires + self.run_setup() + File "[CACHE_DIR]/builds-v0/[TMP]/build_meta.py", line 487, in run_setup + super().run_setup(setup_script=setup_script) + File "[CACHE_DIR]/builds-v0/[TMP]/build_meta.py", line 311, in run_setup + exec(code, locals()) + File "", line 1, in + File "[CACHE_DIR]/builds-v0/[TMP]/__init__.py", line 104, in setup + return distutils.core.setup(**attrs) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "[CACHE_DIR]/builds-v0/[TMP]/core.py", line 159, in setup + dist.parse_config_files() + File "[CACHE_DIR]/builds-v0/[TMP]/_virtualenv.py", line 20, in parse_config_files + result = old_parse_config_files(self, *args, **kwargs) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "[CACHE_DIR]/builds-v0/[TMP]/dist.py", line 631, in parse_config_files + pyprojecttoml.apply_configuration(self, filename, ignore_option_errors) + File "[CACHE_DIR]/builds-v0/[TMP]/pyprojecttoml.py", line 68, in apply_configuration + config = read_configuration(filepath, True, ignore_option_errors, dist) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "[CACHE_DIR]/builds-v0/[TMP]/pyprojecttoml.py", line 129, in read_configuration + validate(subset, filepath) + File "[CACHE_DIR]/builds-v0/[TMP]/pyprojecttoml.py", line 57, in validate + raise ValueError(f"{error}/n{summary}") from None + ValueError: invalid pyproject.toml config: `project.dependencies[0]`. + configuration error: `project.dependencies[0]` must be pep508 + + hint: This usually indicates a problem with the package or the build environment. + "## ); Ok(()) @@ -480,16 +480,16 @@ fn no_solution() { uv_snapshot!(context.pip_install() .arg("flask>=3.0.2") .arg("WerkZeug<1.0.0") - .arg("--strict"), @r###" + .arg("--strict"), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because only flask<=3.0.2 is available and flask==3.0.2 depends on werkzeug>=3.0.0, we can conclude that flask>=3.0.2 depends on werkzeug>=3.0.0. - And because you require flask>=3.0.2 and werkzeug<1.0.0, we can conclude that your requirements are unsatisfiable. - "###); + error: No solution found when resolving dependencies: + Caused by: Because only flask<=3.0.2 is available and flask==3.0.2 depends on werkzeug>=3.0.0, we can conclude that flask>=3.0.2 depends on werkzeug>=3.0.0. + And because you require flask>=3.0.2 and werkzeug<1.0.0, we can conclude that your requirements are unsatisfiable. + "); } /// Install a package from the command line into a virtual environment. @@ -817,16 +817,16 @@ werkzeug==3.0.1 uv_snapshot!(context.pip_install() .arg("-r") .arg("requirements.txt") - .arg("--strict"), @r###" + .arg("--strict"), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because flask==3.0.2 depends on click>=8.1.3 and you require click==7.0.0, we can conclude that your requirements and flask==3.0.2 are incompatible. - And because you require flask==3.0.2, we can conclude that your requirements are unsatisfiable. - "### + error: No solution found when resolving dependencies: + Caused by: Because flask==3.0.2 depends on click>=8.1.3 and you require click==7.0.0, we can conclude that your requirements and flask==3.0.2 are incompatible. + And because you require flask==3.0.2, we can conclude that your requirements are unsatisfiable. + " ); Ok(()) @@ -1649,15 +1649,15 @@ fn install_editable_incompatible_constraint_version() -> Result<()> { .arg("-e") .arg(context.workspace_root.join("test/packages/black_editable")) .arg("--constraint") - .arg("constraints.txt"), @r###" + .arg("constraints.txt"), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because only black<=0.1.0 is available and you require black>0.1.0, we can conclude that your requirements are unsatisfiable. - "### + error: No solution found when resolving dependencies: + Caused by: Because only black<=0.1.0 is available and you require black>0.1.0, we can conclude that your requirements are unsatisfiable. + " ); Ok(()) @@ -1977,17 +1977,17 @@ fn install_no_index() { uv_snapshot!(context.pip_install() .arg("Flask") - .arg("--no-index"), @r###" + .arg("--no-index"), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because flask was not found in the provided package locations and you require flask, we can conclude that your requirements are unsatisfiable. - - hint: Packages were unavailable because index lookups were disabled and no additional package locations were provided (try: `--find-links `) - "### + error: No solution found when resolving dependencies: + Caused by: Because flask was not found in the provided package locations and you require flask, we can conclude that your requirements are unsatisfiable. + + hint: Packages were unavailable because index lookups were disabled and no additional package locations were provided (try: `--find-links `) + " ); context.assert_command("import flask").failure(); @@ -2001,17 +2001,17 @@ fn install_no_index_version() { uv_snapshot!(context.pip_install() .arg("Flask==3.0.0") - .arg("--no-index"), @r###" + .arg("--no-index"), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because flask was not found in the provided package locations and you require flask==3.0.0, we can conclude that your requirements are unsatisfiable. - - hint: Packages were unavailable because index lookups were disabled and no additional package locations were provided (try: `--find-links `) - "### + error: No solution found when resolving dependencies: + Caused by: Because flask was not found in the provided package locations and you require flask==3.0.0, we can conclude that your requirements are unsatisfiable. + + hint: Packages were unavailable because index lookups were disabled and no additional package locations were provided (try: `--find-links `) + " ); context.assert_command("import flask").failure(); @@ -2210,20 +2210,20 @@ fn install_git_public_https_missing_branch_or_tag() { uv_snapshot!(filters, context.pip_install() // 2.0.0 does not exist - .arg("uv-public-pypackage @ git+https://github.com/astral-test/uv-public-pypackage@2.0.0"), @r###" + .arg("uv-public-pypackage @ git+https://github.com/astral-test/uv-public-pypackage@2.0.0"), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- - × Failed to download and build `uv-public-pypackage @ git+https://github.com/astral-test/uv-public-pypackage@2.0.0` - ├─▶ Git operation failed - ├─▶ failed to clone into: [CACHE_DIR]/git-v0/db/8dab139913c4b566 - ├─▶ failed to fetch branch or tag `2.0.0` - ╰─▶ process didn't exit successfully: `git fetch [...]` (exit code: 128) - --- stderr - fatal: couldn't find remote ref refs/tags/2.0.0 - "###); + error: Failed to download and build `uv-public-pypackage @ git+https://github.com/astral-test/uv-public-pypackage@2.0.0` + Caused by: Git operation failed + Caused by: failed to clone into: [CACHE_DIR]/git-v0/db/8dab139913c4b566 + Caused by: failed to fetch branch or tag `2.0.0` + Caused by: process didn't exit successfully: `git fetch [...]` (exit code: 128) + --- stderr + fatal: couldn't find remote ref refs/tags/2.0.0 + "); } #[tokio::test] @@ -2306,24 +2306,24 @@ fn install_git_public_https_missing_commit() { uv_snapshot!(filters, context.pip_install() // 2.0.0 does not exist .arg("uv-public-pypackage @ git+https://github.com/astral-test/uv-public-pypackage@79a935a7a1a0ad6d0bdf72dce0e16cb0a24a1b3b") - , @r###" + , @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- - × Failed to download and build `uv-public-pypackage @ git+https://github.com/astral-test/uv-public-pypackage@79a935a7a1a0ad6d0bdf72dce0e16cb0a24a1b3b` - ├─▶ Git operation failed - ├─▶ failed to find branch, tag, or commit `79a935a7a1a0ad6d0bdf72dce0e16cb0a24a1b3b` - ╰─▶ process didn't exit successfully: `git rev-parse [...]` (exit code: 128) - --- stdout - 79a935a7a1a0ad6d0bdf72dce0e16cb0a24a1b3b^0 - - --- stderr - fatal: ambiguous argument '79a935a7a1a0ad6d0bdf72dce0e16cb0a24a1b3b^0': unknown revision or path not in the working tree. - Use '--' to separate paths from revisions, like this: - 'git [...] -- [...]' - "###); + error: Failed to download and build `uv-public-pypackage @ git+https://github.com/astral-test/uv-public-pypackage@79a935a7a1a0ad6d0bdf72dce0e16cb0a24a1b3b` + Caused by: Git operation failed + Caused by: failed to find branch, tag, or commit `79a935a7a1a0ad6d0bdf72dce0e16cb0a24a1b3b` + Caused by: process didn't exit successfully: `git rev-parse [...]` (exit code: 128) + --- stdout + 79a935a7a1a0ad6d0bdf72dce0e16cb0a24a1b3b^0 + + --- stderr + fatal: ambiguous argument '79a935a7a1a0ad6d0bdf72dce0e16cb0a24a1b3b^0': unknown revision or path not in the working tree. + Use '--' to separate paths from revisions, like this: + 'git [...] -- [...]' + "); } #[test] @@ -2550,13 +2550,13 @@ fn install_git_private_https_pat_not_authorized() { ----- stdout ----- ----- stderr ----- - × Failed to download and build `uv-private-pypackage @ git+https://git:****@github.com/astral-test/uv-private-pypackage` - ├─▶ Git operation failed - ├─▶ failed to clone into: [CACHE_DIR]/git-v0/db/8401f5508e3e612d - ╰─▶ process didn't exit successfully: `git fetch --force --update-head-ok 'https://git:***@github.com/astral-test/uv-private-pypackage' '+HEAD:refs/remotes/origin/HEAD'` (exit status: 128) - --- stderr - remote: Invalid username or token. Password authentication is not supported for Git operations. - fatal: Authentication failed for 'https://github.com/astral-test/uv-private-pypackage/' + error: Failed to download and build `uv-private-pypackage @ git+https://git:****@github.com/astral-test/uv-private-pypackage` + Caused by: Git operation failed + Caused by: failed to clone into: [CACHE_DIR]/git-v0/db/8401f5508e3e612d + Caused by: process didn't exit successfully: `git fetch --force --update-head-ok 'https://git:***@github.com/astral-test/uv-private-pypackage' '+HEAD:refs/remotes/origin/HEAD'` (exit status: 128) + --- stderr + remote: Invalid username or token. Password authentication is not supported for Git operations. + fatal: Authentication failed for 'https://github.com/astral-test/uv-private-pypackage/' "); } @@ -2642,19 +2642,19 @@ fn install_git_private_https_interactive() { .collect(); uv_snapshot!(filters, context.pip_install().arg(package) - , @r###" + , @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- - × Failed to download and build `uv-private-pypackage @ git+https://github.com/astral-test/uv-private-pypackage` - ├─▶ Git operation failed - ├─▶ failed to clone into: [CACHE_DIR]/git-v0/db/8401f5508e3e612d - ╰─▶ process didn't exit successfully: `/usr/bin/git fetch --force --update-head-ok 'https://github.com/astral-test/uv-private-pypackage' '+HEAD:refs/remotes/origin/HEAD'` (exit status: 128) - --- stderr - fatal: could not read Username for 'https://github.com': terminal prompts disabled - "###); + error: Failed to download and build `uv-private-pypackage @ git+https://github.com/astral-test/uv-private-pypackage` + Caused by: Git operation failed + Caused by: failed to clone into: [CACHE_DIR]/git-v0/db/8401f5508e3e612d + Caused by: process didn't exit successfully: `/usr/bin/git fetch --force --update-head-ok 'https://github.com/astral-test/uv-private-pypackage' '+HEAD:refs/remotes/origin/HEAD'` (exit status: 128) + --- stderr + fatal: could not read Username for 'https://github.com': terminal prompts disabled + "); } /// Install a package without using pre-built wheels. @@ -2893,19 +2893,19 @@ fn install_only_binary_all_and_no_binary_all() { .arg("--strict"); uv_snapshot!( command, - @r###" + @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because all versions of anyio have no usable wheels and you require anyio, we can conclude that your requirements are unsatisfiable. - - hint: Pre-releases are available for `anyio` in the requested range (e.g., 4.0.0rc1), but pre-releases weren't enabled (try: `--prerelease=allow`) - - hint: Wheels are required for `anyio` because building from source is disabled for all packages (i.e., with `--no-build`) - "### + error: No solution found when resolving dependencies: + Caused by: Because all versions of anyio have no usable wheels and you require anyio, we can conclude that your requirements are unsatisfiable. + + hint: Pre-releases are available for `anyio` in the requested range (e.g., 4.0.0rc1), but pre-releases weren't enabled (try: `--prerelease=allow`) + + hint: Wheels are required for `anyio` because building from source is disabled for all packages (i.e., with `--no-build`) + " ); context.assert_command("import anyio").failure(); @@ -2988,17 +2988,17 @@ fn only_binary_requirements_txt() { uv_snapshot!(context.pip_install() .arg("-r") .arg("requirements.txt") - .arg("--strict"), @r###" + .arg("--strict"), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because django-allauth==0.51.0 has no usable wheels and you require django-allauth==0.51.0, we can conclude that your requirements are unsatisfiable. - - hint: Wheels are required for `django-allauth` because building from source is disabled for `django-allauth` (i.e., with `--no-build-package django-allauth`) - "### + error: No solution found when resolving dependencies: + Caused by: Because django-allauth==0.51.0 has no usable wheels and you require django-allauth==0.51.0, we can conclude that your requirements are unsatisfiable. + + hint: Wheels are required for `django-allauth` because building from source is disabled for `django-allauth` (i.e., with `--no-build-package django-allauth`) + " ); } @@ -3113,10 +3113,10 @@ fn no_prerelease_hint_source_builds() -> Result<()> { ----- stderr ----- Resolved 1 package in [TIME] - × Failed to build `project @ file://[TEMP_DIR]/` - ├─▶ Failed to resolve requirements from `setup.py` build - ├─▶ No solution found when resolving: `setuptools>=40.8.0` - ╰─▶ Because only setuptools<=40.4.3 is available and you require setuptools>=40.8.0, we can conclude that your requirements are unsatisfiable. + error: Failed to build `project @ file://[TEMP_DIR]/` + Caused by: Failed to resolve requirements from `setup.py` build + Caused by: No solution found when resolving: `setuptools>=40.8.0` + Caused by: Because only setuptools<=40.4.3 is available and you require setuptools>=40.8.0, we can conclude that your requirements are unsatisfiable. " ); @@ -3748,10 +3748,10 @@ fn install_git_source_respects_offline_mode() { ----- stdout ----- ----- stderr ----- - × Failed to download and build `uv-public-pypackage @ git+https://github.com/astral-test/uv-public-pypackage` - ├─▶ Git operation failed - ├─▶ failed to clone into: [CACHE_DIR]/git-v0/db/8dab139913c4b566 - ╰─▶ Remote Git fetches are not allowed because network connectivity is disabled (i.e., with `--offline`) + error: Failed to download and build `uv-public-pypackage @ git+https://github.com/astral-test/uv-public-pypackage` + Caused by: Git operation failed + Caused by: failed to clone into: [CACHE_DIR]/git-v0/db/8dab139913c4b566 + Caused by: Remote Git fetches are not allowed because network connectivity is disabled (i.e., with `--offline`) " ); } @@ -3787,13 +3787,13 @@ fn build_prerelease_hint() -> Result<()> { ----- stderr ----- Resolved 1 package in [TIME] - × Failed to build `project @ file://[TEMP_DIR]/` - ├─▶ Failed to resolve requirements from `build-system.requires` - ├─▶ No solution found when resolving: `transitive-package-only-prereleases-in-range-a` - ╰─▶ Because only transitive-package-only-prereleases-in-range-b<=0.1 is available and transitive-package-only-prereleases-in-range-a==0.1.0 depends on transitive-package-only-prereleases-in-range-b>0.1, we can conclude that transitive-package-only-prereleases-in-range-a==0.1.0 cannot be used. - And because only transitive-package-only-prereleases-in-range-a==0.1.0 is available and you require transitive-package-only-prereleases-in-range-a, we can conclude that your requirements are unsatisfiable. - - hint: Only pre-releases of `transitive-package-only-prereleases-in-range-b` (e.g., 1.0.0a1) match these build requirements, and build environments can't enable pre-releases automatically. Add `transitive-package-only-prereleases-in-range-b>=1.0.0a1` to `build-system.requires`, `[tool.uv.extra-build-dependencies]`, or supply it via `uv build --build-constraint`. + error: Failed to build `project @ file://[TEMP_DIR]/` + Caused by: Failed to resolve requirements from `build-system.requires` + Caused by: No solution found when resolving: `transitive-package-only-prereleases-in-range-a` + Caused by: Because only transitive-package-only-prereleases-in-range-b<=0.1 is available and transitive-package-only-prereleases-in-range-a==0.1.0 depends on transitive-package-only-prereleases-in-range-b>0.1, we can conclude that transitive-package-only-prereleases-in-range-a==0.1.0 cannot be used. + And because only transitive-package-only-prereleases-in-range-a==0.1.0 is available and you require transitive-package-only-prereleases-in-range-a, we can conclude that your requirements are unsatisfiable. + + hint: Only pre-releases of `transitive-package-only-prereleases-in-range-b` (e.g., 1.0.0a1) match these build requirements, and build environments can't enable pre-releases automatically. Add `transitive-package-only-prereleases-in-range-b>=1.0.0a1` to `build-system.requires`, `[tool.uv.extra-build-dependencies]`, or supply it via `uv build --build-constraint`. " ); @@ -5079,16 +5079,16 @@ requires-python = ">=3.13" uv_snapshot!(context.filters(), context.pip_install() .arg("--editable") - .arg(editable_dir.path()), @r###" + .arg(editable_dir.path()), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because the current Python version (3.12.[X]) does not satisfy Python>=3.13 and example==0.0.0 depends on Python>=3.13, we can conclude that example==0.0.0 cannot be used. - And because only example==0.0.0 is available and you require example, we can conclude that your requirements are unsatisfiable. - "### + error: No solution found when resolving dependencies: + Caused by: Because the current Python version (3.12.[X]) does not satisfy Python>=3.13 and example==0.0.0 depends on Python>=3.13, we can conclude that example==0.0.0 cannot be used. + And because only example==0.0.0 is available and you require example, we can conclude that your requirements are unsatisfiable. + " ); Ok(()) @@ -5111,21 +5111,21 @@ fn no_build_isolation() -> Result<()> { ----- stdout ----- ----- stderr ----- - × Failed to build `anyio @ https://files.pythonhosted.org/packages/db/4d/3970183622f0330d3c23d9b8a5f52e365e50381fd484d08e3285104333d3/anyio-4.3.0.tar.gz` - ├─▶ The build backend returned an error - ╰─▶ Call to `setuptools.build_meta.prepare_metadata_for_build_wheel` failed (exit status: 1) - - [stderr] - Traceback (most recent call last): - File "", line 8, in - ModuleNotFoundError: No module named 'setuptools' - - hint: This error likely indicates that `anyio` depends on `setuptools`, but doesn't declare it as a build dependency. If `anyio` is a first-party package, consider adding `setuptools` to its `build-system.requires`. Otherwise, either add it to your `pyproject.toml` under: - - [tool.uv.extra-build-dependencies] - anyio = ["setuptools"] - - or `uv pip install setuptools` into the environment and re-run with `--no-build-isolation`. + error: Failed to build `anyio @ https://files.pythonhosted.org/packages/db/4d/3970183622f0330d3c23d9b8a5f52e365e50381fd484d08e3285104333d3/anyio-4.3.0.tar.gz` + Caused by: The build backend returned an error + Caused by: Call to `setuptools.build_meta.prepare_metadata_for_build_wheel` failed (exit status: 1) + + [stderr] + Traceback (most recent call last): + File "", line 8, in + ModuleNotFoundError: No module named 'setuptools' + + hint: This error likely indicates that `anyio` depends on `setuptools`, but doesn't declare it as a build dependency. If `anyio` is a first-party package, consider adding `setuptools` to its `build-system.requires`. Otherwise, either add it to your `pyproject.toml` under: + + [tool.uv.extra-build-dependencies] + anyio = ["setuptools"] + + or `uv pip install setuptools` into the environment and re-run with `--no-build-isolation`. "# ); @@ -5184,21 +5184,21 @@ fn respect_no_build_isolation_env_var() -> Result<()> { ----- stdout ----- ----- stderr ----- - × Failed to build `anyio @ https://files.pythonhosted.org/packages/db/4d/3970183622f0330d3c23d9b8a5f52e365e50381fd484d08e3285104333d3/anyio-4.3.0.tar.gz` - ├─▶ The build backend returned an error - ╰─▶ Call to `setuptools.build_meta.prepare_metadata_for_build_wheel` failed (exit status: 1) - - [stderr] - Traceback (most recent call last): - File "", line 8, in - ModuleNotFoundError: No module named 'setuptools' - - hint: This error likely indicates that `anyio` depends on `setuptools`, but doesn't declare it as a build dependency. If `anyio` is a first-party package, consider adding `setuptools` to its `build-system.requires`. Otherwise, either add it to your `pyproject.toml` under: - - [tool.uv.extra-build-dependencies] - anyio = ["setuptools"] - - or `uv pip install setuptools` into the environment and re-run with `--no-build-isolation`. + error: Failed to build `anyio @ https://files.pythonhosted.org/packages/db/4d/3970183622f0330d3c23d9b8a5f52e365e50381fd484d08e3285104333d3/anyio-4.3.0.tar.gz` + Caused by: The build backend returned an error + Caused by: Call to `setuptools.build_meta.prepare_metadata_for_build_wheel` failed (exit status: 1) + + [stderr] + Traceback (most recent call last): + File "", line 8, in + ModuleNotFoundError: No module named 'setuptools' + + hint: This error likely indicates that `anyio` depends on `setuptools`, but doesn't declare it as a build dependency. If `anyio` is a first-party package, consider adding `setuptools` to its `build-system.requires`. Otherwise, either add it to your `pyproject.toml` under: + + [tool.uv.extra-build-dependencies] + anyio = ["setuptools"] + + or `uv pip install setuptools` into the environment and re-run with `--no-build-isolation`. "# ); @@ -5596,16 +5596,16 @@ requires-python = ">=3.13" )?; uv_snapshot!(context.filters(), context.pip_install() - .arg(format!("example @ {}", editable_dir.path().display())), @r###" + .arg(format!("example @ {}", editable_dir.path().display())), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because the current Python version (3.12.[X]) does not satisfy Python>=3.13 and example==0.0.0 depends on Python>=3.13, we can conclude that example==0.0.0 cannot be used. - And because only example==0.0.0 is available and you require example, we can conclude that your requirements are unsatisfiable. - "### + error: No solution found when resolving dependencies: + Caused by: Because the current Python version (3.12.[X]) does not satisfy Python>=3.13 and example==0.0.0 depends on Python>=3.13, we can conclude that example==0.0.0 cannot be used. + And because only example==0.0.0 is available and you require example, we can conclude that your requirements are unsatisfiable. + " ); Ok(()) @@ -5850,10 +5850,10 @@ fn install_package_basic_auth_from_keyring_wrong_password() { ----- stderr ----- Keyring request for public@https://pypi-proxy.fly.dev/basic-auth/simple Keyring request for public@pypi-proxy.fly.dev - × No solution found when resolving dependencies: - ╰─▶ Because anyio was not found in the package registry and you require anyio, we can conclude that your requirements are unsatisfiable. - - hint: An index URL (https://pypi-proxy.fly.dev/basic-auth/simple) could not be queried due to a lack of valid authentication credentials (401 Unauthorized). + error: No solution found when resolving dependencies: + Caused by: Because anyio was not found in the package registry and you require anyio, we can conclude that your requirements are unsatisfiable. + + hint: An index URL (https://pypi-proxy.fly.dev/basic-auth/simple) could not be queried due to a lack of valid authentication credentials (401 Unauthorized). " ); } @@ -5893,10 +5893,10 @@ fn install_package_basic_auth_from_keyring_wrong_username() { ----- stderr ----- Keyring request for public@https://pypi-proxy.fly.dev/basic-auth/simple Keyring request for public@pypi-proxy.fly.dev - × No solution found when resolving dependencies: - ╰─▶ Because anyio was not found in the package registry and you require anyio, we can conclude that your requirements are unsatisfiable. - - hint: An index URL (https://pypi-proxy.fly.dev/basic-auth/simple) could not be queried due to a lack of valid authentication credentials (401 Unauthorized). + error: No solution found when resolving dependencies: + Caused by: Because anyio was not found in the package registry and you require anyio, we can conclude that your requirements are unsatisfiable. + + hint: An index URL (https://pypi-proxy.fly.dev/basic-auth/simple) could not be queried due to a lack of valid authentication credentials (401 Unauthorized). " ); } @@ -6053,17 +6053,17 @@ fn reinstall_no_index() { .arg("anyio") .arg("--no-index") .arg("--reinstall") - .arg("--strict"), @r###" + .arg("--strict"), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because anyio was not found in the provided package locations and you require anyio, we can conclude that your requirements are unsatisfiable. - - hint: Packages were unavailable because index lookups were disabled and no additional package locations were provided (try: `--find-links `) - "### + error: No solution found when resolving dependencies: + Caused by: Because anyio was not found in the provided package locations and you require anyio, we can conclude that your requirements are unsatisfiable. + + hint: Packages were unavailable because index lookups were disabled and no additional package locations were provided (try: `--find-links `) + " ); } @@ -6179,16 +6179,16 @@ fn already_installed_dependent_editable() { // Disable the index to guard this test against dependency confusion attacks .arg("--no-index") .arg("--find-links") - .arg(build_vendor_links_url()), @r###" + .arg(build_vendor_links_url()), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because first-local was not found in the provided package locations and second-local==0.1.0 depends on first-local, we can conclude that second-local==0.1.0 cannot be used. - And because only second-local==0.1.0 is available and you require second-local, we can conclude that your requirements are unsatisfiable. - "### + error: No solution found when resolving dependencies: + Caused by: Because first-local was not found in the provided package locations and second-local==0.1.0 depends on first-local, we can conclude that second-local==0.1.0 cannot be used. + And because only second-local==0.1.0 is available and you require second-local, we can conclude that your requirements are unsatisfiable. + " ); // Request reinstallation of the first package @@ -6298,16 +6298,16 @@ fn already_installed_local_path_dependent() { // Disable the index to guard this test against dependency confusion attacks .arg("--no-index") .arg("--find-links") - .arg(build_vendor_links_url()), @r###" + .arg(build_vendor_links_url()), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because first-local was not found in the provided package locations and second-local==0.1.0 depends on first-local, we can conclude that second-local==0.1.0 cannot be used. - And because only second-local==0.1.0 is available and you require second-local, we can conclude that your requirements are unsatisfiable. - "### + error: No solution found when resolving dependencies: + Caused by: Because first-local was not found in the provided package locations and second-local==0.1.0 depends on first-local, we can conclude that second-local==0.1.0 cannot be used. + And because only second-local==0.1.0 is available and you require second-local, we can conclude that your requirements are unsatisfiable. + " ); // Request reinstallation of the first package @@ -6420,32 +6420,32 @@ fn already_installed_local_version_of_remote_package() { // but we disable it here to preserve this dependency for future tests uv_snapshot!(context.filters(), context.pip_install() .arg("anyio==4.2.0") - .arg("--no-index"), @r###" + .arg("--no-index"), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because anyio was not found in the provided package locations and you require anyio==4.2.0, we can conclude that your requirements are unsatisfiable. - - hint: Packages were unavailable because index lookups were disabled and no additional package locations were provided (try: `--find-links `) - "### + error: No solution found when resolving dependencies: + Caused by: Because anyio was not found in the provided package locations and you require anyio==4.2.0, we can conclude that your requirements are unsatisfiable. + + hint: Packages were unavailable because index lookups were disabled and no additional package locations were provided (try: `--find-links `) + " ); // Request reinstallation with the local version segment — this should fail since it is not available // in the index and the path was not provided uv_snapshot!(context.filters(), context.pip_install() .arg("anyio==4.3.0+foo") - .arg("--reinstall"), @r###" + .arg("--reinstall"), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because there is no version of anyio==4.3.0+foo and you require anyio==4.3.0+foo, we can conclude that your requirements are unsatisfiable. - "### + error: No solution found when resolving dependencies: + Caused by: Because there is no version of anyio==4.3.0+foo and you require anyio==4.3.0+foo, we can conclude that your requirements are unsatisfiable. + " ); // Request reinstall with the full path, this should reinstall from the path and not pull from @@ -6680,17 +6680,17 @@ fn already_installed_remote_url() { context.pip_install() .arg("uv-public-pypackage") .arg("--no-index") - .arg("--reinstall"), @r###" + .arg("--reinstall"), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because uv-public-pypackage was not found in the provided package locations and you require uv-public-pypackage, we can conclude that your requirements are unsatisfiable. - - hint: Packages were unavailable because index lookups were disabled and no additional package locations were provided (try: `--find-links `) - "###); + error: No solution found when resolving dependencies: + Caused by: Because uv-public-pypackage was not found in the provided package locations and you require uv-public-pypackage, we can conclude that your requirements are unsatisfiable. + + hint: Packages were unavailable because index lookups were disabled and no additional package locations were provided (try: `--find-links `) + "); // Request installation again with just the full URL // We should just audit the existing package @@ -6726,17 +6726,17 @@ fn already_installed_remote_url() { // Request installation again with a different version // We should attempt to pull from the index since the local version does not match uv_snapshot!( - context.pip_install().arg("uv-public-pypackage==0.2.0").arg("--no-index"), @r###" + context.pip_install().arg("uv-public-pypackage==0.2.0").arg("--no-index"), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because uv-public-pypackage was not found in the provided package locations and you require uv-public-pypackage==0.2.0, we can conclude that your requirements are unsatisfiable. - - hint: Packages were unavailable because index lookups were disabled and no additional package locations were provided (try: `--find-links `) - "###); + error: No solution found when resolving dependencies: + Caused by: Because uv-public-pypackage was not found in the provided package locations and you require uv-public-pypackage==0.2.0, we can conclude that your requirements are unsatisfiable. + + hint: Packages were unavailable because index lookups were disabled and no additional package locations were provided (try: `--find-links `) + "); } /// Sync using `--find-links` with a local directory. @@ -6928,23 +6928,23 @@ fn require_hashes_mismatch() -> Result<()> { uv_snapshot!(context.pip_install() .arg("-r") .arg("requirements.txt") - .arg("--require-hashes"), @r###" + .arg("--require-hashes"), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- Resolved 3 packages in [TIME] - × Failed to download `anyio==4.0.0` - ╰─▶ Hash mismatch for `anyio==4.0.0` - - Expected: - sha256:afdb2b588b9fc25ede96d8db56ed50848b0b649dca3dd1df0b11f683bb9e0b5f - sha256:a7ed51751b2c2add651e5747c891b47e26d2a21be5d32d9311dfe9692f3e5d7a - - Computed: - sha256:cfdb2b588b9fc25ede96d8db56ed50848b0b649dca3dd1df0b11f683bb9e0b5f - "### + error: Failed to download `anyio==4.0.0` + Caused by: Hash mismatch for `anyio==4.0.0` + + Expected: + sha256:afdb2b588b9fc25ede96d8db56ed50848b0b649dca3dd1df0b11f683bb9e0b5f + sha256:a7ed51751b2c2add651e5747c891b47e26d2a21be5d32d9311dfe9692f3e5d7a + + Computed: + sha256:cfdb2b588b9fc25ede96d8db56ed50848b0b649dca3dd1df0b11f683bb9e0b5f + " ); Ok(()) @@ -7543,23 +7543,23 @@ fn verify_hashes_mismatch() -> Result<()> { .arg("--no-deps") .arg("-r") .arg("requirements.txt") - .arg("--verify-hashes"), @r###" + .arg("--verify-hashes"), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- Resolved 1 package in [TIME] - × Failed to download `idna==3.6` - ╰─▶ Hash mismatch for `idna==3.6` - - Expected: - sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2 - sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc - - Computed: - sha256:c05567e9c24a6b9faaa835c4821bad0590fbb9d5779e7caa6e1cc4978e7eb24f - "### + error: Failed to download `idna==3.6` + Caused by: Hash mismatch for `idna==3.6` + + Expected: + sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2 + sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc + + Computed: + sha256:c05567e9c24a6b9faaa835c4821bad0590fbb9d5779e7caa6e1cc4978e7eb24f + " ); uv_snapshot!(context.pip_install() @@ -8586,17 +8586,17 @@ fn incompatible_build_constraint() -> Result<()> { uv_snapshot!(context.pip_install() .arg("requests==1.2") .arg("--build-constraint") - .arg("build_constraints.txt"), @r###" + .arg("build_constraints.txt"), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- - × Failed to download and build `requests==1.2.0` - ├─▶ Failed to resolve requirements from `setup.py` build - ├─▶ No solution found when resolving: `setuptools>=40.8.0` - ╰─▶ Because you require setuptools>=40.8.0 and setuptools==1, we can conclude that your requirements are unsatisfiable. - "### + error: Failed to download and build `requests==1.2.0` + Caused by: Failed to resolve requirements from `setup.py` build + Caused by: No solution found when resolving: `setuptools>=40.8.0` + Caused by: Because you require setuptools>=40.8.0 and setuptools==1, we can conclude that your requirements are unsatisfiable. + " ); Ok(()) @@ -8644,17 +8644,17 @@ build-constraint-dependencies = [ )?; uv_snapshot!(context.pip_install() - .arg("requests==1.2"), @r###" + .arg("requests==1.2"), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- - × Failed to download and build `requests==1.2.0` - ├─▶ Failed to resolve requirements from `setup.py` build - ├─▶ No solution found when resolving: `setuptools>=40.8.0` - ╰─▶ Because you require setuptools>=40.8.0 and setuptools==1, we can conclude that your requirements are unsatisfiable. - "### + error: Failed to download and build `requests==1.2.0` + Caused by: Failed to resolve requirements from `setup.py` build + Caused by: No solution found when resolving: `setuptools>=40.8.0` + Caused by: Because you require setuptools>=40.8.0 and setuptools==1, we can conclude that your requirements are unsatisfiable. + " ); Ok(()) @@ -8712,17 +8712,17 @@ build-constraint-dependencies = [ uv_snapshot!(context.pip_install() .arg("requests==1.2") .arg("--build-constraint") - .arg("build_constraints.txt"), @r###" + .arg("build_constraints.txt"), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- - × Failed to download and build `requests==1.2.0` - ├─▶ Failed to resolve requirements from `setup.py` build - ├─▶ No solution found when resolving: `setuptools>=40.8.0` - ╰─▶ Because you require setuptools>=40 and setuptools==1, we can conclude that your requirements are unsatisfiable. - "### + error: Failed to download and build `requests==1.2.0` + Caused by: Failed to resolve requirements from `setup.py` build + Caused by: No solution found when resolving: `setuptools>=40.8.0` + Caused by: Because you require setuptools>=40 and setuptools==1, we can conclude that your requirements are unsatisfiable. + " ); // Compatible setuptools version in pyproject.toml, incompatible in build_constraints.txt. @@ -8740,17 +8740,17 @@ build-constraint-dependencies = [ uv_snapshot!(context.pip_install() .arg("requests==1.2") .arg("--build-constraint") - .arg("build_constraints.txt"), @r###" + .arg("build_constraints.txt"), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- - × Failed to download and build `requests==1.2.0` - ├─▶ Failed to resolve requirements from `setup.py` build - ├─▶ No solution found when resolving: `setuptools>=40.8.0` - ╰─▶ Because you require setuptools==1 and setuptools>=40, we can conclude that your requirements are unsatisfiable. - "### + error: Failed to download and build `requests==1.2.0` + Caused by: Failed to resolve requirements from `setup.py` build + Caused by: No solution found when resolving: `setuptools>=40.8.0` + Caused by: Because you require setuptools==1 and setuptools>=40, we can conclude that your requirements are unsatisfiable. + " ); Ok(()) @@ -8818,21 +8818,21 @@ fn install_build_isolation_package() -> Result<()> { ----- stdout ----- ----- stderr ----- - × Failed to build `iniconfig @ https://files.pythonhosted.org/packages/d7/4b/cbd8e699e64a6f16ca3a8220661b5f83792b3017d0f79807cb8708d33913/iniconfig-2.0.0.tar.gz` - ├─▶ The build backend returned an error - ╰─▶ Call to `hatchling.build.prepare_metadata_for_build_wheel` failed (exit status: 1) - - [stderr] - Traceback (most recent call last): - File "", line 8, in - ModuleNotFoundError: No module named 'hatchling' - - hint: This error likely indicates that `iniconfig` depends on `hatchling`, but doesn't declare it as a build dependency. If `iniconfig` is a first-party package, consider adding `hatchling` to its `build-system.requires`. Otherwise, either add it to your `pyproject.toml` under: - - [tool.uv.extra-build-dependencies] - iniconfig = ["hatchling"] - - or `uv pip install hatchling` into the environment and re-run with `--no-build-isolation`. + error: Failed to build `iniconfig @ https://files.pythonhosted.org/packages/d7/4b/cbd8e699e64a6f16ca3a8220661b5f83792b3017d0f79807cb8708d33913/iniconfig-2.0.0.tar.gz` + Caused by: The build backend returned an error + Caused by: Call to `hatchling.build.prepare_metadata_for_build_wheel` failed (exit status: 1) + + [stderr] + Traceback (most recent call last): + File "", line 8, in + ModuleNotFoundError: No module named 'hatchling' + + hint: This error likely indicates that `iniconfig` depends on `hatchling`, but doesn't declare it as a build dependency. If `iniconfig` is a first-party package, consider adding `hatchling` to its `build-system.requires`. Otherwise, either add it to your `pyproject.toml` under: + + [tool.uv.extra-build-dependencies] + iniconfig = ["hatchling"] + + or `uv pip install hatchling` into the environment and re-run with `--no-build-isolation`. "# ); @@ -9143,36 +9143,37 @@ fn missing_top_level() { fn sklearn() { let context = TestContext::new("3.12"); - uv_snapshot!(context.filters(), context.pip_install().arg("sklearn"), @r###" + uv_snapshot!(context.filters(), context.pip_install().arg("sklearn"), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- - × Failed to build `sklearn==0.0.post12` - ├─▶ The build backend returned an error - ╰─▶ Call to `setuptools.build_meta:__legacy__.build_wheel` failed (exit status: 1) + error: Failed to build `sklearn==0.0.post12` + Caused by: The build backend returned an error + Caused by: Call to `setuptools.build_meta:__legacy__.build_wheel` failed (exit status: 1) + + [stderr] + The 'sklearn' PyPI package is deprecated, use 'scikit-learn' + rather than 'sklearn' for pip commands. + + Here is how to fix this error in the main use cases: + - use 'pip install scikit-learn' rather than 'pip install sklearn' + - replace 'sklearn' by 'scikit-learn' in your pip requirements files + (requirements.txt, setup.py, setup.cfg, Pipfile, etc ...) + - if the 'sklearn' package is used by one of your dependencies, + it would be great if you take some time to track which package uses + 'sklearn' instead of 'scikit-learn' and report it to their issue tracker + - as a last resort, set the environment variable + SKLEARN_ALLOW_DEPRECATED_SKLEARN_PACKAGE_INSTALL=True to avoid this error + + More information is available at + https://github.com/scikit-learn/sklearn-pypi-package + + hint: This usually indicates a problem with the package or the build environment. - [stderr] - The 'sklearn' PyPI package is deprecated, use 'scikit-learn' - rather than 'sklearn' for pip commands. - - Here is how to fix this error in the main use cases: - - use 'pip install scikit-learn' rather than 'pip install sklearn' - - replace 'sklearn' by 'scikit-learn' in your pip requirements files - (requirements.txt, setup.py, setup.cfg, Pipfile, etc ...) - - if the 'sklearn' package is used by one of your dependencies, - it would be great if you take some time to track which package uses - 'sklearn' instead of 'scikit-learn' and report it to their issue tracker - - as a last resort, set the environment variable - SKLEARN_ALLOW_DEPRECATED_SKLEARN_PACKAGE_INSTALL=True to avoid this error - - More information is available at - https://github.com/scikit-learn/sklearn-pypi-package - - hint: This usually indicates a problem with the package or the build environment. - help: `sklearn` is often confused for `scikit-learn` Did you mean to install `scikit-learn` instead? - "### + hint: `sklearn` is often confused for `scikit-learn` Did you mean to install `scikit-learn` instead? + " ); } @@ -9198,37 +9199,38 @@ fn resolve_derivation_chain() -> Result<()> { uv_snapshot!(filters, context.pip_install() .arg("-e") - .arg("."), @r###" + .arg("."), @r#" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- - × Failed to build `wsgiref==0.1.2` - ├─▶ The build backend returned an error - ╰─▶ Call to `setuptools.build_meta:__legacy__.build_wheel` failed (exit status: 1) + error: Failed to build `wsgiref==0.1.2` + Caused by: The build backend returned an error + Caused by: Call to `setuptools.build_meta:__legacy__.build_wheel` failed (exit status: 1) + + [stderr] + Traceback (most recent call last): + File "", line 14, in + File "[CACHE_DIR]/builds-v0/[TMP]/build_meta.py", line 325, in get_requires_for_build_wheel + return self._get_build_requires(config_settings, requirements=['wheel']) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "[CACHE_DIR]/builds-v0/[TMP]/build_meta.py", line 295, in _get_build_requires + self.run_setup() + File "[CACHE_DIR]/builds-v0/[TMP]/build_meta.py", line 487, in run_setup + super().run_setup(setup_script=setup_script) + File "[CACHE_DIR]/builds-v0/[TMP]/build_meta.py", line 311, in run_setup + exec(code, locals()) + File "", line 5, in + File "[CACHE_DIR]/[TMP]/src/ez_setup/__init__.py", line 170 + print "Setuptools version",version,"or greater has been installed." + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + SyntaxError: Missing parentheses in call to 'print'. Did you mean print(...)? + + hint: This usually indicates a problem with the package or the build environment. - [stderr] - Traceback (most recent call last): - File "", line 14, in - File "[CACHE_DIR]/builds-v0/[TMP]/build_meta.py", line 325, in get_requires_for_build_wheel - return self._get_build_requires(config_settings, requirements=['wheel']) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "[CACHE_DIR]/builds-v0/[TMP]/build_meta.py", line 295, in _get_build_requires - self.run_setup() - File "[CACHE_DIR]/builds-v0/[TMP]/build_meta.py", line 487, in run_setup - super().run_setup(setup_script=setup_script) - File "[CACHE_DIR]/builds-v0/[TMP]/build_meta.py", line 311, in run_setup - exec(code, locals()) - File "", line 5, in - File "[CACHE_DIR]/[TMP]/src/ez_setup/__init__.py", line 170 - print "Setuptools version",version,"or greater has been installed." - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - SyntaxError: Missing parentheses in call to 'print'. Did you mean print(...)? - - hint: This usually indicates a problem with the package or the build environment. - help: `wsgiref` (v0.1.2) was included because `project` (v0.1.0) depends on `wsgiref` - "### + hint: `wsgiref` (v0.1.2) was included because `project` (v0.1.0) depends on `wsgiref` + "# ); Ok(()) @@ -9309,16 +9311,16 @@ fn test_dynamic_version_sdist_wrong_version() -> Result<()> { uv_snapshot!(context.filters(), context .pip_install() - .arg(source_dist.path()), @r###" + .arg(source_dist.path()), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- Resolved 1 package in [TIME] - × Failed to build `foo @ file://[TEMP_DIR]/foo-1.2.3.tar.gz` - ╰─▶ Package metadata version `10.11.12` does not match given version `1.2.3` - "### + error: Failed to build `foo @ file://[TEMP_DIR]/foo-1.2.3.tar.gz` + Caused by: Package metadata version `10.11.12` does not match given version `1.2.3` + " ); Ok(()) @@ -9391,15 +9393,15 @@ fn missing_subdirectory_git() -> Result<()> { requirements_txt.touch()?; uv_snapshot!(context.pip_install() - .arg("workspace-in-root-test @ git+https://github.com/astral-sh/workspace-in-root-test#subdirectory=missing"), @r###" + .arg("workspace-in-root-test @ git+https://github.com/astral-sh/workspace-in-root-test#subdirectory=missing"), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- - × Failed to download and build `workspace-in-root-test @ git+https://github.com/astral-sh/workspace-in-root-test#subdirectory=missing` - ╰─▶ The source distribution `git+https://github.com/astral-sh/workspace-in-root-test#subdirectory=missing` has no subdirectory `missing` - "### + error: Failed to download and build `workspace-in-root-test @ git+https://github.com/astral-sh/workspace-in-root-test#subdirectory=missing` + Caused by: The source distribution `git+https://github.com/astral-sh/workspace-in-root-test#subdirectory=missing` has no subdirectory `missing` + " ); Ok(()) @@ -9412,15 +9414,15 @@ fn missing_subdirectory_url() -> Result<()> { requirements_txt.touch()?; uv_snapshot!(context.pip_install() - .arg("source-distribution @ https://files.pythonhosted.org/packages/1f/e5/5b016c945d745f8b108e759d428341488a6aee8f51f07c6c4e33498bb91f/source_distribution-0.0.3.tar.gz#subdirectory=missing"), @r###" + .arg("source-distribution @ https://files.pythonhosted.org/packages/1f/e5/5b016c945d745f8b108e759d428341488a6aee8f51f07c6c4e33498bb91f/source_distribution-0.0.3.tar.gz#subdirectory=missing"), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- - × Failed to download and build `source-distribution @ https://files.pythonhosted.org/packages/1f/e5/5b016c945d745f8b108e759d428341488a6aee8f51f07c6c4e33498bb91f/source_distribution-0.0.3.tar.gz#subdirectory=missing` - ╰─▶ The source distribution `https://files.pythonhosted.org/packages/1f/e5/5b016c945d745f8b108e759d428341488a6aee8f51f07c6c4e33498bb91f/source_distribution-0.0.3.tar.gz#subdirectory=missing` has no subdirectory `missing` - "### + error: Failed to download and build `source-distribution @ https://files.pythonhosted.org/packages/1f/e5/5b016c945d745f8b108e759d428341488a6aee8f51f07c6c4e33498bb91f/source_distribution-0.0.3.tar.gz#subdirectory=missing` + Caused by: The source distribution `https://files.pythonhosted.org/packages/1f/e5/5b016c945d745f8b108e759d428341488a6aee8f51f07c6c4e33498bb91f/source_distribution-0.0.3.tar.gz#subdirectory=missing` has no subdirectory `missing` + " ); Ok(()) @@ -9443,9 +9445,9 @@ fn bad_crc32() -> Result<()> { ----- stderr ----- Resolved 7 packages in [TIME] - × Failed to download `osqp @ https://files.pythonhosted.org/packages/00/04/5959347582ab970e9b922f27585d34f7c794ed01125dac26fb4e7dd80205/osqp-1.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl` - ├─▶ Failed to extract archive: osqp-1.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - ╰─▶ Bad uncompressed size (got 0007b829, expected 0007b828) for file: osqp/ext_builtin.cpython-311-x86_64-linux-gnu.so + error: Failed to download `osqp @ https://files.pythonhosted.org/packages/00/04/5959347582ab970e9b922f27585d34f7c794ed01125dac26fb4e7dd80205/osqp-1.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl` + Caused by: Failed to extract archive: osqp-1.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + Caused by: Bad uncompressed size (got 0007b829, expected 0007b828) for file: osqp/ext_builtin.cpython-311-x86_64-linux-gnu.so " ); @@ -9601,17 +9603,17 @@ fn cyclic_build_dependency() { .arg("--index-strategy") .arg("unsafe-best-match") .arg("--no-binary") - .arg("circular-one"), @r###" + .arg("circular-one"), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- Resolved 1 package in [TIME] - × Failed to download and build `circular-one==0.2.0` - ├─▶ Failed to install requirements from `build-system.requires` - ╰─▶ Cyclic build dependency detected for `circular-one` - "### + error: Failed to download and build `circular-one==0.2.0` + Caused by: Failed to install requirements from `build-system.requires` + Caused by: Cyclic build dependency detected for `circular-one` + " ); // Installing without `--no-binary circular-one` should succeed, since we can use the wheel. @@ -11529,14 +11531,14 @@ fn pep_751_hash_mismatch() -> Result<()> { ----- stdout ----- ----- stderr ----- - × Failed to read `iniconfig @ file://[TEMP_DIR]/iniconfig-2.0.0-py3-none-any.whl` - ╰─▶ Hash mismatch for `iniconfig @ file://[TEMP_DIR]/iniconfig-2.0.0-py3-none-any.whl` - - Expected: - sha256:c5185871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374 - - Computed: - sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374 + error: Failed to read `iniconfig @ file://[TEMP_DIR]/iniconfig-2.0.0-py3-none-any.whl` + Caused by: Hash mismatch for `iniconfig @ file://[TEMP_DIR]/iniconfig-2.0.0-py3-none-any.whl` + + Expected: + sha256:c5185871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374 + + Computed: + sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374 " ); @@ -12375,9 +12377,9 @@ fn reject_invalid_archive_member_names() { ----- stderr ----- Resolved 1 package in [TIME] - × Failed to download `cbwheeldiff2==0.0.1` - ├─▶ Failed to extract archive: cbwheeldiff2-0.0.1-py2.py3-none-any.whl - ╰─▶ Archive contains unacceptable filename: cbwheeldiff2-0.0.1.dist-info/RECORD� + error: Failed to download `cbwheeldiff2==0.0.1` + Caused by: Failed to extract archive: cbwheeldiff2-0.0.1-py2.py3-none-any.whl + Caused by: Archive contains unacceptable filename: cbwheeldiff2-0.0.1.dist-info/RECORD� " ); } @@ -12394,9 +12396,9 @@ fn reject_invalid_streaming_zip() { ----- stderr ----- Resolved 1 package in [TIME] - × Failed to download `cbwheelstreamtest==0.0.1` - ├─▶ Failed to extract archive: cbwheelstreamtest-0.0.1-py2.py3-none-any.whl - ╰─▶ ZIP file contains multiple entries with different contents for: cbwheelstreamtest/__init__.py + error: Failed to download `cbwheelstreamtest==0.0.1` + Caused by: Failed to extract archive: cbwheelstreamtest-0.0.1-py2.py3-none-any.whl + Caused by: ZIP file contains multiple entries with different contents for: cbwheelstreamtest/__init__.py " ); } @@ -12413,9 +12415,9 @@ fn reject_invalid_double_zip() { ----- stderr ----- Resolved 2 packages in [TIME] - × Failed to download `cbwheelziptest==0.0.2` - ├─▶ Failed to extract archive: cbwheelziptest-0.0.2-py2.py3-none-any.whl - ╰─▶ ZIP file contains trailing contents after the end-of-central-directory record + error: Failed to download `cbwheelziptest==0.0.2` + Caused by: Failed to extract archive: cbwheelziptest-0.0.2-py2.py3-none-any.whl + Caused by: ZIP file contains trailing contents after the end-of-central-directory record " ); } @@ -12432,10 +12434,10 @@ fn reject_invalid_central_directory_offset() { ----- stderr ----- Resolved 1 package in [TIME] - × Failed to download `attrs @ https://pub-c6f28d316acd406eae43501e51ad30fa.r2.dev/zip1/attrs-25.3.0-py3-none-any.whl` - ├─▶ Failed to extract archive: attrs-25.3.0-py3-none-any.whl - ├─▶ Invalid zip file structure - ╰─▶ the end of central directory offset (0xf0d9) did not match the actual offset (0xf9ac) + error: Failed to download `attrs @ https://pub-c6f28d316acd406eae43501e51ad30fa.r2.dev/zip1/attrs-25.3.0-py3-none-any.whl` + Caused by: Failed to extract archive: attrs-25.3.0-py3-none-any.whl + Caused by: Invalid zip file structure + Caused by: the end of central directory offset (0xf0d9) did not match the actual offset (0xf9ac) " ); } @@ -12452,9 +12454,9 @@ fn reject_invalid_crc32_mismatch() { ----- stderr ----- Resolved 1 package in [TIME] - × Failed to download `attrs @ https://pub-c6f28d316acd406eae43501e51ad30fa.r2.dev/zip2/attrs-25.3.0-py3-none-any.whl` - ├─▶ Failed to extract archive: attrs-25.3.0-py3-none-any.whl - ╰─▶ Bad uncompressed size (got 0000001b, expected 0000000c) for file: sitecustomize.py + error: Failed to download `attrs @ https://pub-c6f28d316acd406eae43501e51ad30fa.r2.dev/zip2/attrs-25.3.0-py3-none-any.whl` + Caused by: Failed to extract archive: attrs-25.3.0-py3-none-any.whl + Caused by: Bad uncompressed size (got 0000001b, expected 0000000c) for file: sitecustomize.py " ); } @@ -12471,9 +12473,9 @@ fn reject_invalid_crc32_non_data_descriptor() { ----- stderr ----- Resolved 1 package in [TIME] - × Failed to download `attrs @ https://pub-c6f28d316acd406eae43501e51ad30fa.r2.dev/zip3/attrs-25.3.0-py3-none-any.whl` - ├─▶ Failed to extract archive: attrs-25.3.0-py3-none-any.whl - ╰─▶ Bad uncompressed size (got 0000001b, expected 0000000c) for file: sitecustomize.py + error: Failed to download `attrs @ https://pub-c6f28d316acd406eae43501e51ad30fa.r2.dev/zip3/attrs-25.3.0-py3-none-any.whl` + Caused by: Failed to extract archive: attrs-25.3.0-py3-none-any.whl + Caused by: Bad uncompressed size (got 0000001b, expected 0000000c) for file: sitecustomize.py " ); } @@ -12489,9 +12491,9 @@ fn reject_invalid_duplicate_extra_field() { ----- stdout ----- ----- stderr ----- - × Failed to download `attrs @ https://pub-c6f28d316acd406eae43501e51ad30fa.r2.dev/zip4/attrs-25.3.0-py3-none-any.whl` - ├─▶ Failed to unzip wheel: attrs-25.3.0-py3-none-any.whl - ╰─▶ an extra field with id 0x7075 was duplicated in the header + error: Failed to download `attrs @ https://pub-c6f28d316acd406eae43501e51ad30fa.r2.dev/zip4/attrs-25.3.0-py3-none-any.whl` + Caused by: Failed to unzip wheel: attrs-25.3.0-py3-none-any.whl + Caused by: an extra field with id 0x7075 was duplicated in the header " ); } @@ -12508,9 +12510,9 @@ fn reject_invalid_short_usize() { ----- stderr ----- Resolved 1 package in [TIME] - × Failed to download `attrs @ https://pub-c6f28d316acd406eae43501e51ad30fa.r2.dev/zip5/attrs-25.3.0-py3-none-any.whl` - ├─▶ Failed to extract archive: attrs-25.3.0-py3-none-any.whl - ╰─▶ Bad CRC (got 5100f20e, expected de0ffd6e) for file: attr/_make.py + error: Failed to download `attrs @ https://pub-c6f28d316acd406eae43501e51ad30fa.r2.dev/zip5/attrs-25.3.0-py3-none-any.whl` + Caused by: Failed to extract archive: attrs-25.3.0-py3-none-any.whl + Caused by: Bad CRC (got 5100f20e, expected de0ffd6e) for file: attr/_make.py " ); } @@ -12526,9 +12528,9 @@ fn reject_invalid_chained_extra_field() { ----- stdout ----- ----- stderr ----- - × Failed to download `attrs @ https://pub-c6f28d316acd406eae43501e51ad30fa.r2.dev/zip6/attrs-25.3.0-py3-none-any.whl` - ├─▶ Failed to unzip wheel: attrs-25.3.0-py3-none-any.whl - ╰─▶ an extra field with id 0x7075 was duplicated in the header + error: Failed to download `attrs @ https://pub-c6f28d316acd406eae43501e51ad30fa.r2.dev/zip6/attrs-25.3.0-py3-none-any.whl` + Caused by: Failed to unzip wheel: attrs-25.3.0-py3-none-any.whl + Caused by: an extra field with id 0x7075 was duplicated in the header " ); } @@ -12544,9 +12546,9 @@ fn reject_invalid_short_usize_zip64() { ----- stdout ----- ----- stderr ----- - × Failed to download `attrs @ https://pub-c6f28d316acd406eae43501e51ad30fa.r2.dev/zip7/attrs-25.3.0-py3-none-any.whl` - ├─▶ Failed to unzip wheel: attrs-25.3.0-py3-none-any.whl - ╰─▶ zip64 extended information field was too long: expected 16 bytes, but 0 bytes were provided + error: Failed to download `attrs @ https://pub-c6f28d316acd406eae43501e51ad30fa.r2.dev/zip7/attrs-25.3.0-py3-none-any.whl` + Caused by: Failed to unzip wheel: attrs-25.3.0-py3-none-any.whl + Caused by: zip64 extended information field was too long: expected 16 bytes, but 0 bytes were provided " ); } @@ -12723,15 +12725,16 @@ fn pip_install_build_dependencies_respect_locked_versions() -> Result<()> { ----- stderr ----- Resolved [N] packages in [TIME] - × Failed to build `child @ file://[TEMP_DIR]/child` - ├─▶ The build backend returned an error - ╰─▶ Call to `build_backend.build_wheel` failed (exit status: 1) + error: Failed to build `child @ file://[TEMP_DIR]/child` + Caused by: The build backend returned an error + Caused by: Call to `build_backend.build_wheel` failed (exit status: 1) + + [stderr] + Expected `anyio` version 3.0 but got 4.3.0 + + hint: This usually indicates a problem with the package or the build environment. - [stderr] - Expected `anyio` version 3.0 but got 4.3.0 - - hint: This usually indicates a problem with the package or the build environment. - help: `child` was included because `parent` (v0.1.0) depends on `child` + hint: `child` was included because `parent` (v0.1.0) depends on `child` "); // Now constrain the `anyio` build dependency to match the runtime @@ -12792,15 +12795,16 @@ fn pip_install_build_dependencies_respect_locked_versions() -> Result<()> { ----- stderr ----- warning: The `extra-build-dependencies` option is experimental and may change without warning. Pass `--preview-features extra-build-dependencies` to disable this warning. Resolved [N] packages in [TIME] - × Failed to build `child @ file://[TEMP_DIR]/child` - ├─▶ The build backend returned an error - ╰─▶ Call to `build_backend.build_wheel` failed (exit status: 1) + error: Failed to build `child @ file://[TEMP_DIR]/child` + Caused by: The build backend returned an error + Caused by: Call to `build_backend.build_wheel` failed (exit status: 1) + + [stderr] + Expected `anyio` version 4.0 but got 3.7.1 + + hint: This usually indicates a problem with the package or the build environment. - [stderr] - Expected `anyio` version 4.0 but got 3.7.1 - - hint: This usually indicates a problem with the package or the build environment. - help: `child` was included because `parent` (v0.1.0) depends on `child` + hint: `child` was included because `parent` (v0.1.0) depends on `child` "); uv_snapshot!(context.filters(), context.pip_install().arg(".") @@ -13373,8 +13377,8 @@ fn build_backend_wrong_wheel_platform() -> Result<()> { ----- stderr ----- Resolved 1 package in [TIME] - × Failed to build `py313 @ file://[TEMP_DIR]/child` - ╰─▶ The built wheel `py313-0.1.0-py313-none-any.whl` is not compatible with the target Python 3.12 on [ARCH] [OS]. Consider using `--no-build` to disable building wheels. + error: Failed to build `py313 @ file://[TEMP_DIR]/child` + Caused by: The built wheel `py313-0.1.0-py313-none-any.whl` is not compatible with the target Python 3.12 on [ARCH] [OS]. Consider using `--no-build` to disable building wheels. "); // A python 3.12 host with a 3.13 explicit target works. @@ -13401,8 +13405,8 @@ fn build_backend_wrong_wheel_platform() -> Result<()> { ----- stderr ----- Resolved 1 package in [TIME] - × Failed to build `py313 @ file://[TEMP_DIR]/child` - ╰─▶ The built wheel `py313-0.1.0-py313-none-any.whl` is not compatible with the target Python 3.12 on [ARCH] [OS]. Consider using `--no-build` to disable building wheels. + error: Failed to build `py313 @ file://[TEMP_DIR]/child` + Caused by: The built wheel `py313-0.1.0-py313-none-any.whl` is not compatible with the target Python 3.12 on [ARCH] [OS]. Consider using `--no-build` to disable building wheels. "); // Create a project that will resolve to a non-latest version of `anyio` @@ -13450,10 +13454,10 @@ fn build_backend_wrong_wheel_platform() -> Result<()> { ----- stderr ----- Resolved 1 package in [TIME] - × Failed to build `parent @ file://[TEMP_DIR]/` - ├─▶ Failed to install requirements from `build-system.requires` - ├─▶ Failed to build `py313 @ file://[TEMP_DIR]/child` - ╰─▶ The built wheel `py313-0.1.0-py313-none-any.whl` is not compatible with the current Python 3.12 on [ARCH] [OS] + error: Failed to build `parent @ file://[TEMP_DIR]/` + Caused by: Failed to install requirements from `build-system.requires` + Caused by: Failed to build `py313 @ file://[TEMP_DIR]/child` + Caused by: The built wheel `py313-0.1.0-py313-none-any.whl` is not compatible with the current Python 3.12 on [ARCH] [OS] "); Ok(()) diff --git a/crates/uv/tests/it/pip_install_scenarios.rs b/crates/uv/tests/it/pip_install_scenarios.rs index b2e43fa88..17632700a 100644 --- a/crates/uv/tests/it/pip_install_scenarios.rs +++ b/crates/uv/tests/it/pip_install_scenarios.rs @@ -51,8 +51,8 @@ fn requires_exact_version_does_not_exist() { ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because there is no version of package-a==2.0.0 and you require package-a==2.0.0, we can conclude that your requirements are unsatisfiable. + error: No solution found when resolving dependencies: + Caused by: Because there is no version of package-a==2.0.0 and you require package-a==2.0.0, we can conclude that your requirements are unsatisfiable. "); context.assert_not_installed("requires_exact_version_does_not_exist_a"); @@ -87,8 +87,8 @@ fn requires_greater_version_does_not_exist() { ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because only package-a<=1.0.0 is available and you require package-a>1.0.0, we can conclude that your requirements are unsatisfiable. + error: No solution found when resolving dependencies: + Caused by: Because only package-a<=1.0.0 is available and you require package-a>1.0.0, we can conclude that your requirements are unsatisfiable. "); context.assert_not_installed("requires_greater_version_does_not_exist_a"); @@ -124,8 +124,8 @@ fn requires_less_version_does_not_exist() { ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because only package-a>=2.0.0 is available and you require package-a<2.0.0, we can conclude that your requirements are unsatisfiable. + error: No solution found when resolving dependencies: + Caused by: Because only package-a>=2.0.0 is available and you require package-a<2.0.0, we can conclude that your requirements are unsatisfiable. "); context.assert_not_installed("requires_less_version_does_not_exist_a"); @@ -157,8 +157,8 @@ fn requires_package_does_not_exist() { ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because package-a was not found in the package registry and you require package-a, we can conclude that your requirements are unsatisfiable. + error: No solution found when resolving dependencies: + Caused by: Because package-a was not found in the package registry and you require package-a, we can conclude that your requirements are unsatisfiable. "); context.assert_not_installed("requires_package_does_not_exist_a"); @@ -194,9 +194,9 @@ fn transitive_requires_package_does_not_exist() { ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because package-b was not found in the package registry and package-a==1.0.0 depends on package-b, we can conclude that package-a==1.0.0 cannot be used. - And because only package-a==1.0.0 is available and you require package-a, we can conclude that your requirements are unsatisfiable. + error: No solution found when resolving dependencies: + Caused by: Because package-b was not found in the package registry and package-a==1.0.0 depends on package-b, we can conclude that package-a==1.0.0 cannot be used. + And because only package-a==1.0.0 is available and you require package-a, we can conclude that your requirements are unsatisfiable. "); context.assert_not_installed("transitive_requires_package_does_not_exist_a"); @@ -281,27 +281,27 @@ fn dependency_excludes_non_contiguous_range_of_compatible_versions() { ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because package-a==1.0.0 depends on package-b==1.0.0 and only the following versions of package-a are available: - package-a==1.0.0 - package-a>=2.0.0 - we can conclude that package-a<2.0.0 depends on package-b==1.0.0. - And because only package-a<=3.0.0 is available, we can conclude that package-a<2.0.0 depends on package-b==1.0.0. (1) - - Because only the following versions of package-c are available: - package-c==1.0.0 - package-c==2.0.0 - and package-c==1.0.0 depends on package-a<2.0.0, we can conclude that package-c<2.0.0 depends on package-a<2.0.0. - And because package-c==2.0.0 depends on package-a>=3.0.0, we can conclude that all versions of package-c depend on one of: - package-a<2.0.0 - package-a>=3.0.0 - - And because we know from (1) that package-a<2.0.0 depends on package-b==1.0.0, we can conclude that package-a!=3.0.0, package-b!=1.0.0, all versions of package-c are incompatible. - And because package-a==3.0.0 depends on package-b==3.0.0, we can conclude that all versions of package-c depend on one of: - package-b<=1.0.0 - package-b>=3.0.0 - - And because you require package-b>=2.0.0,<3.0.0 and package-c, we can conclude that your requirements are unsatisfiable. + error: No solution found when resolving dependencies: + Caused by: Because package-a==1.0.0 depends on package-b==1.0.0 and only the following versions of package-a are available: + package-a==1.0.0 + package-a>=2.0.0 + we can conclude that package-a<2.0.0 depends on package-b==1.0.0. + And because only package-a<=3.0.0 is available, we can conclude that package-a<2.0.0 depends on package-b==1.0.0. (1) + + Because only the following versions of package-c are available: + package-c==1.0.0 + package-c==2.0.0 + and package-c==1.0.0 depends on package-a<2.0.0, we can conclude that package-c<2.0.0 depends on package-a<2.0.0. + And because package-c==2.0.0 depends on package-a>=3.0.0, we can conclude that all versions of package-c depend on one of: + package-a<2.0.0 + package-a>=3.0.0 + + And because we know from (1) that package-a<2.0.0 depends on package-b==1.0.0, we can conclude that package-a!=3.0.0, package-b!=1.0.0, all versions of package-c are incompatible. + And because package-a==3.0.0 depends on package-b==3.0.0, we can conclude that all versions of package-c depend on one of: + package-b<=1.0.0 + package-b>=3.0.0 + + And because you require package-b>=2.0.0,<3.0.0 and package-c, we can conclude that your requirements are unsatisfiable. "); // Only the `2.x` versions of `a` are available since `a==1.0.0` and `a==3.0.0` require incompatible versions of `b`, but all available versions of `c` exclude that range of `a` so resolution fails. @@ -384,27 +384,27 @@ fn dependency_excludes_range_of_compatible_versions() { ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because package-a==1.0.0 depends on package-b==1.0.0 and only the following versions of package-a are available: - package-a==1.0.0 - package-a>=2.0.0 - we can conclude that package-a<2.0.0 depends on package-b==1.0.0. - And because only package-a<=3.0.0 is available, we can conclude that package-a<2.0.0 depends on package-b==1.0.0. (1) - - Because only the following versions of package-c are available: - package-c==1.0.0 - package-c==2.0.0 - and package-c==1.0.0 depends on package-a<2.0.0, we can conclude that package-c<2.0.0 depends on package-a<2.0.0. - And because package-c==2.0.0 depends on package-a>=3.0.0, we can conclude that all versions of package-c depend on one of: - package-a<2.0.0 - package-a>=3.0.0 - - And because we know from (1) that package-a<2.0.0 depends on package-b==1.0.0, we can conclude that package-a!=3.0.0, package-b!=1.0.0, all versions of package-c are incompatible. - And because package-a==3.0.0 depends on package-b==3.0.0, we can conclude that all versions of package-c depend on one of: - package-b<=1.0.0 - package-b>=3.0.0 - - And because you require package-b>=2.0.0,<3.0.0 and package-c, we can conclude that your requirements are unsatisfiable. + error: No solution found when resolving dependencies: + Caused by: Because package-a==1.0.0 depends on package-b==1.0.0 and only the following versions of package-a are available: + package-a==1.0.0 + package-a>=2.0.0 + we can conclude that package-a<2.0.0 depends on package-b==1.0.0. + And because only package-a<=3.0.0 is available, we can conclude that package-a<2.0.0 depends on package-b==1.0.0. (1) + + Because only the following versions of package-c are available: + package-c==1.0.0 + package-c==2.0.0 + and package-c==1.0.0 depends on package-a<2.0.0, we can conclude that package-c<2.0.0 depends on package-a<2.0.0. + And because package-c==2.0.0 depends on package-a>=3.0.0, we can conclude that all versions of package-c depend on one of: + package-a<2.0.0 + package-a>=3.0.0 + + And because we know from (1) that package-a<2.0.0 depends on package-b==1.0.0, we can conclude that package-a!=3.0.0, package-b!=1.0.0, all versions of package-c are incompatible. + And because package-a==3.0.0 depends on package-b==3.0.0, we can conclude that all versions of package-c depend on one of: + package-b<=1.0.0 + package-b>=3.0.0 + + And because you require package-b>=2.0.0,<3.0.0 and package-c, we can conclude that your requirements are unsatisfiable. "); // Only the `2.x` versions of `a` are available since `a==1.0.0` and `a==3.0.0` require incompatible versions of `b`, but all available versions of `c` exclude that range of `a` so resolution fails. @@ -457,23 +457,23 @@ fn excluded_only_compatible_version() { ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because only the following versions of package-a are available: - package-a==1.0.0 - package-a==2.0.0 - package-a==3.0.0 - and package-a==1.0.0 depends on package-b==1.0.0, we can conclude that package-a<2.0.0 depends on package-b==1.0.0. - And because package-a==3.0.0 depends on package-b==3.0.0, we can conclude that all of: - package-a<2.0.0 - package-a>2.0.0 - depend on one of: - package-b==1.0.0 - package-b==3.0.0 - - And because you require one of: - package-a<2.0.0 - package-a>2.0.0 - and package-b>=2.0.0,<3.0.0, we can conclude that your requirements are unsatisfiable. + error: No solution found when resolving dependencies: + Caused by: Because only the following versions of package-a are available: + package-a==1.0.0 + package-a==2.0.0 + package-a==3.0.0 + and package-a==1.0.0 depends on package-b==1.0.0, we can conclude that package-a<2.0.0 depends on package-b==1.0.0. + And because package-a==3.0.0 depends on package-b==3.0.0, we can conclude that all of: + package-a<2.0.0 + package-a>2.0.0 + depend on one of: + package-b==1.0.0 + package-b==3.0.0 + + And because you require one of: + package-a<2.0.0 + package-a>2.0.0 + and package-b>=2.0.0,<3.0.0, we can conclude that your requirements are unsatisfiable. "); // Only `a==1.2.0` is available since `a==1.0.0` and `a==3.0.0` require incompatible versions of `b`. The user has excluded that version of `a` so resolution fails. @@ -509,11 +509,11 @@ fn excluded_only_version() { ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because only package-a==1.0.0 is available and you require one of: - package-a<1.0.0 - package-a>1.0.0 - we can conclude that your requirements are unsatisfiable. + error: No solution found when resolving dependencies: + Caused by: Because only package-a==1.0.0 is available and you require one of: + package-a<1.0.0 + package-a>1.0.0 + we can conclude that your requirements are unsatisfiable. "); // Only `a==1.0.0` is available but the user excluded it. @@ -724,10 +724,10 @@ fn extra_incompatible_with_extra() { ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because only package-a[extra-b]==1.0.0 is available and package-a[extra-b]==1.0.0 depends on package-b==1.0.0, we can conclude that all versions of package-a[extra-b] depend on package-b==1.0.0. - And because package-a[extra-c]==1.0.0 depends on package-b==2.0.0 and only package-a[extra-c]==1.0.0 is available, we can conclude that all versions of package-a[extra-b] and all versions of package-a[extra-c] are incompatible. - And because you require package-a[extra-b] and package-a[extra-c], we can conclude that your requirements are unsatisfiable. + error: No solution found when resolving dependencies: + Caused by: Because only package-a[extra-b]==1.0.0 is available and package-a[extra-b]==1.0.0 depends on package-b==1.0.0, we can conclude that all versions of package-a[extra-b] depend on package-b==1.0.0. + And because package-a[extra-c]==1.0.0 depends on package-b==2.0.0 and only package-a[extra-c]==1.0.0 is available, we can conclude that all versions of package-a[extra-b] and all versions of package-a[extra-c] are incompatible. + And because you require package-a[extra-b] and package-a[extra-c], we can conclude that your requirements are unsatisfiable. "); // Because both `extra_b` and `extra_c` are requested and they require incompatible versions of `b`, `a` cannot be installed. @@ -772,9 +772,9 @@ fn extra_incompatible_with_root() { ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because only package-a[extra]==1.0.0 is available and package-a[extra]==1.0.0 depends on package-b==1.0.0, we can conclude that all versions of package-a[extra] depend on package-b==1.0.0. - And because you require package-a[extra] and package-b==2.0.0, we can conclude that your requirements are unsatisfiable. + error: No solution found when resolving dependencies: + Caused by: Because only package-a[extra]==1.0.0 is available and package-a[extra]==1.0.0 depends on package-b==1.0.0, we can conclude that all versions of package-a[extra] depend on package-b==1.0.0. + And because you require package-a[extra] and package-b==2.0.0, we can conclude that your requirements are unsatisfiable. "); // Because the user requested `b==2.0.0` but the requested extra requires `b==1.0.0`, the dependencies cannot be satisfied. @@ -951,8 +951,8 @@ fn direct_incompatible_versions() { ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because you require package-a==1.0.0 and package-a==2.0.0, we can conclude that your requirements are unsatisfiable. + error: No solution found when resolving dependencies: + Caused by: Because you require package-a==1.0.0 and package-a==2.0.0, we can conclude that your requirements are unsatisfiable. "); context.assert_not_installed("direct_incompatible_versions_a"); @@ -991,9 +991,9 @@ fn transitive_incompatible_versions() { ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because package-a==1.0.0 depends on package-b==1.0.0 and package-b==2.0.0, we can conclude that package-a==1.0.0 cannot be used. - And because you require package-a==1.0.0, we can conclude that your requirements are unsatisfiable. + error: No solution found when resolving dependencies: + Caused by: Because package-a==1.0.0 depends on package-b==1.0.0 and package-b==2.0.0, we can conclude that package-a==1.0.0 cannot be used. + And because you require package-a==1.0.0, we can conclude that your requirements are unsatisfiable. "); context.assert_not_installed("transitive_incompatible_versions_a"); @@ -1035,9 +1035,9 @@ fn transitive_incompatible_with_root_version() { ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because only package-a==1.0.0 is available and package-a==1.0.0 depends on package-b==2.0.0, we can conclude that all versions of package-a depend on package-b==2.0.0. - And because you require package-a and package-b==1.0.0, we can conclude that your requirements are unsatisfiable. + error: No solution found when resolving dependencies: + Caused by: Because only package-a==1.0.0 is available and package-a==1.0.0 depends on package-b==2.0.0, we can conclude that all versions of package-a depend on package-b==2.0.0. + And because you require package-a and package-b==1.0.0, we can conclude that your requirements are unsatisfiable. "); context.assert_not_installed("transitive_incompatible_with_root_version_a"); @@ -1084,10 +1084,10 @@ fn transitive_incompatible_with_transitive() { ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because only package-a==1.0.0 is available and package-a==1.0.0 depends on package-c==1.0.0, we can conclude that all versions of package-a depend on package-c==1.0.0. - And because package-b==1.0.0 depends on package-c==2.0.0 and only package-b==1.0.0 is available, we can conclude that all versions of package-a and all versions of package-b are incompatible. - And because you require package-a and package-b, we can conclude that your requirements are unsatisfiable. + error: No solution found when resolving dependencies: + Caused by: Because only package-a==1.0.0 is available and package-a==1.0.0 depends on package-c==1.0.0, we can conclude that all versions of package-a depend on package-c==1.0.0. + And because package-b==1.0.0 depends on package-c==2.0.0 and only package-b==1.0.0 is available, we can conclude that all versions of package-a and all versions of package-b are incompatible. + And because you require package-a and package-b, we can conclude that your requirements are unsatisfiable. "); context.assert_not_installed("transitive_incompatible_with_transitive_a"); @@ -1162,8 +1162,8 @@ fn local_greater_than() { ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because only package-a==1.2.3+foo is available and you require package-a>1.2.3, we can conclude that your requirements are unsatisfiable. + error: No solution found when resolving dependencies: + Caused by: Because only package-a==1.2.3+foo is available and you require package-a>1.2.3, we can conclude that your requirements are unsatisfiable. "); context.assert_not_installed("local_greater_than_a"); @@ -1237,8 +1237,8 @@ fn local_less_than() { ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because only package-a==1.2.3+foo is available and you require package-a<1.2.3, we can conclude that your requirements are unsatisfiable. + error: No solution found when resolving dependencies: + Caused by: Because only package-a==1.2.3+foo is available and you require package-a<1.2.3, we can conclude that your requirements are unsatisfiable. "); context.assert_not_installed("local_less_than_a"); @@ -1454,9 +1454,9 @@ fn local_transitive_conflicting() { ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because only package-a==1.0.0 is available and package-a==1.0.0 depends on package-b==2.0.0+bar, we can conclude that all versions of package-a depend on package-b==2.0.0+bar. - And because you require package-a and package-b==2.0.0+foo, we can conclude that your requirements are unsatisfiable. + error: No solution found when resolving dependencies: + Caused by: Because only package-a==1.0.0 is available and package-a==1.0.0 depends on package-b==2.0.0+bar, we can conclude that all versions of package-a depend on package-b==2.0.0+bar. + And because you require package-a and package-b==2.0.0+foo, we can conclude that your requirements are unsatisfiable. "); context.assert_not_installed("local_transitive_conflicting_a"); @@ -1596,9 +1596,9 @@ fn local_transitive_greater_than() { ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because only package-a==1.0.0 is available and package-a==1.0.0 depends on package-b>2.0.0, we can conclude that all versions of package-a depend on package-b>2.0.0. - And because you require package-a and package-b==2.0.0+foo, we can conclude that your requirements are unsatisfiable. + error: No solution found when resolving dependencies: + Caused by: Because only package-a==1.0.0 is available and package-a==1.0.0 depends on package-b>2.0.0, we can conclude that all versions of package-a depend on package-b>2.0.0. + And because you require package-a and package-b==2.0.0+foo, we can conclude that your requirements are unsatisfiable. "); context.assert_not_installed("local_transitive_greater_than_a"); @@ -1690,9 +1690,9 @@ fn local_transitive_less_than() { ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because only package-a==1.0.0 is available and package-a==1.0.0 depends on package-b<2.0.0, we can conclude that all versions of package-a depend on package-b<2.0.0. - And because you require package-a and package-b==2.0.0+foo, we can conclude that your requirements are unsatisfiable. + error: No solution found when resolving dependencies: + Caused by: Because only package-a==1.0.0 is available and package-a==1.0.0 depends on package-b<2.0.0, we can conclude that all versions of package-a depend on package-b<2.0.0. + And because you require package-a and package-b==2.0.0+foo, we can conclude that your requirements are unsatisfiable. "); context.assert_not_installed("local_transitive_less_than_a"); @@ -1856,8 +1856,8 @@ fn post_equal_not_available() { ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because there is no version of package-a==1.2.3.post0 and you require package-a==1.2.3.post0, we can conclude that your requirements are unsatisfiable. + error: No solution found when resolving dependencies: + Caused by: Because there is no version of package-a==1.2.3.post0 and you require package-a==1.2.3.post0, we can conclude that your requirements are unsatisfiable. "); context.assert_not_installed("post_equal_not_available_a"); @@ -1971,8 +1971,8 @@ fn post_greater_than_post_not_available() { ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because only package-a<=1.2.3.post1 is available and you require package-a>=1.2.3.post3, we can conclude that your requirements are unsatisfiable. + error: No solution found when resolving dependencies: + Caused by: Because only package-a<=1.2.3.post1 is available and you require package-a>=1.2.3.post3, we can conclude that your requirements are unsatisfiable. "); context.assert_not_installed("post_greater_than_post_not_available_a"); @@ -2045,8 +2045,8 @@ fn post_greater_than() { ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because only package-a==1.2.3.post1 is available and you require package-a>1.2.3, we can conclude that your requirements are unsatisfiable. + error: No solution found when resolving dependencies: + Caused by: Because only package-a==1.2.3.post1 is available and you require package-a>1.2.3, we can conclude that your requirements are unsatisfiable. "); context.assert_not_installed("post_greater_than_a"); @@ -2080,8 +2080,8 @@ fn post_less_than_or_equal() { ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because only package-a==1.2.3.post1 is available and you require package-a<=1.2.3, we can conclude that your requirements are unsatisfiable. + error: No solution found when resolving dependencies: + Caused by: Because only package-a==1.2.3.post1 is available and you require package-a<=1.2.3, we can conclude that your requirements are unsatisfiable. "); context.assert_not_installed("post_less_than_or_equal_a"); @@ -2115,8 +2115,8 @@ fn post_less_than() { ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because only package-a==1.2.3.post1 is available and you require package-a<1.2.3, we can conclude that your requirements are unsatisfiable. + error: No solution found when resolving dependencies: + Caused by: Because only package-a==1.2.3.post1 is available and you require package-a<1.2.3, we can conclude that your requirements are unsatisfiable. "); context.assert_not_installed("post_less_than_a"); @@ -2151,8 +2151,8 @@ fn post_local_greater_than_post() { ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because only package-a<=1.2.3.post1+local is available and you require package-a>=1.2.3.post2, we can conclude that your requirements are unsatisfiable. + error: No solution found when resolving dependencies: + Caused by: Because only package-a<=1.2.3.post1+local is available and you require package-a>=1.2.3.post2, we can conclude that your requirements are unsatisfiable. "); context.assert_not_installed("post_local_greater_than_post_a"); @@ -2187,8 +2187,8 @@ fn post_local_greater_than() { ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because only package-a<=1.2.3.post1+local is available and you require package-a>1.2.3, we can conclude that your requirements are unsatisfiable. + error: No solution found when resolving dependencies: + Caused by: Because only package-a<=1.2.3.post1+local is available and you require package-a>1.2.3, we can conclude that your requirements are unsatisfiable. "); context.assert_not_installed("post_local_greater_than_a"); @@ -2222,8 +2222,8 @@ fn post_simple() { ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because there is no version of package-a==1.2.3 and you require package-a==1.2.3, we can conclude that your requirements are unsatisfiable. + error: No solution found when resolving dependencies: + Caused by: Because there is no version of package-a==1.2.3 and you require package-a==1.2.3, we can conclude that your requirements are unsatisfiable. "); context.assert_not_installed("post_simple_a"); @@ -2382,10 +2382,10 @@ fn package_only_prereleases_in_range() { ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because only package-a<=0.1.0 is available and you require package-a>0.1.0, we can conclude that your requirements are unsatisfiable. - - hint: Pre-releases are available for `package-a` in the requested range (e.g., 1.0.0a1), but pre-releases weren't enabled (try: `--prerelease=allow`) + error: No solution found when resolving dependencies: + Caused by: Because only package-a<=0.1.0 is available and you require package-a>0.1.0, we can conclude that your requirements are unsatisfiable. + + hint: Pre-releases are available for `package-a` in the requested range (e.g., 1.0.0a1), but pre-releases weren't enabled (try: `--prerelease=allow`) "); // Since there are stable versions of `a` available, prerelease versions should not be selected without explicit opt-in. @@ -2871,11 +2871,11 @@ fn transitive_package_only_prereleases_in_range() { ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because only package-b<=0.1 is available and package-a==0.1.0 depends on package-b>0.1, we can conclude that package-a==0.1.0 cannot be used. - And because only package-a==0.1.0 is available and you require package-a, we can conclude that your requirements are unsatisfiable. - - hint: Pre-releases are available for `package-b` in the requested range (e.g., 1.0.0a1), but pre-releases weren't enabled (try: `--prerelease=allow`) + error: No solution found when resolving dependencies: + Caused by: Because only package-b<=0.1 is available and package-a==0.1.0 depends on package-b>0.1, we can conclude that package-a==0.1.0 cannot be used. + And because only package-a==0.1.0 is available and you require package-a, we can conclude that your requirements are unsatisfiable. + + hint: Pre-releases are available for `package-b` in the requested range (e.g., 1.0.0a1), but pre-releases weren't enabled (try: `--prerelease=allow`) "); // Since there are stable versions of `b` available, the prerelease version should not be selected without explicit opt-in. The available version is excluded by the range requested by the user. @@ -2994,24 +2994,24 @@ fn transitive_prerelease_and_stable_dependency_many_versions_holes() { ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because only the following versions of package-c are available: - package-c<=1.0.0 - package-c>=2.0.0a5,<=2.0.0a7 - package-c==2.0.0b1 - package-c>=2.0.0b5 - and package-a==1.0.0 depends on one of: - package-c>1.0.0,<2.0.0a5 - package-c>2.0.0a7,<2.0.0b1 - package-c>2.0.0b1,<2.0.0b5 - we can conclude that package-a==1.0.0 cannot be used. - And because only package-a==1.0.0 is available and you require package-a, we can conclude that your requirements are unsatisfiable. - - hint: `package-c` was requested with a pre-release marker (e.g., all of: - package-c>1.0.0,<2.0.0a5 - package-c>2.0.0a7,<2.0.0b1 - package-c>2.0.0b1,<2.0.0b5 - ), but pre-releases weren't enabled (try: `--prerelease=allow`) + error: No solution found when resolving dependencies: + Caused by: Because only the following versions of package-c are available: + package-c<=1.0.0 + package-c>=2.0.0a5,<=2.0.0a7 + package-c==2.0.0b1 + package-c>=2.0.0b5 + and package-a==1.0.0 depends on one of: + package-c>1.0.0,<2.0.0a5 + package-c>2.0.0a7,<2.0.0b1 + package-c>2.0.0b1,<2.0.0b5 + we can conclude that package-a==1.0.0 cannot be used. + And because only package-a==1.0.0 is available and you require package-a, we can conclude that your requirements are unsatisfiable. + + hint: `package-c` was requested with a pre-release marker (e.g., all of: + package-c>1.0.0,<2.0.0a5 + package-c>2.0.0a7,<2.0.0b1 + package-c>2.0.0b1,<2.0.0b5 + ), but pre-releases weren't enabled (try: `--prerelease=allow`) "); // Since the user did not explicitly opt-in to a prerelease, it cannot be selected. @@ -3089,13 +3089,13 @@ fn transitive_prerelease_and_stable_dependency_many_versions() { ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because only package-a==1.0.0 is available and package-a==1.0.0 depends on package-c>=2.0.0b1, we can conclude that all versions of package-a depend on package-c>=2.0.0b1. - And because only package-c<2.0.0b1 is available, we can conclude that all versions of package-a depend on package-c>3.0.0. - And because package-b==1.0.0 depends on package-c and only package-b==1.0.0 is available, we can conclude that all versions of package-a and all versions of package-b are incompatible. - And because you require package-a and package-b, we can conclude that your requirements are unsatisfiable. - - hint: `package-c` was requested with a pre-release marker (e.g., package-c>=2.0.0b1), but pre-releases weren't enabled (try: `--prerelease=allow`) + error: No solution found when resolving dependencies: + Caused by: Because only package-a==1.0.0 is available and package-a==1.0.0 depends on package-c>=2.0.0b1, we can conclude that all versions of package-a depend on package-c>=2.0.0b1. + And because only package-c<2.0.0b1 is available, we can conclude that all versions of package-a depend on package-c>3.0.0. + And because package-b==1.0.0 depends on package-c and only package-b==1.0.0 is available, we can conclude that all versions of package-a and all versions of package-b are incompatible. + And because you require package-a and package-b, we can conclude that your requirements are unsatisfiable. + + hint: `package-c` was requested with a pre-release marker (e.g., package-c>=2.0.0b1), but pre-releases weren't enabled (try: `--prerelease=allow`) "); // Since the user did not explicitly opt-in to a prerelease, it cannot be selected. @@ -3213,11 +3213,11 @@ fn transitive_prerelease_and_stable_dependency() { ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because there is no version of package-c==2.0.0b1 and package-a==1.0.0 depends on package-c==2.0.0b1, we can conclude that package-a==1.0.0 cannot be used. - And because only package-a==1.0.0 is available and you require package-a, we can conclude that your requirements are unsatisfiable. - - hint: `package-c` was requested with a pre-release marker (e.g., package-c==2.0.0b1), but pre-releases weren't enabled (try: `--prerelease=allow`) + error: No solution found when resolving dependencies: + Caused by: Because there is no version of package-c==2.0.0b1 and package-a==1.0.0 depends on package-c==2.0.0b1, we can conclude that package-a==1.0.0 cannot be used. + And because only package-a==1.0.0 is available and you require package-a, we can conclude that your requirements are unsatisfiable. + + hint: `package-c` was requested with a pre-release marker (e.g., package-c==2.0.0b1), but pre-releases weren't enabled (try: `--prerelease=allow`) "); // Since the user did not explicitly opt-in to a prerelease, it cannot be selected. @@ -3307,20 +3307,20 @@ fn python_greater_than_current_excluded() { ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because the current Python version (3.9.[X]) does not satisfy Python>=3.10 and package-a==2.0.0 depends on Python>=3.10, we can conclude that package-a==2.0.0 cannot be used. - And because only the following versions of package-a are available: - package-a<=2.0.0 - package-a==3.0.0 - package-a==4.0.0 - we can conclude that package-a>=2.0.0,<3.0.0 cannot be used. (1) - - Because the current Python version (3.9.[X]) does not satisfy Python>=3.11 and package-a==3.0.0 depends on Python>=3.11, we can conclude that package-a==3.0.0 cannot be used. - And because we know from (1) that package-a>=2.0.0,<3.0.0 cannot be used, we can conclude that package-a>=2.0.0,<4.0.0 cannot be used. (2) - - Because the current Python version (3.9.[X]) does not satisfy Python>=3.12 and package-a==4.0.0 depends on Python>=3.12, we can conclude that package-a==4.0.0 cannot be used. - And because we know from (2) that package-a>=2.0.0,<4.0.0 cannot be used, we can conclude that package-a>=2.0.0 cannot be used. - And because you require package-a>=2.0.0, we can conclude that your requirements are unsatisfiable. + error: No solution found when resolving dependencies: + Caused by: Because the current Python version (3.9.[X]) does not satisfy Python>=3.10 and package-a==2.0.0 depends on Python>=3.10, we can conclude that package-a==2.0.0 cannot be used. + And because only the following versions of package-a are available: + package-a<=2.0.0 + package-a==3.0.0 + package-a==4.0.0 + we can conclude that package-a>=2.0.0,<3.0.0 cannot be used. (1) + + Because the current Python version (3.9.[X]) does not satisfy Python>=3.11 and package-a==3.0.0 depends on Python>=3.11, we can conclude that package-a==3.0.0 cannot be used. + And because we know from (1) that package-a>=2.0.0,<3.0.0 cannot be used, we can conclude that package-a>=2.0.0,<4.0.0 cannot be used. (2) + + Because the current Python version (3.9.[X]) does not satisfy Python>=3.12 and package-a==4.0.0 depends on Python>=3.12, we can conclude that package-a==4.0.0 cannot be used. + And because we know from (2) that package-a>=2.0.0,<4.0.0 cannot be used, we can conclude that package-a>=2.0.0 cannot be used. + And because you require package-a>=2.0.0, we can conclude that your requirements are unsatisfiable. "); context.assert_not_installed("python_greater_than_current_excluded_a"); @@ -3377,8 +3377,8 @@ fn python_greater_than_current_many() { ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because there is no version of package-a==1.0.0 and you require package-a==1.0.0, we can conclude that your requirements are unsatisfiable. + error: No solution found when resolving dependencies: + Caused by: Because there is no version of package-a==1.0.0 and you require package-a==1.0.0, we can conclude that your requirements are unsatisfiable. "); context.assert_not_installed("python_greater_than_current_many_a"); @@ -3414,9 +3414,9 @@ fn python_greater_than_current_patch() { ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because the current Python version (3.13) does not satisfy Python>=3.13.2 and package-a==1.0.0 depends on Python>=3.13.2, we can conclude that package-a==1.0.0 cannot be used. - And because you require package-a==1.0.0, we can conclude that your requirements are unsatisfiable. + error: No solution found when resolving dependencies: + Caused by: Because the current Python version (3.13) does not satisfy Python>=3.13.2 and package-a==1.0.0 depends on Python>=3.13.2, we can conclude that package-a==1.0.0 cannot be used. + And because you require package-a==1.0.0, we can conclude that your requirements are unsatisfiable. "); context.assert_not_installed("python_greater_than_current_patch_a"); @@ -3451,9 +3451,9 @@ fn python_greater_than_current() { ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because the current Python version (3.9.[X]) does not satisfy Python>=3.10 and package-a==1.0.0 depends on Python>=3.10, we can conclude that package-a==1.0.0 cannot be used. - And because you require package-a==1.0.0, we can conclude that your requirements are unsatisfiable. + error: No solution found when resolving dependencies: + Caused by: Because the current Python version (3.9.[X]) does not satisfy Python>=3.10 and package-a==1.0.0 depends on Python>=3.10, we can conclude that package-a==1.0.0 cannot be used. + And because you require package-a==1.0.0, we can conclude that your requirements are unsatisfiable. "); context.assert_not_installed("python_greater_than_current_a"); @@ -3526,9 +3526,9 @@ fn python_version_does_not_exist() { ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because the current Python version (3.12.[X]) does not satisfy Python>=3.30 and package-a==1.0.0 depends on Python>=3.30, we can conclude that package-a==1.0.0 cannot be used. - And because you require package-a==1.0.0, we can conclude that your requirements are unsatisfiable. + error: No solution found when resolving dependencies: + Caused by: Because the current Python version (3.12.[X]) does not satisfy Python>=3.30 and package-a==1.0.0 depends on Python>=3.30, we can conclude that package-a==1.0.0 cannot be used. + And because you require package-a==1.0.0, we can conclude that your requirements are unsatisfiable. "); context.assert_not_installed("python_version_does_not_exist_a"); @@ -3641,11 +3641,11 @@ fn no_sdist_no_wheels_with_matching_abi() { ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because only package-a==1.0.0 is available and package-a==1.0.0 has no wheels with a matching Python ABI tag (e.g., `cp312`), we can conclude that all versions of package-a cannot be used. - And because you require package-a, we can conclude that your requirements are unsatisfiable. - - hint: You require CPython 3.12 (`cp312`), but we only found wheels for `package-a` (v1.0.0) with the following Python ABI tag: `graalpy240_310_native` + error: No solution found when resolving dependencies: + Caused by: Because only package-a==1.0.0 is available and package-a==1.0.0 has no wheels with a matching Python ABI tag (e.g., `cp312`), we can conclude that all versions of package-a cannot be used. + And because you require package-a, we can conclude that your requirements are unsatisfiable. + + hint: You require CPython 3.12 (`cp312`), but we only found wheels for `package-a` (v1.0.0) with the following Python ABI tag: `graalpy240_310_native` "); context.assert_not_installed("no_sdist_no_wheels_with_matching_abi_a"); @@ -3680,11 +3680,11 @@ fn no_sdist_no_wheels_with_matching_platform() { ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because only package-a==1.0.0 is available and package-a==1.0.0 has no wheels with a matching platform tag (e.g., `manylinux_2_17_x86_64`), we can conclude that all versions of package-a cannot be used. - And because you require package-a, we can conclude that your requirements are unsatisfiable. - - hint: Wheels are available for `package-a` (v1.0.0) on the following platform: `macosx_10_0_ppc64` + error: No solution found when resolving dependencies: + Caused by: Because only package-a==1.0.0 is available and package-a==1.0.0 has no wheels with a matching platform tag (e.g., `manylinux_2_17_x86_64`), we can conclude that all versions of package-a cannot be used. + And because you require package-a, we can conclude that your requirements are unsatisfiable. + + hint: Wheels are available for `package-a` (v1.0.0) on the following platform: `macosx_10_0_ppc64` "); context.assert_not_installed("no_sdist_no_wheels_with_matching_platform_a"); @@ -3719,11 +3719,11 @@ fn no_sdist_no_wheels_with_matching_python() { ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because only package-a==1.0.0 is available and package-a==1.0.0 has no wheels with a matching Python implementation tag (e.g., `cp312`), we can conclude that all versions of package-a cannot be used. - And because you require package-a, we can conclude that your requirements are unsatisfiable. - - hint: You require CPython 3.12 (`cp312`), but we only found wheels for `package-a` (v1.0.0) with the following Python implementation tag: `graalpy310` + error: No solution found when resolving dependencies: + Caused by: Because only package-a==1.0.0 is available and package-a==1.0.0 has no wheels with a matching Python implementation tag (e.g., `cp312`), we can conclude that all versions of package-a cannot be used. + And because you require package-a, we can conclude that your requirements are unsatisfiable. + + hint: You require CPython 3.12 (`cp312`), but we only found wheels for `package-a` (v1.0.0) with the following Python implementation tag: `graalpy310` "); context.assert_not_installed("no_sdist_no_wheels_with_matching_python_a"); @@ -3759,11 +3759,11 @@ fn no_wheels_no_build() { ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because only package-a==1.0.0 is available and package-a==1.0.0 has no usable wheels, we can conclude that all versions of package-a cannot be used. - And because you require package-a, we can conclude that your requirements are unsatisfiable. - - hint: Wheels are required for `package-a` because building from source is disabled for `package-a` (i.e., with `--no-build-package package-a`) + error: No solution found when resolving dependencies: + Caused by: Because only package-a==1.0.0 is available and package-a==1.0.0 has no usable wheels, we can conclude that all versions of package-a cannot be used. + And because you require package-a, we can conclude that your requirements are unsatisfiable. + + hint: Wheels are required for `package-a` because building from source is disabled for `package-a` (i.e., with `--no-build-package package-a`) "); context.assert_not_installed("no_wheels_no_build_a"); @@ -3869,11 +3869,11 @@ fn only_wheels_no_binary() { ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because only package-a==1.0.0 is available and package-a==1.0.0 has no source distribution, we can conclude that all versions of package-a cannot be used. - And because you require package-a, we can conclude that your requirements are unsatisfiable. - - hint: A source distribution is required for `package-a` because using pre-built wheels is disabled for `package-a` (i.e., with `--no-binary-package package-a`) + error: No solution found when resolving dependencies: + Caused by: Because only package-a==1.0.0 is available and package-a==1.0.0 has no source distribution, we can conclude that all versions of package-a cannot be used. + And because you require package-a, we can conclude that your requirements are unsatisfiable. + + hint: A source distribution is required for `package-a` because using pre-built wheels is disabled for `package-a` (i.e., with `--no-binary-package package-a`) "); context.assert_not_installed("only_wheels_no_binary_a"); @@ -3978,12 +3978,12 @@ fn package_only_yanked_in_range() { ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because only the following versions of package-a are available: - package-a<=0.1.0 - package-a==1.0.0 - and package-a==1.0.0 was yanked (reason: Yanked for testing), we can conclude that package-a>0.1.0 cannot be used. - And because you require package-a>0.1.0, we can conclude that your requirements are unsatisfiable. + error: No solution found when resolving dependencies: + Caused by: Because only the following versions of package-a are available: + package-a<=0.1.0 + package-a==1.0.0 + and package-a==1.0.0 was yanked (reason: Yanked for testing), we can conclude that package-a>0.1.0 cannot be used. + And because you require package-a>0.1.0, we can conclude that your requirements are unsatisfiable. "); // Since there are other versions of `a` available, yanked versions should not be selected without explicit opt-in. @@ -4018,9 +4018,9 @@ fn package_only_yanked() { ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because only package-a==1.0.0 is available and package-a==1.0.0 was yanked (reason: Yanked for testing), we can conclude that all versions of package-a cannot be used. - And because you require package-a, we can conclude that your requirements are unsatisfiable. + error: No solution found when resolving dependencies: + Caused by: Because only package-a==1.0.0 is available and package-a==1.0.0 was yanked (reason: Yanked for testing), we can conclude that all versions of package-a cannot be used. + And because you require package-a, we can conclude that your requirements are unsatisfiable. "); // Yanked versions should not be installed, even if they are the only one available. @@ -4193,13 +4193,13 @@ fn transitive_package_only_yanked_in_range() { ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because only the following versions of package-b are available: - package-b<=0.1 - package-b==1.0.0 - and package-b==1.0.0 was yanked (reason: Yanked for testing), we can conclude that package-b>0.1 cannot be used. - And because package-a==0.1.0 depends on package-b>0.1, we can conclude that package-a==0.1.0 cannot be used. - And because only package-a==0.1.0 is available and you require package-a, we can conclude that your requirements are unsatisfiable. + error: No solution found when resolving dependencies: + Caused by: Because only the following versions of package-b are available: + package-b<=0.1 + package-b==1.0.0 + and package-b==1.0.0 was yanked (reason: Yanked for testing), we can conclude that package-b>0.1 cannot be used. + And because package-a==0.1.0 depends on package-b>0.1, we can conclude that package-a==0.1.0 cannot be used. + And because only package-a==0.1.0 is available and you require package-a, we can conclude that your requirements are unsatisfiable. "); // Yanked versions should not be installed, even if they are the only valid version in a range. @@ -4238,10 +4238,10 @@ fn transitive_package_only_yanked() { ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because only package-b==1.0.0 is available and package-b==1.0.0 was yanked (reason: Yanked for testing), we can conclude that all versions of package-b cannot be used. - And because package-a==0.1.0 depends on package-b, we can conclude that package-a==0.1.0 cannot be used. - And because only package-a==0.1.0 is available and you require package-a, we can conclude that your requirements are unsatisfiable. + error: No solution found when resolving dependencies: + Caused by: Because only package-b==1.0.0 is available and package-b==1.0.0 was yanked (reason: Yanked for testing), we can conclude that all versions of package-b cannot be used. + And because package-a==0.1.0 depends on package-b, we can conclude that package-a==0.1.0 cannot be used. + And because only package-a==0.1.0 is available and you require package-a, we can conclude that your requirements are unsatisfiable. "); // Yanked versions should not be installed, even if they are the only one available. @@ -4358,9 +4358,9 @@ fn transitive_yanked_and_unyanked_dependency() { ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because package-c==2.0.0 was yanked (reason: Yanked for testing) and package-a==1.0.0 depends on package-c==2.0.0, we can conclude that package-a==1.0.0 cannot be used. - And because only package-a==1.0.0 is available and you require package-a, we can conclude that your requirements are unsatisfiable. + error: No solution found when resolving dependencies: + Caused by: Because package-c==2.0.0 was yanked (reason: Yanked for testing) and package-a==1.0.0 depends on package-c==2.0.0, we can conclude that package-a==1.0.0 cannot be used. + And because only package-a==1.0.0 is available and you require package-a, we can conclude that your requirements are unsatisfiable. "); // Since the user did not explicitly select the yanked version, it cannot be used. diff --git a/crates/uv/tests/it/pip_sync.rs b/crates/uv/tests/it/pip_sync.rs index 17c5caf8e..f09026197 100644 --- a/crates/uv/tests/it/pip_sync.rs +++ b/crates/uv/tests/it/pip_sync.rs @@ -951,17 +951,17 @@ fn install_no_index() -> Result<()> { uv_snapshot!(context.pip_sync() .arg("requirements.txt") .arg("--no-index") - .arg("--strict"), @r###" + .arg("--strict"), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because iniconfig was not found in the provided package locations and you require iniconfig==2.0.0, we can conclude that your requirements are unsatisfiable. - - hint: Packages were unavailable because index lookups were disabled and no additional package locations were provided (try: `--find-links `) - "### + error: No solution found when resolving dependencies: + Caused by: Because iniconfig was not found in the provided package locations and you require iniconfig==2.0.0, we can conclude that your requirements are unsatisfiable. + + hint: Packages were unavailable because index lookups were disabled and no additional package locations were provided (try: `--find-links `) + " ); context.assert_command("import iniconfig").failure(); @@ -1000,17 +1000,17 @@ fn install_no_index_cached() -> Result<()> { uv_snapshot!(context.pip_sync() .arg("requirements.txt") .arg("--no-index") - .arg("--strict"), @r###" + .arg("--strict"), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because iniconfig was not found in the provided package locations and you require iniconfig==2.0.0, we can conclude that your requirements are unsatisfiable. - - hint: Packages were unavailable because index lookups were disabled and no additional package locations were provided (try: `--find-links `) - "### + error: No solution found when resolving dependencies: + Caused by: Because iniconfig was not found in the provided package locations and you require iniconfig==2.0.0, we can conclude that your requirements are unsatisfiable. + + hint: Packages were unavailable because index lookups were disabled and no additional package locations were provided (try: `--find-links `) + " ); context.assert_command("import iniconfig").failure(); @@ -1290,11 +1290,11 @@ fn mismatched_name() -> Result<()> { ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because foo has an invalid package format and you require foo, we can conclude that your requirements are unsatisfiable. - - hint: The structure of `foo` was invalid - Caused by: The .dist-info directory tomli-2.0.1 does not start with the normalized package name: foo + error: No solution found when resolving dependencies: + Caused by: Because foo has an invalid package format and you require foo, we can conclude that your requirements are unsatisfiable. + + hint: The structure of `foo` was invalid + Caused by: The .dist-info directory tomli-2.0.1 does not start with the normalized package name: foo " ); @@ -1947,15 +1947,15 @@ fn duplicate_package_overlap() -> Result<()> { uv_snapshot!(context.pip_sync() .arg("requirements.txt") - .arg("--strict"), @r###" + .arg("--strict"), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because you require markupsafe==2.1.3 and markupsafe==2.1.2, we can conclude that your requirements are unsatisfiable. - "### + error: No solution found when resolving dependencies: + Caused by: Because you require markupsafe==2.1.3 and markupsafe==2.1.2, we can conclude that your requirements are unsatisfiable. + " ); Ok(()) @@ -2628,12 +2628,12 @@ fn incompatible_wheel() -> Result<()> { ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because foo has an invalid package format and you require foo, we can conclude that your requirements are unsatisfiable. - - hint: The structure of `foo` was invalid - Caused by: Failed to read from zip file - Caused by: unable to locate the end of central directory record + error: No solution found when resolving dependencies: + Caused by: Because foo has an invalid package format and you require foo, we can conclude that your requirements are unsatisfiable. + + hint: The structure of `foo` was invalid + Caused by: Failed to read from zip file + Caused by: unable to locate the end of central directory record " ); @@ -2775,17 +2775,17 @@ fn find_links_offline_no_match() -> Result<()> { .arg("requirements.txt") .arg("--offline") .arg("--find-links") - .arg(context.workspace_root.join("test/links/")), @r###" + .arg(context.workspace_root.join("test/links/")), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because numpy was not found in the cache and you require numpy, we can conclude that your requirements are unsatisfiable. - - hint: Packages were unavailable because the network was disabled. When the network is disabled, registry packages may only be read from the cache. - "### + error: No solution found when resolving dependencies: + Caused by: Because numpy was not found in the cache and you require numpy, we can conclude that your requirements are unsatisfiable. + + hint: Packages were unavailable because the network was disabled. When the network is disabled, registry packages may only be read from the cache. + " ); Ok(()) @@ -2900,17 +2900,17 @@ fn offline() -> Result<()> { // Install with `--offline` with an empty cache. uv_snapshot!(context.pip_sync() .arg("requirements.in") - .arg("--offline"), @r###" + .arg("--offline"), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because black was not found in the cache and you require black==23.10.1, we can conclude that your requirements are unsatisfiable. - - hint: Packages were unavailable because the network was disabled. When the network is disabled, registry packages may only be read from the cache. - "### + error: No solution found when resolving dependencies: + Caused by: Because black was not found in the cache and you require black==23.10.1, we can conclude that your requirements are unsatisfiable. + + hint: Packages were unavailable because the network was disabled. When the network is disabled, registry packages may only be read from the cache. + " ); // Populate the cache. @@ -2991,15 +2991,15 @@ fn incompatible_constraint() -> Result<()> { uv_snapshot!(context.pip_sync() .arg("requirements.txt") .arg("--constraint") - .arg("constraints.txt"), @r###" + .arg("constraints.txt"), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because you require anyio==3.7.0 and anyio==3.6.0, we can conclude that your requirements are unsatisfiable. - "### + error: No solution found when resolving dependencies: + Caused by: Because you require anyio==3.7.0 and anyio==3.6.0, we can conclude that your requirements are unsatisfiable. + " ); Ok(()) @@ -3088,15 +3088,15 @@ fn repeat_requirement_incompatible() -> Result<()> { requirements_in.write_str("anyio<4.0.0\nanyio==4.0.0")?; uv_snapshot!(context.pip_sync() - .arg("requirements.in"), @r###" + .arg("requirements.in"), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because you require anyio<4.0.0 and anyio==4.0.0, we can conclude that your requirements are unsatisfiable. - "###); + error: No solution found when resolving dependencies: + Caused by: Because you require anyio<4.0.0 and anyio==4.0.0, we can conclude that your requirements are unsatisfiable. + "); Ok(()) } @@ -3386,16 +3386,16 @@ requires-python = ">=3.13" requirements_in.write_str(&format!("-e {}", editable_dir.path().display()))?; uv_snapshot!(context.filters(), context.pip_sync() - .arg("requirements.in"), @r###" + .arg("requirements.in"), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because the current Python version (3.12.[X]) does not satisfy Python>=3.13 and example==0.0.0 depends on Python>=3.13, we can conclude that example==0.0.0 cannot be used. - And because only example==0.0.0 is available and you require example, we can conclude that your requirements are unsatisfiable. - "### + error: No solution found when resolving dependencies: + Caused by: Because the current Python version (3.12.[X]) does not satisfy Python>=3.13 and example==0.0.0 depends on Python>=3.13, we can conclude that example==0.0.0 cannot be used. + And because only example==0.0.0 is available and you require example, we can conclude that your requirements are unsatisfiable. + " ); Ok(()) @@ -3426,16 +3426,16 @@ requires-python = ">=3.13" requirements_in.write_str(&format!("example @ {}", editable_dir.path().display()))?; uv_snapshot!(context.filters(), context.pip_sync() - .arg("requirements.in"), @r###" + .arg("requirements.in"), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because the current Python version (3.12.[X]) does not satisfy Python>=3.13 and example==0.0.0 depends on Python>=3.13, we can conclude that example==0.0.0 cannot be used. - And because only example==0.0.0 is available and you require example, we can conclude that your requirements are unsatisfiable. - "### + error: No solution found when resolving dependencies: + Caused by: Because the current Python version (3.12.[X]) does not satisfy Python>=3.13 and example==0.0.0 depends on Python>=3.13, we can conclude that example==0.0.0 cannot be used. + And because only example==0.0.0 is available and you require example, we can conclude that your requirements are unsatisfiable. + " ); Ok(()) @@ -3600,22 +3600,22 @@ fn require_hashes_wheel_no_binary() -> Result<()> { .arg("requirements.txt") .arg("--no-binary") .arg(":all:") - .arg("--require-hashes"), @r###" + .arg("--require-hashes"), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- Resolved 1 package in [TIME] - × Failed to download and build `anyio==4.0.0` - ╰─▶ Hash mismatch for `anyio==4.0.0` - - Expected: - sha256:cfdb2b588b9fc25ede96d8db56ed50848b0b649dca3dd1df0b11f683bb9e0b5f - - Computed: - sha256:f7ed51751b2c2add651e5747c891b47e26d2a21be5d32d9311dfe9692f3e5d7a - "### + error: Failed to download and build `anyio==4.0.0` + Caused by: Hash mismatch for `anyio==4.0.0` + + Expected: + sha256:cfdb2b588b9fc25ede96d8db56ed50848b0b649dca3dd1df0b11f683bb9e0b5f + + Computed: + sha256:f7ed51751b2c2add651e5747c891b47e26d2a21be5d32d9311dfe9692f3e5d7a + " ); Ok(()) @@ -3692,22 +3692,22 @@ fn require_hashes_source_only_binary() -> Result<()> { .arg("requirements.txt") .arg("--only-binary") .arg(":all:") - .arg("--require-hashes"), @r###" + .arg("--require-hashes"), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- Resolved 1 package in [TIME] - × Failed to download `anyio==4.0.0` - ╰─▶ Hash mismatch for `anyio==4.0.0` - - Expected: - sha256:f7ed51751b2c2add651e5747c891b47e26d2a21be5d32d9311dfe9692f3e5d7a - - Computed: - sha256:cfdb2b588b9fc25ede96d8db56ed50848b0b649dca3dd1df0b11f683bb9e0b5f - "### + error: Failed to download `anyio==4.0.0` + Caused by: Hash mismatch for `anyio==4.0.0` + + Expected: + sha256:f7ed51751b2c2add651e5747c891b47e26d2a21be5d32d9311dfe9692f3e5d7a + + Computed: + sha256:cfdb2b588b9fc25ede96d8db56ed50848b0b649dca3dd1df0b11f683bb9e0b5f + " ); Ok(()) @@ -3724,22 +3724,22 @@ fn require_hashes_wrong_digest() -> Result<()> { uv_snapshot!(context.pip_sync() .arg("requirements.txt") - .arg("--require-hashes"), @r###" + .arg("--require-hashes"), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- Resolved 1 package in [TIME] - × Failed to download `anyio==4.0.0` - ╰─▶ Hash mismatch for `anyio==4.0.0` - - Expected: - sha256:afdb2b588b9fc25ede96d8db56ed50848b0b649dca3dd1df0b11f683bb9e0b5f - - Computed: - sha256:cfdb2b588b9fc25ede96d8db56ed50848b0b649dca3dd1df0b11f683bb9e0b5f - "### + error: Failed to download `anyio==4.0.0` + Caused by: Hash mismatch for `anyio==4.0.0` + + Expected: + sha256:afdb2b588b9fc25ede96d8db56ed50848b0b649dca3dd1df0b11f683bb9e0b5f + + Computed: + sha256:cfdb2b588b9fc25ede96d8db56ed50848b0b649dca3dd1df0b11f683bb9e0b5f + " ); Ok(()) @@ -3756,22 +3756,22 @@ fn require_hashes_wrong_algorithm() -> Result<()> { uv_snapshot!(context.pip_sync() .arg("requirements.txt") - .arg("--require-hashes"), @r###" + .arg("--require-hashes"), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- Resolved 1 package in [TIME] - × Failed to download `anyio==4.0.0` - ╰─▶ Hash mismatch for `anyio==4.0.0` - - Expected: - sha512:cfdb2b588b9fc25ede96d8db56ed50848b0b649dca3dd1df0b11f683bb9e0b5f - - Computed: - sha512:f30761c1e8725b49c498273b90dba4b05c0fd157811994c806183062cb6647e773364ce45f0e1ff0b10e32fe6d0232ea5ad39476ccf37109d6b49603a09c11c2 - "### + error: Failed to download `anyio==4.0.0` + Caused by: Hash mismatch for `anyio==4.0.0` + + Expected: + sha512:cfdb2b588b9fc25ede96d8db56ed50848b0b649dca3dd1df0b11f683bb9e0b5f + + Computed: + sha512:f30761c1e8725b49c498273b90dba4b05c0fd157811994c806183062cb6647e773364ce45f0e1ff0b10e32fe6d0232ea5ad39476ccf37109d6b49603a09c11c2 + " ); Ok(()) @@ -3827,21 +3827,21 @@ fn require_hashes_source_url() -> Result<()> { uv_snapshot!(context.pip_sync() .arg("requirements.txt") .arg("--reinstall") - .arg("--require-hashes"), @r###" + .arg("--require-hashes"), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- - × Failed to download and build `source-distribution @ https://files.pythonhosted.org/packages/10/1f/57aa4cce1b1abf6b433106676e15f9fa2c92ed2bd4cf77c3b50a9e9ac773/source_distribution-0.0.1.tar.gz` - ╰─▶ Hash mismatch for `source-distribution @ https://files.pythonhosted.org/packages/10/1f/57aa4cce1b1abf6b433106676e15f9fa2c92ed2bd4cf77c3b50a9e9ac773/source_distribution-0.0.1.tar.gz` - - Expected: - sha256:a7ed51751b2c2add651e5747c891b47e26d2a21be5d32d9311dfe9692f3e5d7a - - Computed: - sha256:1f83ed7498336c7f2ab9b002cf22583d91115ebc624053dc4eb3a45694490106 - "### + error: Failed to download and build `source-distribution @ https://files.pythonhosted.org/packages/10/1f/57aa4cce1b1abf6b433106676e15f9fa2c92ed2bd4cf77c3b50a9e9ac773/source_distribution-0.0.1.tar.gz` + Caused by: Hash mismatch for `source-distribution @ https://files.pythonhosted.org/packages/10/1f/57aa4cce1b1abf6b433106676e15f9fa2c92ed2bd4cf77c3b50a9e9ac773/source_distribution-0.0.1.tar.gz` + + Expected: + sha256:a7ed51751b2c2add651e5747c891b47e26d2a21be5d32d9311dfe9692f3e5d7a + + Computed: + sha256:1f83ed7498336c7f2ab9b002cf22583d91115ebc624053dc4eb3a45694490106 + " ); Ok(()) @@ -3858,21 +3858,21 @@ fn require_hashes_source_url_mismatch() -> Result<()> { uv_snapshot!(context.pip_sync() .arg("requirements.txt") - .arg("--require-hashes"), @r###" + .arg("--require-hashes"), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- - × Failed to download and build `source-distribution @ https://files.pythonhosted.org/packages/10/1f/57aa4cce1b1abf6b433106676e15f9fa2c92ed2bd4cf77c3b50a9e9ac773/source_distribution-0.0.1.tar.gz` - ╰─▶ Hash mismatch for `source-distribution @ https://files.pythonhosted.org/packages/10/1f/57aa4cce1b1abf6b433106676e15f9fa2c92ed2bd4cf77c3b50a9e9ac773/source_distribution-0.0.1.tar.gz` - - Expected: - sha256:a7ed51751b2c2add651e5747c891b47e26d2a21be5d32d9311dfe9692f3e5d7a - - Computed: - sha256:1f83ed7498336c7f2ab9b002cf22583d91115ebc624053dc4eb3a45694490106 - "### + error: Failed to download and build `source-distribution @ https://files.pythonhosted.org/packages/10/1f/57aa4cce1b1abf6b433106676e15f9fa2c92ed2bd4cf77c3b50a9e9ac773/source_distribution-0.0.1.tar.gz` + Caused by: Hash mismatch for `source-distribution @ https://files.pythonhosted.org/packages/10/1f/57aa4cce1b1abf6b433106676e15f9fa2c92ed2bd4cf77c3b50a9e9ac773/source_distribution-0.0.1.tar.gz` + + Expected: + sha256:a7ed51751b2c2add651e5747c891b47e26d2a21be5d32d9311dfe9692f3e5d7a + + Computed: + sha256:1f83ed7498336c7f2ab9b002cf22583d91115ebc624053dc4eb3a45694490106 + " ); Ok(()) @@ -3928,22 +3928,22 @@ fn require_hashes_wheel_url() -> Result<()> { uv_snapshot!(context.pip_sync() .arg("requirements.txt") .arg("--reinstall") - .arg("--require-hashes"), @r###" + .arg("--require-hashes"), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- Resolved 1 package in [TIME] - × Failed to download `anyio @ https://files.pythonhosted.org/packages/36/55/ad4de788d84a630656ece71059665e01ca793c04294c463fd84132f40fe6/anyio-4.0.0-py3-none-any.whl` - ╰─▶ Hash mismatch for `anyio @ https://files.pythonhosted.org/packages/36/55/ad4de788d84a630656ece71059665e01ca793c04294c463fd84132f40fe6/anyio-4.0.0-py3-none-any.whl` - - Expected: - sha256:afdb2b588b9fc25ede96d8db56ed50848b0b649dca3dd1df0b11f683bb9e0b5f - - Computed: - sha256:cfdb2b588b9fc25ede96d8db56ed50848b0b649dca3dd1df0b11f683bb9e0b5f - "### + error: Failed to download `anyio @ https://files.pythonhosted.org/packages/36/55/ad4de788d84a630656ece71059665e01ca793c04294c463fd84132f40fe6/anyio-4.0.0-py3-none-any.whl` + Caused by: Hash mismatch for `anyio @ https://files.pythonhosted.org/packages/36/55/ad4de788d84a630656ece71059665e01ca793c04294c463fd84132f40fe6/anyio-4.0.0-py3-none-any.whl` + + Expected: + sha256:afdb2b588b9fc25ede96d8db56ed50848b0b649dca3dd1df0b11f683bb9e0b5f + + Computed: + sha256:cfdb2b588b9fc25ede96d8db56ed50848b0b649dca3dd1df0b11f683bb9e0b5f + " ); // Sync a new dependency and include the wrong hash for anyio. Verify that we reuse anyio @@ -3982,22 +3982,22 @@ fn require_hashes_wheel_url_mismatch() -> Result<()> { uv_snapshot!(context.pip_sync() .arg("requirements.txt") - .arg("--require-hashes"), @r###" + .arg("--require-hashes"), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- Resolved 1 package in [TIME] - × Failed to download `anyio @ https://files.pythonhosted.org/packages/36/55/ad4de788d84a630656ece71059665e01ca793c04294c463fd84132f40fe6/anyio-4.0.0-py3-none-any.whl` - ╰─▶ Hash mismatch for `anyio @ https://files.pythonhosted.org/packages/36/55/ad4de788d84a630656ece71059665e01ca793c04294c463fd84132f40fe6/anyio-4.0.0-py3-none-any.whl` - - Expected: - sha256:afdb2b588b9fc25ede96d8db56ed50848b0b649dca3dd1df0b11f683bb9e0b5f - - Computed: - sha256:cfdb2b588b9fc25ede96d8db56ed50848b0b649dca3dd1df0b11f683bb9e0b5f - "### + error: Failed to download `anyio @ https://files.pythonhosted.org/packages/36/55/ad4de788d84a630656ece71059665e01ca793c04294c463fd84132f40fe6/anyio-4.0.0-py3-none-any.whl` + Caused by: Hash mismatch for `anyio @ https://files.pythonhosted.org/packages/36/55/ad4de788d84a630656ece71059665e01ca793c04294c463fd84132f40fe6/anyio-4.0.0-py3-none-any.whl` + + Expected: + sha256:afdb2b588b9fc25ede96d8db56ed50848b0b649dca3dd1df0b11f683bb9e0b5f + + Computed: + sha256:cfdb2b588b9fc25ede96d8db56ed50848b0b649dca3dd1df0b11f683bb9e0b5f + " ); Ok(()) @@ -4015,15 +4015,15 @@ fn require_hashes_git() -> Result<()> { uv_snapshot!(context.pip_sync() .arg("requirements.txt") - .arg("--require-hashes"), @r###" + .arg("--require-hashes"), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- - × Failed to download and build `anyio @ git+https://github.com/agronholm/anyio@4a23745badf5bf5ef7928f1e346e9986bd696d82` - ╰─▶ Hash-checking is not supported for Git repositories: `anyio @ git+https://github.com/agronholm/anyio@4a23745badf5bf5ef7928f1e346e9986bd696d82` - "### + error: Failed to download and build `anyio @ git+https://github.com/agronholm/anyio@4a23745badf5bf5ef7928f1e346e9986bd696d82` + Caused by: Hash-checking is not supported for Git repositories: `anyio @ git+https://github.com/agronholm/anyio@4a23745badf5bf5ef7928f1e346e9986bd696d82` + " ); Ok(()) @@ -4045,15 +4045,15 @@ fn require_hashes_source_tree() -> Result<()> { uv_snapshot!(context.filters(), context.pip_sync() .arg("requirements.txt") - .arg("--require-hashes"), @r###" + .arg("--require-hashes"), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- - × Failed to build `black @ file://[WORKSPACE]/test/packages/black_editable` - ╰─▶ Hash-checking is not supported for local directories: `black @ file://[WORKSPACE]/test/packages/black_editable` - "### + error: Failed to build `black @ file://[WORKSPACE]/test/packages/black_editable` + Caused by: Hash-checking is not supported for local directories: `black @ file://[WORKSPACE]/test/packages/black_editable` + " ); Ok(()) @@ -4090,22 +4090,22 @@ fn require_hashes_re_download() -> Result<()> { uv_snapshot!(context.pip_sync() .arg("requirements.txt") .arg("--reinstall") - .arg("--require-hashes"), @r###" + .arg("--require-hashes"), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- Resolved 1 package in [TIME] - × Failed to download `anyio==4.0.0` - ╰─▶ Hash mismatch for `anyio==4.0.0` - - Expected: - sha256:afdb2b588b9fc25ede96d8db56ed50848b0b649dca3dd1df0b11f683bb9e0b5f - - Computed: - sha256:cfdb2b588b9fc25ede96d8db56ed50848b0b649dca3dd1df0b11f683bb9e0b5f - "### + error: Failed to download `anyio==4.0.0` + Caused by: Hash mismatch for `anyio==4.0.0` + + Expected: + sha256:afdb2b588b9fc25ede96d8db56ed50848b0b649dca3dd1df0b11f683bb9e0b5f + + Computed: + sha256:cfdb2b588b9fc25ede96d8db56ed50848b0b649dca3dd1df0b11f683bb9e0b5f + " ); // Reinstall with `--require-hashes`, and the right hash. @@ -4181,22 +4181,22 @@ fn require_hashes_wheel_path_mismatch() -> Result<()> { uv_snapshot!(context.filters(), context.pip_sync() .arg("requirements.txt") - .arg("--require-hashes"), @r###" + .arg("--require-hashes"), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- Resolved 1 package in [TIME] - × Failed to read `tqdm @ file://[WORKSPACE]/test/links/tqdm-1000.0.0-py3-none-any.whl` - ╰─▶ Hash mismatch for `tqdm @ file://[WORKSPACE]/test/links/tqdm-1000.0.0-py3-none-any.whl` - - Expected: - sha256:cfdb2b588b9fc25ede96d8db56ed50848b0b649dca3dd1df0b11f683bb9e0b5f - - Computed: - sha256:a34996d4bd5abb2336e14ff0a2d22b92cfd0f0ed344e6883041ce01953276a13 - "### + error: Failed to read `tqdm @ file://[WORKSPACE]/test/links/tqdm-1000.0.0-py3-none-any.whl` + Caused by: Hash mismatch for `tqdm @ file://[WORKSPACE]/test/links/tqdm-1000.0.0-py3-none-any.whl` + + Expected: + sha256:cfdb2b588b9fc25ede96d8db56ed50848b0b649dca3dd1df0b11f683bb9e0b5f + + Computed: + sha256:a34996d4bd5abb2336e14ff0a2d22b92cfd0f0ed344e6883041ce01953276a13 + " ); Ok(()) @@ -4250,21 +4250,21 @@ fn require_hashes_source_path_mismatch() -> Result<()> { uv_snapshot!(context.filters(), context.pip_sync() .arg("requirements.txt") - .arg("--require-hashes"), @r###" + .arg("--require-hashes"), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- - × Failed to build `tqdm @ file://[WORKSPACE]/test/links/tqdm-999.0.0.tar.gz` - ╰─▶ Hash mismatch for `tqdm @ file://[WORKSPACE]/test/links/tqdm-999.0.0.tar.gz` - - Expected: - sha256:cfdb2b588b9fc25ede96d8db56ed50848b0b649dca3dd1df0b11f683bb9e0b5f - - Computed: - sha256:89fa05cffa7f457658373b85de302d24d0c205ceda2819a8739e324b75e9430b - "### + error: Failed to build `tqdm @ file://[WORKSPACE]/test/links/tqdm-999.0.0.tar.gz` + Caused by: Hash mismatch for `tqdm @ file://[WORKSPACE]/test/links/tqdm-999.0.0.tar.gz` + + Expected: + sha256:cfdb2b588b9fc25ede96d8db56ed50848b0b649dca3dd1df0b11f683bb9e0b5f + + Computed: + sha256:89fa05cffa7f457658373b85de302d24d0c205ceda2819a8739e324b75e9430b + " ); Ok(()) @@ -4457,22 +4457,22 @@ fn require_hashes_repeated_hash() -> Result<()> { uv_snapshot!(context.pip_sync() .arg("requirements.txt") .arg("--require-hashes") - .arg("--reinstall"), @r###" + .arg("--reinstall"), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- Resolved 1 package in [TIME] - × Failed to download `anyio @ https://files.pythonhosted.org/packages/36/55/ad4de788d84a630656ece71059665e01ca793c04294c463fd84132f40fe6/anyio-4.0.0-py3-none-any.whl` - ╰─▶ Hash mismatch for `anyio @ https://files.pythonhosted.org/packages/36/55/ad4de788d84a630656ece71059665e01ca793c04294c463fd84132f40fe6/anyio-4.0.0-py3-none-any.whl` - - Expected: - md5:520d85e19168705cdf0223621b18831a - - Computed: - md5:420d85e19168705cdf0223621b18831a - "### + error: Failed to download `anyio @ https://files.pythonhosted.org/packages/36/55/ad4de788d84a630656ece71059665e01ca793c04294c463fd84132f40fe6/anyio-4.0.0-py3-none-any.whl` + Caused by: Hash mismatch for `anyio @ https://files.pythonhosted.org/packages/36/55/ad4de788d84a630656ece71059665e01ca793c04294c463fd84132f40fe6/anyio-4.0.0-py3-none-any.whl` + + Expected: + md5:520d85e19168705cdf0223621b18831a + + Computed: + md5:420d85e19168705cdf0223621b18831a + " ); Ok(()) @@ -4588,22 +4588,22 @@ fn require_hashes_find_links_no_hash() -> Result<()> { .arg("--reinstall") .arg("--require-hashes") .arg("--find-links") - .arg("https://raw.githubusercontent.com/astral-test/astral-test-hash/main/no-hash/simple-html/example-a-961b4c22/index.html"), @r###" + .arg("https://raw.githubusercontent.com/astral-test/astral-test-hash/main/no-hash/simple-html/example-a-961b4c22/index.html"), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- Resolved 1 package in [TIME] - × Failed to download `example-a-961b4c22==1.0.0` - ╰─▶ Hash mismatch for `example-a-961b4c22==1.0.0` - - Expected: - sha256:123 - - Computed: - sha256:5d69f0b590514103234f0c3526563856f04d044d8d0ea1073a843ae429b3187e - "### + error: Failed to download `example-a-961b4c22==1.0.0` + Caused by: Hash mismatch for `example-a-961b4c22==1.0.0` + + Expected: + sha256:123 + + Computed: + sha256:5d69f0b590514103234f0c3526563856f04d044d8d0ea1073a843ae429b3187e + " ); // Third, use the hash from the source distribution. This will actually fail, when it _could_ @@ -4617,22 +4617,22 @@ fn require_hashes_find_links_no_hash() -> Result<()> { .arg("--reinstall") .arg("--require-hashes") .arg("--find-links") - .arg("https://raw.githubusercontent.com/astral-test/astral-test-hash/main/no-hash/simple-html/example-a-961b4c22/index.html"), @r###" + .arg("https://raw.githubusercontent.com/astral-test/astral-test-hash/main/no-hash/simple-html/example-a-961b4c22/index.html"), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- Resolved 1 package in [TIME] - × Failed to download `example-a-961b4c22==1.0.0` - ╰─▶ Hash mismatch for `example-a-961b4c22==1.0.0` - - Expected: - sha256:294e788dbe500fdc39e8b88e82652ab67409a1dc9dd06543d0fe0ae31b713eb3 - - Computed: - sha256:5d69f0b590514103234f0c3526563856f04d044d8d0ea1073a843ae429b3187e - "### + error: Failed to download `example-a-961b4c22==1.0.0` + Caused by: Hash mismatch for `example-a-961b4c22==1.0.0` + + Expected: + sha256:294e788dbe500fdc39e8b88e82652ab67409a1dc9dd06543d0fe0ae31b713eb3 + + Computed: + sha256:5d69f0b590514103234f0c3526563856f04d044d8d0ea1073a843ae429b3187e + " ); // Fourth, use the hash from the source distribution, and disable wheels. This should succeed. @@ -4707,22 +4707,22 @@ fn require_hashes_find_links_invalid_hash() -> Result<()> { .arg("--reinstall") .arg("--require-hashes") .arg("--find-links") - .arg("https://raw.githubusercontent.com/astral-test/astral-test-hash/main/invalid-hash/simple-html/example-a-961b4c22/index.html"), @r###" + .arg("https://raw.githubusercontent.com/astral-test/astral-test-hash/main/invalid-hash/simple-html/example-a-961b4c22/index.html"), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- Resolved 1 package in [TIME] - × Failed to download `example-a-961b4c22==1.0.0` - ╰─▶ Hash mismatch for `example-a-961b4c22==1.0.0` - - Expected: - sha256:123 - - Computed: - sha256:5d69f0b590514103234f0c3526563856f04d044d8d0ea1073a843ae429b3187e - "### + error: Failed to download `example-a-961b4c22==1.0.0` + Caused by: Hash mismatch for `example-a-961b4c22==1.0.0` + + Expected: + sha256:123 + + Computed: + sha256:5d69f0b590514103234f0c3526563856f04d044d8d0ea1073a843ae429b3187e + " ); // Second, request the invalid hash, that the registry _thinks_ is correct. We should reject it. @@ -4735,22 +4735,22 @@ fn require_hashes_find_links_invalid_hash() -> Result<()> { .arg("--reinstall") .arg("--require-hashes") .arg("--find-links") - .arg("https://raw.githubusercontent.com/astral-test/astral-test-hash/main/invalid-hash/simple-html/example-a-961b4c22/index.html"), @r###" + .arg("https://raw.githubusercontent.com/astral-test/astral-test-hash/main/invalid-hash/simple-html/example-a-961b4c22/index.html"), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- Resolved 1 package in [TIME] - × Failed to download `example-a-961b4c22==1.0.0` - ╰─▶ Hash mismatch for `example-a-961b4c22==1.0.0` - - Expected: - sha256:8838f9d005ff0432b258ba648d9cabb1cbdf06ac29d14f788b02edae544032ea - - Computed: - sha256:5d69f0b590514103234f0c3526563856f04d044d8d0ea1073a843ae429b3187e - "### + error: Failed to download `example-a-961b4c22==1.0.0` + Caused by: Hash mismatch for `example-a-961b4c22==1.0.0` + + Expected: + sha256:8838f9d005ff0432b258ba648d9cabb1cbdf06ac29d14f788b02edae544032ea + + Computed: + sha256:5d69f0b590514103234f0c3526563856f04d044d8d0ea1073a843ae429b3187e + " ); // Third, request the correct hash, that the registry _thinks_ is correct. We should accept @@ -4815,23 +4815,23 @@ fn require_hashes_find_links_invalid_hash() -> Result<()> { .arg("--reinstall") .arg("--require-hashes") .arg("--find-links") - .arg("https://raw.githubusercontent.com/astral-test/astral-test-hash/main/invalid-hash/simple-html/example-a-961b4c22/index.html"), @r###" + .arg("https://raw.githubusercontent.com/astral-test/astral-test-hash/main/invalid-hash/simple-html/example-a-961b4c22/index.html"), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- Resolved 1 package in [TIME] - × Failed to download and build `example-a-961b4c22==1.0.0` - ╰─▶ Hash mismatch for `example-a-961b4c22==1.0.0` - - Expected: - sha256:5d69f0b590514103234f0c3526563856f04d044d8d0ea1073a843ae429b3187e - sha256:a3cf07a05aac526131a2e8b6e4375ee6c6eaac8add05b88035e960ac6cd999ee - - Computed: - sha256:294e788dbe500fdc39e8b88e82652ab67409a1dc9dd06543d0fe0ae31b713eb3 - "### + error: Failed to download and build `example-a-961b4c22==1.0.0` + Caused by: Hash mismatch for `example-a-961b4c22==1.0.0` + + Expected: + sha256:5d69f0b590514103234f0c3526563856f04d044d8d0ea1073a843ae429b3187e + sha256:a3cf07a05aac526131a2e8b6e4375ee6c6eaac8add05b88035e960ac6cd999ee + + Computed: + sha256:294e788dbe500fdc39e8b88e82652ab67409a1dc9dd06543d0fe0ae31b713eb3 + " ); Ok(()) @@ -4881,15 +4881,15 @@ fn require_hashes_registry_valid_hash() -> Result<()> { .arg("requirements.txt") .arg("--require-hashes") .arg("--find-links") - .arg("https://astral-test.github.io/astral-test-hash/valid-hash/simple-html/"), @r###" + .arg("https://astral-test.github.io/astral-test-hash/valid-hash/simple-html/"), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because example-a-961b4c22 was not found in the package registry and you require example-a-961b4c22==1.0.0, we can conclude that your requirements are unsatisfiable. - "### + error: No solution found when resolving dependencies: + Caused by: Because example-a-961b4c22 was not found in the package registry and you require example-a-961b4c22==1.0.0, we can conclude that your requirements are unsatisfiable. + " ); Ok(()) @@ -4910,22 +4910,22 @@ fn require_hashes_registry_invalid_hash() -> Result<()> { .arg("--reinstall") .arg("--require-hashes") .arg("--index-url") - .arg("https://astral-test.github.io/astral-test-hash/invalid-hash/simple-html/"), @r###" + .arg("https://astral-test.github.io/astral-test-hash/invalid-hash/simple-html/"), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- Resolved 1 package in [TIME] - × Failed to download `example-a-961b4c22==1.0.0` - ╰─▶ Hash mismatch for `example-a-961b4c22==1.0.0` - - Expected: - sha256:123 - - Computed: - sha256:5d69f0b590514103234f0c3526563856f04d044d8d0ea1073a843ae429b3187e - "### + error: Failed to download `example-a-961b4c22==1.0.0` + Caused by: Hash mismatch for `example-a-961b4c22==1.0.0` + + Expected: + sha256:123 + + Computed: + sha256:5d69f0b590514103234f0c3526563856f04d044d8d0ea1073a843ae429b3187e + " ); // Second, request the invalid hash, that the registry _thinks_ is correct. We should reject it. @@ -4939,22 +4939,22 @@ fn require_hashes_registry_invalid_hash() -> Result<()> { .arg("--reinstall") .arg("--require-hashes") .arg("--index-url") - .arg("https://astral-test.github.io/astral-test-hash/invalid-hash/simple-html/"), @r###" + .arg("https://astral-test.github.io/astral-test-hash/invalid-hash/simple-html/"), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- Resolved 1 package in [TIME] - × Failed to download `example-a-961b4c22==1.0.0` - ╰─▶ Hash mismatch for `example-a-961b4c22==1.0.0` - - Expected: - sha256:8838f9d005ff0432b258ba648d9cabb1cbdf06ac29d14f788b02edae544032ea - - Computed: - sha256:5d69f0b590514103234f0c3526563856f04d044d8d0ea1073a843ae429b3187e - "### + error: Failed to download `example-a-961b4c22==1.0.0` + Caused by: Hash mismatch for `example-a-961b4c22==1.0.0` + + Expected: + sha256:8838f9d005ff0432b258ba648d9cabb1cbdf06ac29d14f788b02edae544032ea + + Computed: + sha256:5d69f0b590514103234f0c3526563856f04d044d8d0ea1073a843ae429b3187e + " ); // Third, request the correct hash, that the registry _thinks_ is correct. We should accept @@ -5022,23 +5022,23 @@ fn require_hashes_registry_invalid_hash() -> Result<()> { .arg("--reinstall") .arg("--require-hashes") .arg("--index-url") - .arg("https://astral-test.github.io/astral-test-hash/invalid-hash/simple-html/"), @r###" + .arg("https://astral-test.github.io/astral-test-hash/invalid-hash/simple-html/"), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- Resolved 1 package in [TIME] - × Failed to download and build `example-a-961b4c22==1.0.0` - ╰─▶ Hash mismatch for `example-a-961b4c22==1.0.0` - - Expected: - sha256:5d69f0b590514103234f0c3526563856f04d044d8d0ea1073a843ae429b3187e - sha256:a3cf07a05aac526131a2e8b6e4375ee6c6eaac8add05b88035e960ac6cd999ee - - Computed: - sha256:294e788dbe500fdc39e8b88e82652ab67409a1dc9dd06543d0fe0ae31b713eb3 - "### + error: Failed to download and build `example-a-961b4c22==1.0.0` + Caused by: Hash mismatch for `example-a-961b4c22==1.0.0` + + Expected: + sha256:5d69f0b590514103234f0c3526563856f04d044d8d0ea1073a843ae429b3187e + sha256:a3cf07a05aac526131a2e8b6e4375ee6c6eaac8add05b88035e960ac6cd999ee + + Computed: + sha256:294e788dbe500fdc39e8b88e82652ab67409a1dc9dd06543d0fe0ae31b713eb3 + " ); Ok(()) @@ -5106,22 +5106,22 @@ fn require_hashes_url_invalid() -> Result<()> { uv_snapshot!(context.pip_sync() .arg("requirements.txt") - .arg("--require-hashes"), @r###" + .arg("--require-hashes"), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- Resolved 1 package in [TIME] - × Failed to download `iniconfig @ https://files.pythonhosted.org/packages/ef/a6/62565a6e1cf69e10f5727360368e451d4b7f58beeac6173dc9db836a5b46/iniconfig-2.0.0-py3-none-any.whl#sha256=c6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374` - ╰─▶ Hash mismatch for `iniconfig @ https://files.pythonhosted.org/packages/ef/a6/62565a6e1cf69e10f5727360368e451d4b7f58beeac6173dc9db836a5b46/iniconfig-2.0.0-py3-none-any.whl#sha256=c6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374` - - Expected: - sha256:c6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374 - - Computed: - sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374 - "### + error: Failed to download `iniconfig @ https://files.pythonhosted.org/packages/ef/a6/62565a6e1cf69e10f5727360368e451d4b7f58beeac6173dc9db836a5b46/iniconfig-2.0.0-py3-none-any.whl#sha256=c6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374` + Caused by: Hash mismatch for `iniconfig @ https://files.pythonhosted.org/packages/ef/a6/62565a6e1cf69e10f5727360368e451d4b7f58beeac6173dc9db836a5b46/iniconfig-2.0.0-py3-none-any.whl#sha256=c6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374` + + Expected: + sha256:c6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374 + + Computed: + sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374 + " ); Ok(()) @@ -5138,22 +5138,22 @@ fn require_hashes_url_ignore() -> Result<()> { uv_snapshot!(context.pip_sync() .arg("requirements.txt") - .arg("--require-hashes"), @r###" + .arg("--require-hashes"), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- Resolved 1 package in [TIME] - × Failed to download `iniconfig @ https://files.pythonhosted.org/packages/ef/a6/62565a6e1cf69e10f5727360368e451d4b7f58beeac6173dc9db836a5b46/iniconfig-2.0.0-py3-none-any.whl#sha256=b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374` - ╰─▶ Hash mismatch for `iniconfig @ https://files.pythonhosted.org/packages/ef/a6/62565a6e1cf69e10f5727360368e451d4b7f58beeac6173dc9db836a5b46/iniconfig-2.0.0-py3-none-any.whl#sha256=b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374` - - Expected: - sha256:c6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374 - - Computed: - sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374 - "### + error: Failed to download `iniconfig @ https://files.pythonhosted.org/packages/ef/a6/62565a6e1cf69e10f5727360368e451d4b7f58beeac6173dc9db836a5b46/iniconfig-2.0.0-py3-none-any.whl#sha256=b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374` + Caused by: Hash mismatch for `iniconfig @ https://files.pythonhosted.org/packages/ef/a6/62565a6e1cf69e10f5727360368e451d4b7f58beeac6173dc9db836a5b46/iniconfig-2.0.0-py3-none-any.whl#sha256=b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374` + + Expected: + sha256:c6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374 + + Computed: + sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374 + " ); Ok(()) @@ -5549,18 +5549,18 @@ fn incompatible_build_constraint() -> Result<()> { uv_snapshot!(context.pip_sync() .arg("requirements.txt") .arg("--build-constraint") - .arg("build_constraints.txt"), @r###" + .arg("build_constraints.txt"), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- Resolved 1 package in [TIME] - × Failed to download and build `requests==1.2.0` - ├─▶ Failed to resolve requirements from `setup.py` build - ├─▶ No solution found when resolving: `setuptools>=40.8.0` - ╰─▶ Because you require setuptools>=40.8.0 and setuptools==1, we can conclude that your requirements are unsatisfiable. - "### + error: Failed to download and build `requests==1.2.0` + Caused by: Failed to resolve requirements from `setup.py` build + Caused by: No solution found when resolving: `setuptools>=40.8.0` + Caused by: Because you require setuptools>=40.8.0 and setuptools==1, we can conclude that your requirements are unsatisfiable. + " ); Ok(()) diff --git a/crates/uv/tests/it/run.rs b/crates/uv/tests/it/run.rs index 2350b178a..7a5852162 100644 --- a/crates/uv/tests/it/run.rs +++ b/crates/uv/tests/it/run.rs @@ -414,15 +414,15 @@ fn run_pep723_script() -> Result<()> { })?; // Running a script with `--group` should warn. - uv_snapshot!(context.filters(), context.run().arg("--group").arg("foo").arg("main.py"), @r###" + uv_snapshot!(context.filters(), context.run().arg("--group").arg("foo").arg("main.py"), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- - × No solution found when resolving script dependencies: - ╰─▶ Because there are no versions of add and you require add, we can conclude that your requirements are unsatisfiable. - "###); + error: No solution found when resolving script dependencies: + Caused by: Because there are no versions of add and you require add, we can conclude that your requirements are unsatisfiable. + "); // If the script can't be resolved, we should reference the script. let test_script = context.temp_dir.child("main.py"); @@ -436,15 +436,15 @@ fn run_pep723_script() -> Result<()> { "# })?; - uv_snapshot!(context.filters(), context.run().arg("--no-project").arg("main.py"), @r###" + uv_snapshot!(context.filters(), context.run().arg("--no-project").arg("main.py"), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- - × No solution found when resolving script dependencies: - ╰─▶ Because there are no versions of add and you require add, we can conclude that your requirements are unsatisfiable. - "###); + error: No solution found when resolving script dependencies: + Caused by: Because there are no versions of add and you require add, we can conclude that your requirements are unsatisfiable. + "); // If the script contains an unclosed PEP 723 tag, we should error. let test_script = context.temp_dir.child("main.py"); @@ -786,17 +786,17 @@ fn run_pep723_script_build_constraints() -> Result<()> { "# })?; - uv_snapshot!(context.filters(), context.run().arg("main.py"), @r###" + uv_snapshot!(context.filters(), context.run().arg("main.py"), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- - × Failed to download and build `requests==1.2.0` - ├─▶ Failed to resolve requirements from `setup.py` build - ├─▶ No solution found when resolving: `setuptools>=40.8.0` - ╰─▶ Because you require setuptools>=40.8.0 and setuptools==1, we can conclude that your requirements are unsatisfiable. - "###); + error: Failed to download and build `requests==1.2.0` + Caused by: Failed to resolve requirements from `setup.py` build + Caused by: No solution found when resolving: `setuptools>=40.8.0` + Caused by: Because you require setuptools>=40.8.0 and setuptools==1, we can conclude that your requirements are unsatisfiable. + "); // Compatible build constraints. test_script.write_str(indoc! { r#" @@ -1256,7 +1256,7 @@ fn run_with() -> Result<()> { "); // If the dependencies can't be resolved, we should reference `--with`. - uv_snapshot!(context.filters(), context.run().arg("--with").arg("add").arg("main.py"), @r###" + uv_snapshot!(context.filters(), context.run().arg("--with").arg("add").arg("main.py"), @r" success: false exit_code: 1 ----- stdout ----- @@ -1264,9 +1264,9 @@ fn run_with() -> Result<()> { ----- stderr ----- Resolved 2 packages in [TIME] Audited 2 packages in [TIME] - × No solution found when resolving `--with` dependencies: - ╰─▶ Because there are no versions of add and you require add, we can conclude that your requirements are unsatisfiable. - "###); + error: No solution found when resolving `--with` dependencies: + Caused by: Because there are no versions of add and you require add, we can conclude that your requirements are unsatisfiable. + "); Ok(()) } @@ -1608,10 +1608,10 @@ fn run_with_build_constraints() -> Result<()> { + idna==3.6 + sniffio==1.3.1 + typing-extensions==4.10.0 - × Failed to download and build `requests==1.2.0` - ├─▶ Failed to resolve requirements from `setup.py` build - ├─▶ No solution found when resolving: `setuptools>=40.8.0` - ╰─▶ Because you require setuptools>=40.8.0 and setuptools==1, we can conclude that your requirements are unsatisfiable. + error: Failed to download and build `requests==1.2.0` + Caused by: Failed to resolve requirements from `setup.py` build + Caused by: No solution found when resolving: `setuptools>=40.8.0` + Caused by: Because you require setuptools>=40.8.0 and setuptools==1, we can conclude that your requirements are unsatisfiable. "); // Change the build constraint to be compatible with `requests==1.2`. @@ -1940,7 +1940,7 @@ fn run_with_editable() -> Result<()> { "###); // If invalid, we should reference `--with-editable`. - uv_snapshot!(context.filters(), context.run().arg("--with-editable").arg("./foo").arg("main.py"), @r###" + uv_snapshot!(context.filters(), context.run().arg("--with-editable").arg("./foo").arg("main.py"), @r" success: false exit_code: 1 ----- stdout ----- @@ -1948,9 +1948,9 @@ fn run_with_editable() -> Result<()> { ----- stderr ----- Resolved 3 packages in [TIME] Audited 3 packages in [TIME] - × Failed to resolve `--with` requirement - ╰─▶ Distribution not found at: file://[TEMP_DIR]/foo - "###); + error: Failed to resolve `--with` requirement + Caused by: Distribution not found at: file://[TEMP_DIR]/foo + "); Ok(()) } diff --git a/crates/uv/tests/it/sync.rs b/crates/uv/tests/it/sync.rs index 35df3d50b..46871791f 100644 --- a/crates/uv/tests/it/sync.rs +++ b/crates/uv/tests/it/sync.rs @@ -775,12 +775,12 @@ fn group_requires_python_useful_defaults() -> Result<()> { ----- stderr ----- Using CPython 3.8.[X] interpreter at: [PYTHON-3.8] Creating virtual environment at: .venv - × No solution found when resolving dependencies for split (markers: python_full_version == '3.8.*'): - ╰─▶ Because the requested Python version (>=3.8) does not satisfy Python>=3.9 and sphinx==7.2.6 depends on Python>=3.9, we can conclude that sphinx==7.2.6 cannot be used. - And because only sphinx<=7.2.6 is available, we can conclude that sphinx>=7.2.6 cannot be used. - And because pharaohs-tomp:dev depends on sphinx>=7.2.6 and your project requires pharaohs-tomp:dev, we can conclude that your project's requirements are unsatisfiable. - - hint: The `requires-python` value (>=3.8) includes Python versions that are not supported by your dependencies (e.g., sphinx==7.2.6 only supports >=3.9). Consider using a more restrictive `requires-python` value (like >=3.9). + error: No solution found when resolving dependencies for split (markers: python_full_version == '3.8.*'): + Caused by: Because the requested Python version (>=3.8) does not satisfy Python>=3.9 and sphinx==7.2.6 depends on Python>=3.9, we can conclude that sphinx==7.2.6 cannot be used. + And because only sphinx<=7.2.6 is available, we can conclude that sphinx>=7.2.6 cannot be used. + And because pharaohs-tomp:dev depends on sphinx>=7.2.6 and your project requires pharaohs-tomp:dev, we can conclude that your project's requirements are unsatisfiable. + + hint: The `requires-python` value (>=3.8) includes Python versions that are not supported by your dependencies (e.g., sphinx==7.2.6 only supports >=3.9). Consider using a more restrictive `requires-python` value (like >=3.9). "); // Running `uv sync` should always fail, as now sphinx is involved @@ -790,12 +790,12 @@ fn group_requires_python_useful_defaults() -> Result<()> { ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies for split (markers: python_full_version == '3.8.*'): - ╰─▶ Because the requested Python version (>=3.8) does not satisfy Python>=3.9 and sphinx==7.2.6 depends on Python>=3.9, we can conclude that sphinx==7.2.6 cannot be used. - And because only sphinx<=7.2.6 is available, we can conclude that sphinx>=7.2.6 cannot be used. - And because pharaohs-tomp:dev depends on sphinx>=7.2.6 and your project requires pharaohs-tomp:dev, we can conclude that your project's requirements are unsatisfiable. - - hint: The `requires-python` value (>=3.8) includes Python versions that are not supported by your dependencies (e.g., sphinx==7.2.6 only supports >=3.9). Consider using a more restrictive `requires-python` value (like >=3.9). + error: No solution found when resolving dependencies for split (markers: python_full_version == '3.8.*'): + Caused by: Because the requested Python version (>=3.8) does not satisfy Python>=3.9 and sphinx==7.2.6 depends on Python>=3.9, we can conclude that sphinx==7.2.6 cannot be used. + And because only sphinx<=7.2.6 is available, we can conclude that sphinx>=7.2.6 cannot be used. + And because pharaohs-tomp:dev depends on sphinx>=7.2.6 and your project requires pharaohs-tomp:dev, we can conclude that your project's requirements are unsatisfiable. + + hint: The `requires-python` value (>=3.8) includes Python versions that are not supported by your dependencies (e.g., sphinx==7.2.6 only supports >=3.9). Consider using a more restrictive `requires-python` value (like >=3.9). "); // Adding group requires python should fix it @@ -919,12 +919,12 @@ fn group_requires_python_useful_non_defaults() -> Result<()> { ----- stderr ----- Using CPython 3.8.[X] interpreter at: [PYTHON-3.8] Creating virtual environment at: .venv - × No solution found when resolving dependencies for split (markers: python_full_version == '3.8.*'): - ╰─▶ Because the requested Python version (>=3.8) does not satisfy Python>=3.9 and sphinx==7.2.6 depends on Python>=3.9, we can conclude that sphinx==7.2.6 cannot be used. - And because only sphinx<=7.2.6 is available, we can conclude that sphinx>=7.2.6 cannot be used. - And because pharaohs-tomp:mygroup depends on sphinx>=7.2.6 and your project requires pharaohs-tomp:mygroup, we can conclude that your project's requirements are unsatisfiable. - - hint: The `requires-python` value (>=3.8) includes Python versions that are not supported by your dependencies (e.g., sphinx==7.2.6 only supports >=3.9). Consider using a more restrictive `requires-python` value (like >=3.9). + error: No solution found when resolving dependencies for split (markers: python_full_version == '3.8.*'): + Caused by: Because the requested Python version (>=3.8) does not satisfy Python>=3.9 and sphinx==7.2.6 depends on Python>=3.9, we can conclude that sphinx==7.2.6 cannot be used. + And because only sphinx<=7.2.6 is available, we can conclude that sphinx>=7.2.6 cannot be used. + And because pharaohs-tomp:mygroup depends on sphinx>=7.2.6 and your project requires pharaohs-tomp:mygroup, we can conclude that your project's requirements are unsatisfiable. + + hint: The `requires-python` value (>=3.8) includes Python versions that are not supported by your dependencies (e.g., sphinx==7.2.6 only supports >=3.9). Consider using a more restrictive `requires-python` value (like >=3.9). "); // Running `uv sync --group mygroup` should definitely fail, as now sphinx is involved @@ -935,12 +935,12 @@ fn group_requires_python_useful_non_defaults() -> Result<()> { ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies for split (markers: python_full_version == '3.8.*'): - ╰─▶ Because the requested Python version (>=3.8) does not satisfy Python>=3.9 and sphinx==7.2.6 depends on Python>=3.9, we can conclude that sphinx==7.2.6 cannot be used. - And because only sphinx<=7.2.6 is available, we can conclude that sphinx>=7.2.6 cannot be used. - And because pharaohs-tomp:mygroup depends on sphinx>=7.2.6 and your project requires pharaohs-tomp:mygroup, we can conclude that your project's requirements are unsatisfiable. - - hint: The `requires-python` value (>=3.8) includes Python versions that are not supported by your dependencies (e.g., sphinx==7.2.6 only supports >=3.9). Consider using a more restrictive `requires-python` value (like >=3.9). + error: No solution found when resolving dependencies for split (markers: python_full_version == '3.8.*'): + Caused by: Because the requested Python version (>=3.8) does not satisfy Python>=3.9 and sphinx==7.2.6 depends on Python>=3.9, we can conclude that sphinx==7.2.6 cannot be used. + And because only sphinx<=7.2.6 is available, we can conclude that sphinx>=7.2.6 cannot be used. + And because pharaohs-tomp:mygroup depends on sphinx>=7.2.6 and your project requires pharaohs-tomp:mygroup, we can conclude that your project's requirements are unsatisfiable. + + hint: The `requires-python` value (>=3.8) includes Python versions that are not supported by your dependencies (e.g., sphinx==7.2.6 only supports >=3.9). Consider using a more restrictive `requires-python` value (like >=3.9). "); // Adding group requires python should fix it @@ -1509,22 +1509,23 @@ fn sync_build_isolation_package() -> Result<()> { ----- stderr ----- Resolved 2 packages in [TIME] - × Failed to build `source-distribution @ https://files.pythonhosted.org/packages/10/1f/57aa4cce1b1abf6b433106676e15f9fa2c92ed2bd4cf77c3b50a9e9ac773/source_distribution-0.0.1.tar.gz` - ├─▶ The build backend returned an error - ╰─▶ Call to `hatchling.build.build_wheel` failed (exit status: 1) + error: Failed to build `source-distribution @ https://files.pythonhosted.org/packages/10/1f/57aa4cce1b1abf6b433106676e15f9fa2c92ed2bd4cf77c3b50a9e9ac773/source_distribution-0.0.1.tar.gz` + Caused by: The build backend returned an error + Caused by: Call to `hatchling.build.build_wheel` failed (exit status: 1) + + [stderr] + Traceback (most recent call last): + File "", line 8, in + ModuleNotFoundError: No module named 'hatchling' + + hint: This error likely indicates that `source-distribution` depends on `hatchling`, but doesn't declare it as a build dependency. If `source-distribution` is a first-party package, consider adding `hatchling` to its `build-system.requires`. Otherwise, either add it to your `pyproject.toml` under: + + [tool.uv.extra-build-dependencies] + source-distribution = ["hatchling"] + + or `uv pip install hatchling` into the environment and re-run with `--no-build-isolation`. - [stderr] - Traceback (most recent call last): - File "", line 8, in - ModuleNotFoundError: No module named 'hatchling' - - hint: This error likely indicates that `source-distribution` depends on `hatchling`, but doesn't declare it as a build dependency. If `source-distribution` is a first-party package, consider adding `hatchling` to its `build-system.requires`. Otherwise, either add it to your `pyproject.toml` under: - - [tool.uv.extra-build-dependencies] - source-distribution = ["hatchling"] - - or `uv pip install hatchling` into the environment and re-run with `--no-build-isolation`. - help: `source-distribution` was included because `project` (v0.1.0) depends on `source-distribution` + hint: `source-distribution` was included because `project` (v0.1.0) depends on `source-distribution` "#); // Install `hatchling` for `source-distribution`. @@ -1597,22 +1598,23 @@ fn sync_build_isolation_package_order() -> Result<()> { ----- stderr ----- Resolved 2 packages in [TIME] - × Failed to build `source-distribution @ https://files.pythonhosted.org/packages/10/1f/57aa4cce1b1abf6b433106676e15f9fa2c92ed2bd4cf77c3b50a9e9ac773/source_distribution-0.0.1.tar.gz` - ├─▶ The build backend returned an error - ╰─▶ Call to `hatchling.build.build_wheel` failed (exit status: 1) + error: Failed to build `source-distribution @ https://files.pythonhosted.org/packages/10/1f/57aa4cce1b1abf6b433106676e15f9fa2c92ed2bd4cf77c3b50a9e9ac773/source_distribution-0.0.1.tar.gz` + Caused by: The build backend returned an error + Caused by: Call to `hatchling.build.build_wheel` failed (exit status: 1) + + [stderr] + Traceback (most recent call last): + File "", line 8, in + ModuleNotFoundError: No module named 'hatchling' + + hint: This error likely indicates that `source-distribution` depends on `hatchling`, but doesn't declare it as a build dependency. If `source-distribution` is a first-party package, consider adding `hatchling` to its `build-system.requires`. Otherwise, either add it to your `pyproject.toml` under: + + [tool.uv.extra-build-dependencies] + source-distribution = ["hatchling"] + + or `uv pip install hatchling` into the environment and re-run with `--no-build-isolation`. - [stderr] - Traceback (most recent call last): - File "", line 8, in - ModuleNotFoundError: No module named 'hatchling' - - hint: This error likely indicates that `source-distribution` depends on `hatchling`, but doesn't declare it as a build dependency. If `source-distribution` is a first-party package, consider adding `hatchling` to its `build-system.requires`. Otherwise, either add it to your `pyproject.toml` under: - - [tool.uv.extra-build-dependencies] - source-distribution = ["hatchling"] - - or `uv pip install hatchling` into the environment and re-run with `--no-build-isolation`. - help: `source-distribution` was included because `project` (v0.1.0) depends on `source-distribution` + hint: `source-distribution` was included because `project` (v0.1.0) depends on `source-distribution` "#); // Add `hatchling`. @@ -1767,22 +1769,23 @@ fn sync_build_isolation_extra() -> Result<()> { Resolved [N] packages in [TIME] Prepared [N] packages in [TIME] Installed [N] packages in [TIME] - × Failed to build `source-distribution @ https://files.pythonhosted.org/packages/10/1f/57aa4cce1b1abf6b433106676e15f9fa2c92ed2bd4cf77c3b50a9e9ac773/source_distribution-0.0.1.tar.gz` - ├─▶ The build backend returned an error - ╰─▶ Call to `hatchling.build.build_wheel` failed (exit status: 1) + error: Failed to build `source-distribution @ https://files.pythonhosted.org/packages/10/1f/57aa4cce1b1abf6b433106676e15f9fa2c92ed2bd4cf77c3b50a9e9ac773/source_distribution-0.0.1.tar.gz` + Caused by: The build backend returned an error + Caused by: Call to `hatchling.build.build_wheel` failed (exit status: 1) + + [stderr] + Traceback (most recent call last): + File "", line 8, in + ModuleNotFoundError: No module named 'hatchling' + + hint: This error likely indicates that `source-distribution` depends on `hatchling`, but doesn't declare it as a build dependency. If `source-distribution` is a first-party package, consider adding `hatchling` to its `build-system.requires`. Otherwise, either add it to your `pyproject.toml` under: + + [tool.uv.extra-build-dependencies] + source-distribution = ["hatchling"] + + or `uv pip install hatchling` into the environment and re-run with `--no-build-isolation`. - [stderr] - Traceback (most recent call last): - File "", line 8, in - ModuleNotFoundError: No module named 'hatchling' - - hint: This error likely indicates that `source-distribution` depends on `hatchling`, but doesn't declare it as a build dependency. If `source-distribution` is a first-party package, consider adding `hatchling` to its `build-system.requires`. Otherwise, either add it to your `pyproject.toml` under: - - [tool.uv.extra-build-dependencies] - source-distribution = ["hatchling"] - - or `uv pip install hatchling` into the environment and re-run with `--no-build-isolation`. - help: `source-distribution` was included because `project[compile]` (v0.1.0) depends on `source-distribution` + hint: `source-distribution` was included because `project[compile]` (v0.1.0) depends on `source-distribution` "#); // Running `uv sync` with `--all-extras` should succeed, because we install the build dependencies @@ -1909,15 +1912,16 @@ fn sync_extra_build_dependencies() -> Result<()> { ----- stderr ----- Resolved [N] packages in [TIME] - × Failed to build `child @ file://[TEMP_DIR]/child` - ├─▶ The build backend returned an error - ╰─▶ Call to `build_backend.build_wheel` failed (exit status: 1) + error: Failed to build `child @ file://[TEMP_DIR]/child` + Caused by: The build backend returned an error + Caused by: Call to `build_backend.build_wheel` failed (exit status: 1) + + [stderr] + Missing `anyio` module + + hint: This usually indicates a problem with the package or the build environment. - [stderr] - Missing `anyio` module - - hint: This usually indicates a problem with the package or the build environment. - help: `child` was included because `parent` (v0.1.0) depends on `child` + hint: `child` was included because `parent` (v0.1.0) depends on `child` "); // Adding `extra-build-dependencies` should solve the issue @@ -1987,15 +1991,16 @@ fn sync_extra_build_dependencies() -> Result<()> { ----- stderr ----- warning: The `extra-build-dependencies` option is experimental and may change without warning. Pass `--preview-features extra-build-dependencies` to disable this warning. Resolved [N] packages in [TIME] - × Failed to build `child @ file://[TEMP_DIR]/child` - ├─▶ The build backend returned an error - ╰─▶ Call to `build_backend.build_wheel` failed (exit status: 1) + error: Failed to build `child @ file://[TEMP_DIR]/child` + Caused by: The build backend returned an error + Caused by: Call to `build_backend.build_wheel` failed (exit status: 1) + + [stderr] + Missing `anyio` module + + hint: This usually indicates a problem with the package or the build environment. - [stderr] - Missing `anyio` module - - hint: This usually indicates a problem with the package or the build environment. - help: `child` was included because `parent` (v0.1.0) depends on `child` + hint: `child` was included because `parent` (v0.1.0) depends on `child` "); // Write a test package that arbitrarily bans `anyio` at build time @@ -2056,15 +2061,16 @@ fn sync_extra_build_dependencies() -> Result<()> { ----- stderr ----- warning: The `extra-build-dependencies` option is experimental and may change without warning. Pass `--preview-features extra-build-dependencies` to disable this warning. Resolved [N] packages in [TIME] - × Failed to build `bad-child @ file://[TEMP_DIR]/bad_child` - ├─▶ The build backend returned an error - ╰─▶ Call to `build_backend.build_wheel` failed (exit status: 1) + error: Failed to build `bad-child @ file://[TEMP_DIR]/bad_child` + Caused by: The build backend returned an error + Caused by: Call to `build_backend.build_wheel` failed (exit status: 1) + + [stderr] + Found `anyio` module + + hint: This usually indicates a problem with the package or the build environment. - [stderr] - Found `anyio` module - - hint: This usually indicates a problem with the package or the build environment. - help: `bad-child` was included because `parent` (v0.1.0) depends on `bad-child` + hint: `bad-child` was included because `parent` (v0.1.0) depends on `bad-child` "); // But `anyio` is not provided to `bad_child` if scoped to `child` @@ -2151,14 +2157,14 @@ fn sync_extra_build_dependencies_setuptools_legacy() -> Result<()> { ----- stdout ----- ----- stderr ----- - × Failed to build `child @ file://[TEMP_DIR]/child` - ├─▶ The build backend returned an error - ╰─▶ Call to `setuptools.build_meta:__legacy__.build_wheel` failed (exit status: 1) - - [stderr] - Missing `anyio` module - - hint: This usually indicates a problem with the package or the build environment. + error: Failed to build `child @ file://[TEMP_DIR]/child` + Caused by: The build backend returned an error + Caused by: Call to `setuptools.build_meta:__legacy__.build_wheel` failed (exit status: 1) + + [stderr] + Missing `anyio` module + + hint: This usually indicates a problem with the package or the build environment. "); // Adding `extra-build-dependencies` should solve the issue @@ -2257,15 +2263,16 @@ fn sync_extra_build_dependencies_setuptools() -> Result<()> { ----- stderr ----- Resolved [N] packages in [TIME] - × Failed to build `child @ file://[TEMP_DIR]/child` - ├─▶ The build backend returned an error - ╰─▶ Call to `setuptools.build_meta.build_wheel` failed (exit status: 1) + error: Failed to build `child @ file://[TEMP_DIR]/child` + Caused by: The build backend returned an error + Caused by: Call to `setuptools.build_meta.build_wheel` failed (exit status: 1) + + [stderr] + Missing `anyio` module + + hint: This usually indicates a problem with the package or the build environment. - [stderr] - Missing `anyio` module - - hint: This usually indicates a problem with the package or the build environment. - help: `child` was included because `parent` (v0.1.0) depends on `child` + hint: `child` was included because `parent` (v0.1.0) depends on `child` "); // Adding `extra-build-dependencies` should solve the issue @@ -2448,15 +2455,16 @@ fn sync_extra_build_dependencies_index() -> Result<()> { ----- stderr ----- Resolved [N] packages in [TIME] - × Failed to build `child @ file://[TEMP_DIR]/child` - ├─▶ The build backend returned an error - ╰─▶ Call to `build_backend.build_wheel` failed (exit status: 1) + error: Failed to build `child @ file://[TEMP_DIR]/child` + Caused by: The build backend returned an error + Caused by: Call to `build_backend.build_wheel` failed (exit status: 1) + + [stderr] + Expected `anyio` version 3.0 but got 4.3.0 + + hint: This usually indicates a problem with the package or the build environment. - [stderr] - Expected `anyio` version 3.0 but got 4.3.0 - - hint: This usually indicates a problem with the package or the build environment. - help: `child` was included because `parent` (v0.1.0) depends on `child` + hint: `child` was included because `parent` (v0.1.0) depends on `child` "); // Ensure that we're resolving to `4.3.0`, the "latest" on PyPI. @@ -2503,15 +2511,16 @@ fn sync_extra_build_dependencies_index() -> Result<()> { ----- stderr ----- warning: The `extra-build-dependencies` option is experimental and may change without warning. Pass `--preview-features extra-build-dependencies` to disable this warning. Resolved [N] packages in [TIME] - × Failed to build `child @ file://[TEMP_DIR]/child` - ├─▶ The build backend returned an error - ╰─▶ Call to `build_backend.build_wheel` failed (exit status: 1) + error: Failed to build `child @ file://[TEMP_DIR]/child` + Caused by: The build backend returned an error + Caused by: Call to `build_backend.build_wheel` failed (exit status: 1) + + [stderr] + Expected `anyio` version 4.3 but got 3.5.0 + + hint: This usually indicates a problem with the package or the build environment. - [stderr] - Expected `anyio` version 4.3 but got 3.5.0 - - hint: This usually indicates a problem with the package or the build environment. - help: `child` was included because `parent` (v0.1.0) depends on `child` + hint: `child` was included because `parent` (v0.1.0) depends on `child` "); uv_snapshot!(context.filters(), context.sync() @@ -2601,15 +2610,16 @@ fn sync_extra_build_dependencies_sources_from_child() -> Result<()> { ----- stderr ----- warning: The `extra-build-dependencies` option is experimental and may change without warning. Pass `--preview-features extra-build-dependencies` to disable this warning. Resolved [N] packages in [TIME] - × Failed to build `child @ file://[TEMP_DIR]/child` - ├─▶ The build backend returned an error - ╰─▶ Call to `build_backend.build_wheel` failed (exit status: 1) + error: Failed to build `child @ file://[TEMP_DIR]/child` + Caused by: The build backend returned an error + Caused by: Call to `build_backend.build_wheel` failed (exit status: 1) + + [stderr] + Found system anyio instead of local anyio + + hint: This usually indicates a problem with the package or the build environment. - [stderr] - Found system anyio instead of local anyio - - hint: This usually indicates a problem with the package or the build environment. - help: `child` was included because `project` (v0.1.0) depends on `child` + hint: `child` was included because `project` (v0.1.0) depends on `child` "); Ok(()) @@ -2665,24 +2675,25 @@ fn sync_build_dependencies_module_error_hints() -> Result<()> { ----- stderr ----- Resolved [N] packages in [TIME] - × Failed to build `child @ file://[TEMP_DIR]/child` - ├─▶ The build backend returned an error - ╰─▶ Call to `build_backend.build_wheel` failed (exit status: 1) + error: Failed to build `child @ file://[TEMP_DIR]/child` + Caused by: The build backend returned an error + Caused by: Call to `build_backend.build_wheel` failed (exit status: 1) + + [stderr] + Traceback (most recent call last): + File "", line 8, in + File "[TEMP_DIR]/child/build_backend.py", line 4, in + import anyio + ModuleNotFoundError: No module named 'anyio' + + hint: This error likely indicates that `child@0.1.0` depends on `anyio`, but doesn't declare it as a build dependency. If `child` is a first-party package, consider adding `anyio` to its `build-system.requires`. Otherwise, either add it to your `pyproject.toml` under: + + [tool.uv.extra-build-dependencies] + child = ["anyio"] + + or `uv pip install anyio` into the environment and re-run with `--no-build-isolation`. - [stderr] - Traceback (most recent call last): - File "", line 8, in - File "[TEMP_DIR]/child/build_backend.py", line 4, in - import anyio - ModuleNotFoundError: No module named 'anyio' - - hint: This error likely indicates that `child@0.1.0` depends on `anyio`, but doesn't declare it as a build dependency. If `child` is a first-party package, consider adding `anyio` to its `build-system.requires`. Otherwise, either add it to your `pyproject.toml` under: - - [tool.uv.extra-build-dependencies] - child = ["anyio"] - - or `uv pip install anyio` into the environment and re-run with `--no-build-isolation`. - help: `child` was included because `parent` (v0.1.0) depends on `child` + hint: `child` was included because `parent` (v0.1.0) depends on `child` "#); // Adding `extra-build-dependencies` should solve the issue @@ -2733,24 +2744,25 @@ fn sync_build_dependencies_module_error_hints() -> Result<()> { ----- stderr ----- warning: The `extra-build-dependencies` option is experimental and may change without warning. Pass `--preview-features extra-build-dependencies` to disable this warning. Resolved [N] packages in [TIME] - × Failed to build `child @ file://[TEMP_DIR]/child` - ├─▶ The build backend returned an error - ╰─▶ Call to `build_backend.build_wheel` failed (exit status: 1) + error: Failed to build `child @ file://[TEMP_DIR]/child` + Caused by: The build backend returned an error + Caused by: Call to `build_backend.build_wheel` failed (exit status: 1) + + [stderr] + Traceback (most recent call last): + File "", line 8, in + File "[TEMP_DIR]/child/build_backend.py", line 5, in + import sklearn + ModuleNotFoundError: No module named 'sklearn' + + hint: This error likely indicates that `child@0.1.0` depends on `scikit-learn`, but doesn't declare it as a build dependency. If `child` is a first-party package, consider adding `scikit-learn` to its `build-system.requires`. Otherwise, either add it to your `pyproject.toml` under: + + [tool.uv.extra-build-dependencies] + child = ["scikit-learn"] + + or `uv pip install scikit-learn` into the environment and re-run with `--no-build-isolation`. - [stderr] - Traceback (most recent call last): - File "", line 8, in - File "[TEMP_DIR]/child/build_backend.py", line 5, in - import sklearn - ModuleNotFoundError: No module named 'sklearn' - - hint: This error likely indicates that `child@0.1.0` depends on `scikit-learn`, but doesn't declare it as a build dependency. If `child` is a first-party package, consider adding `scikit-learn` to its `build-system.requires`. Otherwise, either add it to your `pyproject.toml` under: - - [tool.uv.extra-build-dependencies] - child = ["scikit-learn"] - - or `uv pip install scikit-learn` into the environment and re-run with `--no-build-isolation`. - help: `child` was included because `parent` (v0.1.0) depends on `child` + hint: `child` was included because `parent` (v0.1.0) depends on `child` "#); // Adding `extra-build-dependencies` should solve the issue @@ -5811,14 +5823,14 @@ fn sync_extra_build_dependencies_script() -> Result<()> { ----- stderr ----- Creating script environment at: [CACHE_DIR]/environments-v2/script-[HASH] Resolved [N] packages in [TIME] - × Failed to build `child @ file://[TEMP_DIR]/child` - ├─▶ The build backend returned an error - ╰─▶ Call to `build_backend.build_wheel` failed (exit status: 1) - - [stderr] - Missing `anyio` module - - hint: This usually indicates a problem with the package or the build environment. + error: Failed to build `child @ file://[TEMP_DIR]/child` + Caused by: The build backend returned an error + Caused by: Call to `build_backend.build_wheel` failed (exit status: 1) + + [stderr] + Missing `anyio` module + + hint: This usually indicates a problem with the package or the build environment. "); // Add extra build dependencies to the script @@ -9507,30 +9519,31 @@ fn sync_derivation_chain() -> Result<()> { ----- stderr ----- Resolved 2 packages in [TIME] - × Failed to build `wsgiref==0.1.2` - ├─▶ The build backend returned an error - ╰─▶ Call to `setuptools.build_meta:__legacy__.build_wheel` failed (exit status: 1) + error: Failed to build `wsgiref==0.1.2` + Caused by: The build backend returned an error + Caused by: Call to `setuptools.build_meta:__legacy__.build_wheel` failed (exit status: 1) + + [stderr] + Traceback (most recent call last): + File "", line 14, in + File "[CACHE_DIR]/builds-v0/[TMP]/build_meta.py", line 325, in get_requires_for_build_wheel + return self._get_build_requires(config_settings, requirements=['wheel']) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "[CACHE_DIR]/builds-v0/[TMP]/build_meta.py", line 295, in _get_build_requires + self.run_setup() + File "[CACHE_DIR]/builds-v0/[TMP]/build_meta.py", line 487, in run_setup + super().run_setup(setup_script=setup_script) + File "[CACHE_DIR]/builds-v0/[TMP]/build_meta.py", line 311, in run_setup + exec(code, locals()) + File "", line 5, in + File "[CACHE_DIR]/[TMP]/src/ez_setup/__init__.py", line 170 + print "Setuptools version",version,"or greater has been installed." + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + SyntaxError: Missing parentheses in call to 'print'. Did you mean print(...)? + + hint: This usually indicates a problem with the package or the build environment. - [stderr] - Traceback (most recent call last): - File "", line 14, in - File "[CACHE_DIR]/builds-v0/[TMP]/build_meta.py", line 325, in get_requires_for_build_wheel - return self._get_build_requires(config_settings, requirements=['wheel']) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "[CACHE_DIR]/builds-v0/[TMP]/build_meta.py", line 295, in _get_build_requires - self.run_setup() - File "[CACHE_DIR]/builds-v0/[TMP]/build_meta.py", line 487, in run_setup - super().run_setup(setup_script=setup_script) - File "[CACHE_DIR]/builds-v0/[TMP]/build_meta.py", line 311, in run_setup - exec(code, locals()) - File "", line 5, in - File "[CACHE_DIR]/[TMP]/src/ez_setup/__init__.py", line 170 - print "Setuptools version",version,"or greater has been installed." - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - SyntaxError: Missing parentheses in call to 'print'. Did you mean print(...)? - - hint: This usually indicates a problem with the package or the build environment. - help: `wsgiref` (v0.1.2) was included because `project` (v0.1.0) depends on `wsgiref` + hint: `wsgiref` (v0.1.2) was included because `project` (v0.1.0) depends on `wsgiref` "#); Ok(()) @@ -9570,30 +9583,31 @@ fn sync_derivation_chain_extra() -> Result<()> { ----- stderr ----- Resolved 2 packages in [TIME] - × Failed to build `wsgiref==0.1.2` - ├─▶ The build backend returned an error - ╰─▶ Call to `setuptools.build_meta:__legacy__.build_wheel` failed (exit status: 1) + error: Failed to build `wsgiref==0.1.2` + Caused by: The build backend returned an error + Caused by: Call to `setuptools.build_meta:__legacy__.build_wheel` failed (exit status: 1) + + [stderr] + Traceback (most recent call last): + File "", line 14, in + File "[CACHE_DIR]/builds-v0/[TMP]/build_meta.py", line 325, in get_requires_for_build_wheel + return self._get_build_requires(config_settings, requirements=['wheel']) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "[CACHE_DIR]/builds-v0/[TMP]/build_meta.py", line 295, in _get_build_requires + self.run_setup() + File "[CACHE_DIR]/builds-v0/[TMP]/build_meta.py", line 487, in run_setup + super().run_setup(setup_script=setup_script) + File "[CACHE_DIR]/builds-v0/[TMP]/build_meta.py", line 311, in run_setup + exec(code, locals()) + File "", line 5, in + File "[CACHE_DIR]/[TMP]/src/ez_setup/__init__.py", line 170 + print "Setuptools version",version,"or greater has been installed." + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + SyntaxError: Missing parentheses in call to 'print'. Did you mean print(...)? + + hint: This usually indicates a problem with the package or the build environment. - [stderr] - Traceback (most recent call last): - File "", line 14, in - File "[CACHE_DIR]/builds-v0/[TMP]/build_meta.py", line 325, in get_requires_for_build_wheel - return self._get_build_requires(config_settings, requirements=['wheel']) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "[CACHE_DIR]/builds-v0/[TMP]/build_meta.py", line 295, in _get_build_requires - self.run_setup() - File "[CACHE_DIR]/builds-v0/[TMP]/build_meta.py", line 487, in run_setup - super().run_setup(setup_script=setup_script) - File "[CACHE_DIR]/builds-v0/[TMP]/build_meta.py", line 311, in run_setup - exec(code, locals()) - File "", line 5, in - File "[CACHE_DIR]/[TMP]/src/ez_setup/__init__.py", line 170 - print "Setuptools version",version,"or greater has been installed." - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - SyntaxError: Missing parentheses in call to 'print'. Did you mean print(...)? - - hint: This usually indicates a problem with the package or the build environment. - help: `wsgiref` (v0.1.2) was included because `project[wsgi]` (v0.1.0) depends on `wsgiref` + hint: `wsgiref` (v0.1.2) was included because `project[wsgi]` (v0.1.0) depends on `wsgiref` "#); Ok(()) @@ -9635,30 +9649,31 @@ fn sync_derivation_chain_group() -> Result<()> { ----- stderr ----- Resolved 2 packages in [TIME] - × Failed to build `wsgiref==0.1.2` - ├─▶ The build backend returned an error - ╰─▶ Call to `setuptools.build_meta:__legacy__.build_wheel` failed (exit status: 1) + error: Failed to build `wsgiref==0.1.2` + Caused by: The build backend returned an error + Caused by: Call to `setuptools.build_meta:__legacy__.build_wheel` failed (exit status: 1) + + [stderr] + Traceback (most recent call last): + File "", line 14, in + File "[CACHE_DIR]/builds-v0/[TMP]/build_meta.py", line 325, in get_requires_for_build_wheel + return self._get_build_requires(config_settings, requirements=['wheel']) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "[CACHE_DIR]/builds-v0/[TMP]/build_meta.py", line 295, in _get_build_requires + self.run_setup() + File "[CACHE_DIR]/builds-v0/[TMP]/build_meta.py", line 487, in run_setup + super().run_setup(setup_script=setup_script) + File "[CACHE_DIR]/builds-v0/[TMP]/build_meta.py", line 311, in run_setup + exec(code, locals()) + File "", line 5, in + File "[CACHE_DIR]/[TMP]/src/ez_setup/__init__.py", line 170 + print "Setuptools version",version,"or greater has been installed." + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + SyntaxError: Missing parentheses in call to 'print'. Did you mean print(...)? + + hint: This usually indicates a problem with the package or the build environment. - [stderr] - Traceback (most recent call last): - File "", line 14, in - File "[CACHE_DIR]/builds-v0/[TMP]/build_meta.py", line 325, in get_requires_for_build_wheel - return self._get_build_requires(config_settings, requirements=['wheel']) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "[CACHE_DIR]/builds-v0/[TMP]/build_meta.py", line 295, in _get_build_requires - self.run_setup() - File "[CACHE_DIR]/builds-v0/[TMP]/build_meta.py", line 487, in run_setup - super().run_setup(setup_script=setup_script) - File "[CACHE_DIR]/builds-v0/[TMP]/build_meta.py", line 311, in run_setup - exec(code, locals()) - File "", line 5, in - File "[CACHE_DIR]/[TMP]/src/ez_setup/__init__.py", line 170 - print "Setuptools version",version,"or greater has been installed." - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - SyntaxError: Missing parentheses in call to 'print'. Did you mean print(...)? - - hint: This usually indicates a problem with the package or the build environment. - help: `wsgiref` (v0.1.2) was included because `project:wsgi` (v0.1.0) depends on `wsgiref` + hint: `wsgiref` (v0.1.2) was included because `project:wsgi` (v0.1.0) depends on `wsgiref` "#); Ok(()) @@ -10103,9 +10118,10 @@ fn mismatched_name_self_editable() -> Result<()> { ----- stderr ----- Resolved 2 packages in [TIME] - × Failed to build `foo @ file://[TEMP_DIR]/` - ╰─▶ Package metadata name `project` does not match given name `foo` - help: `foo` was included because `project` (v0.1.0) depends on `foo` + error: Failed to build `foo @ file://[TEMP_DIR]/` + Caused by: Package metadata name `project` does not match given name `foo` + + hint: `foo` was included because `project` (v0.1.0) depends on `foo` "); Ok(()) @@ -10156,8 +10172,8 @@ fn mismatched_name_cached_wheel() -> Result<()> { ----- stdout ----- ----- stderr ----- - × Failed to download and build `foo @ https://files.pythonhosted.org/packages/d7/4b/cbd8e699e64a6f16ca3a8220661b5f83792b3017d0f79807cb8708d33913/iniconfig-2.0.0.tar.gz` - ╰─▶ Package metadata name `iniconfig` does not match given name `foo` + error: Failed to download and build `foo @ https://files.pythonhosted.org/packages/d7/4b/cbd8e699e64a6f16ca3a8220661b5f83792b3017d0f79807cb8708d33913/iniconfig-2.0.0.tar.gz` + Caused by: Package metadata name `iniconfig` does not match given name `foo` "); Ok(()) @@ -10429,15 +10445,16 @@ fn url_hash_mismatch() -> Result<()> { ----- stderr ----- Resolved 2 packages in [TIME] - × Failed to download and build `iniconfig @ https://files.pythonhosted.org/packages/d7/4b/cbd8e699e64a6f16ca3a8220661b5f83792b3017d0f79807cb8708d33913/iniconfig-2.0.0.tar.gz` - ╰─▶ Hash mismatch for `iniconfig @ https://files.pythonhosted.org/packages/d7/4b/cbd8e699e64a6f16ca3a8220661b5f83792b3017d0f79807cb8708d33913/iniconfig-2.0.0.tar.gz` + error: Failed to download and build `iniconfig @ https://files.pythonhosted.org/packages/d7/4b/cbd8e699e64a6f16ca3a8220661b5f83792b3017d0f79807cb8708d33913/iniconfig-2.0.0.tar.gz` + Caused by: Hash mismatch for `iniconfig @ https://files.pythonhosted.org/packages/d7/4b/cbd8e699e64a6f16ca3a8220661b5f83792b3017d0f79807cb8708d33913/iniconfig-2.0.0.tar.gz` + + Expected: + sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b4 + + Computed: + sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3 - Expected: - sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b4 - - Computed: - sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3 - help: `iniconfig` was included because `project` (v0.1.0) depends on `iniconfig` + hint: `iniconfig` was included because `project` (v0.1.0) depends on `iniconfig` "); Ok(()) @@ -10502,15 +10519,16 @@ fn path_hash_mismatch() -> Result<()> { ----- stderr ----- Resolved 2 packages in [TIME] - × Failed to build `iniconfig @ file://[TEMP_DIR]/iniconfig-2.0.0.tar.gz` - ╰─▶ Hash mismatch for `iniconfig @ file://[TEMP_DIR]/iniconfig-2.0.0.tar.gz` + error: Failed to build `iniconfig @ file://[TEMP_DIR]/iniconfig-2.0.0.tar.gz` + Caused by: Hash mismatch for `iniconfig @ file://[TEMP_DIR]/iniconfig-2.0.0.tar.gz` + + Expected: + sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b4 + + Computed: + sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3 - Expected: - sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b4 - - Computed: - sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3 - help: `iniconfig` was included because `project` (v0.1.0) depends on `iniconfig` + hint: `iniconfig` was included because `project` (v0.1.0) depends on `iniconfig` "); Ok(()) @@ -11263,10 +11281,10 @@ fn sync_script_with_incompatible_build_constraints() -> Result<()> { ----- stderr ----- Creating script environment at: [CACHE_DIR]/environments-v2/script-[HASH] - × Failed to download and build `requests==1.2.0` - ├─▶ Failed to resolve requirements from `setup.py` build - ├─▶ No solution found when resolving: `setuptools>=40.8.0` - ╰─▶ Because you require setuptools>=40.8.0 and setuptools==1, we can conclude that your requirements are unsatisfiable. + error: Failed to download and build `requests==1.2.0` + Caused by: Failed to resolve requirements from `setup.py` build + Caused by: No solution found when resolving: `setuptools>=40.8.0` + Caused by: Because you require setuptools>=40.8.0 and setuptools==1, we can conclude that your requirements are unsatisfiable. "); Ok(()) @@ -11298,9 +11316,9 @@ fn unsupported_git_scheme() -> Result<()> { ----- stderr ----- Using CPython 3.12.[X] interpreter at: [PYTHON-3.12] Creating virtual environment at: .venv - × Failed to build `foo @ file://[TEMP_DIR]/` - ├─▶ Failed to parse entry: `foo` - ╰─▶ Unsupported Git URL scheme `c:` in `c:/home/ferris/projects/foo` (expected one of `https:`, `ssh:`, or `file:`) + error: Failed to build `foo @ file://[TEMP_DIR]/` + Caused by: Failed to parse entry: `foo` + Caused by: Unsupported Git URL scheme `c:` in `c:/home/ferris/projects/foo` (expected one of `https:`, `ssh:`, or `file:`) "); Ok(()) } @@ -13474,15 +13492,16 @@ fn sync_build_dependencies_respect_locked_versions() -> Result<()> { ----- stderr ----- Resolved [N] packages in [TIME] - × Failed to build `child @ file://[TEMP_DIR]/child` - ├─▶ The build backend returned an error - ╰─▶ Call to `build_backend.build_wheel` failed (exit status: 1) + error: Failed to build `child @ file://[TEMP_DIR]/child` + Caused by: The build backend returned an error + Caused by: Call to `build_backend.build_wheel` failed (exit status: 1) + + [stderr] + Expected `anyio` version 3.0 but got 4.3.0 + + hint: This usually indicates a problem with the package or the build environment. - [stderr] - Expected `anyio` version 3.0 but got 4.3.0 - - hint: This usually indicates a problem with the package or the build environment. - help: `child` was included because `parent` (v0.1.0) depends on `child` + hint: `child` was included because `parent` (v0.1.0) depends on `child` "); // Now constrain the `anyio` build dependency to match the runtime @@ -13542,15 +13561,16 @@ fn sync_build_dependencies_respect_locked_versions() -> Result<()> { ----- stderr ----- warning: The `extra-build-dependencies` option is experimental and may change without warning. Pass `--preview-features extra-build-dependencies` to disable this warning. Resolved [N] packages in [TIME] - × Failed to build `child @ file://[TEMP_DIR]/child` - ├─▶ The build backend returned an error - ╰─▶ Call to `build_backend.build_wheel` failed (exit status: 1) + error: Failed to build `child @ file://[TEMP_DIR]/child` + Caused by: The build backend returned an error + Caused by: Call to `build_backend.build_wheel` failed (exit status: 1) + + [stderr] + Expected `anyio` version 4.0 but got 3.7.1 + + hint: This usually indicates a problem with the package or the build environment. - [stderr] - Expected `anyio` version 4.0 but got 3.7.1 - - hint: This usually indicates a problem with the package or the build environment. - help: `child` was included because `parent` (v0.1.0) depends on `child` + hint: `child` was included because `parent` (v0.1.0) depends on `child` "); uv_snapshot!(context.filters(), context.sync() @@ -13625,11 +13645,12 @@ fn sync_build_dependencies_respect_locked_versions() -> Result<()> { ----- stderr ----- warning: The `extra-build-dependencies` option is experimental and may change without warning. Pass `--preview-features extra-build-dependencies` to disable this warning. Resolved [N] packages in [TIME] - × Failed to build `child @ file://[TEMP_DIR]/child` - ├─▶ Failed to resolve requirements from `build-system.requires` and `extra-build-dependencies` - ├─▶ No solution found when resolving: `hatchling`, `anyio>3.8, <4.2`, `anyio==3.7.1 (index: https://pypi.org/simple)` - ╰─▶ Because you require anyio>3.8,<4.2 and anyio==3.7.1, we can conclude that your requirements are unsatisfiable. - help: `child` was included because `parent` (v0.1.0) depends on `child` + error: Failed to build `child @ file://[TEMP_DIR]/child` + Caused by: Failed to resolve requirements from `build-system.requires` and `extra-build-dependencies` + Caused by: No solution found when resolving: `hatchling`, `anyio>3.8, <4.2`, `anyio==3.7.1 (index: https://pypi.org/simple)` + Caused by: Because you require anyio>3.8,<4.2 and anyio==3.7.1, we can conclude that your requirements are unsatisfiable. + + hint: `child` was included because `parent` (v0.1.0) depends on `child` "); // Adding a version specifier should also fail @@ -13725,14 +13746,14 @@ fn sync_extra_build_variables() -> Result<()> { ----- stderr ----- Resolved [N] packages in [TIME] - × Failed to build `parent @ file://[TEMP_DIR]/` - ├─▶ The build backend returned an error - ╰─▶ Call to `build_backend.build_editable` failed (exit status: 1) - - [stderr] - Expected `anyio` version 3.0 but got 4.3.0 - - hint: This usually indicates a problem with the package or the build environment. + error: Failed to build `parent @ file://[TEMP_DIR]/` + Caused by: The build backend returned an error + Caused by: Call to `build_backend.build_editable` failed (exit status: 1) + + [stderr] + Expected `anyio` version 3.0 but got 4.3.0 + + hint: This usually indicates a problem with the package or the build environment. "); // Set the variable in TOML (to an incorrect value). @@ -13758,14 +13779,14 @@ fn sync_extra_build_variables() -> Result<()> { ----- stderr ----- Resolved [N] packages in [TIME] - × Failed to build `parent @ file://[TEMP_DIR]/` - ├─▶ The build backend returned an error - ╰─▶ Call to `build_backend.build_editable` failed (exit status: 1) - - [stderr] - Expected `anyio` version 3.0 but got 4.3.0 - - hint: This usually indicates a problem with the package or the build environment. + error: Failed to build `parent @ file://[TEMP_DIR]/` + Caused by: The build backend returned an error + Caused by: Call to `build_backend.build_editable` failed (exit status: 1) + + [stderr] + Expected `anyio` version 3.0 but got 4.3.0 + + hint: This usually indicates a problem with the package or the build environment. "); // Set the variable in TOML (to a correct value). @@ -13824,9 +13845,10 @@ fn reject_unmatched_runtime() -> Result<()> { ----- stderr ----- warning: The `extra-build-dependencies` option is experimental and may change without warning. Pass `--preview-features extra-build-dependencies` to disable this warning. - × Failed to download and build `source-distribution==0.0.3` - ╰─▶ Extra build requirement `iniconfig` was declared with `match-runtime = true`, but `source-distribution` does not declare static metadata, making runtime-matching impossible - help: `source-distribution` (v0.0.3) was included because `foo` (v0.1.0) depends on `source-distribution` + error: Failed to download and build `source-distribution==0.0.3` + Caused by: Extra build requirement `iniconfig` was declared with `match-runtime = true`, but `source-distribution` does not declare static metadata, making runtime-matching impossible + + hint: `source-distribution` (v0.0.3) was included because `foo` (v0.1.0) depends on `source-distribution` "); Ok(()) diff --git a/crates/uv/tests/it/tool_install.rs b/crates/uv/tests/it/tool_install.rs index 18a1a7a0a..962aaa20f 100644 --- a/crates/uv/tests/it/tool_install.rs +++ b/crates/uv/tests/it/tool_install.rs @@ -421,10 +421,10 @@ fn tool_install_with_incompatible_build_constraints() -> Result<()> { ----- stdout ----- ----- stderr ----- - × Failed to download and build `requests==1.2.0` - ├─▶ Failed to resolve requirements from `setup.py` build - ├─▶ No solution found when resolving: `setuptools>=40.8.0` - ╰─▶ Because you require setuptools>=40.8.0 and setuptools==2, we can conclude that your requirements are unsatisfiable. + error: Failed to download and build `requests==1.2.0` + Caused by: Failed to resolve requirements from `setup.py` build + Caused by: No solution found when resolving: `setuptools>=40.8.0` + Caused by: Because you require setuptools>=40.8.0 and setuptools==2, we can conclude that your requirements are unsatisfiable. "); tool_dir @@ -1702,27 +1702,27 @@ fn tool_install_uninstallable() { ----- stderr ----- Resolved 1 package in [TIME] - × Failed to build `pyenv==0.0.1` - ├─▶ The build backend returned an error - ╰─▶ Call to `setuptools.build_meta:__legacy__.build_wheel` failed (exit status: 1) - - [stdout] - running bdist_wheel - running build - installing to build/bdist.linux-x86_64/wheel - running install - - [stderr] - # NOTE # - We are sorry, but this package is not installable with pip. - - Please read the installation instructions at: - - https://github.com/pyenv/pyenv#installation - # - - - hint: This usually indicates a problem with the package or the build environment. + error: Failed to build `pyenv==0.0.1` + Caused by: The build backend returned an error + Caused by: Call to `setuptools.build_meta:__legacy__.build_wheel` failed (exit status: 1) + + [stdout] + running bdist_wheel + running build + installing to build/bdist.linux-x86_64/wheel + running install + + [stderr] + # NOTE # + We are sorry, but this package is not installable with pip. + + Please read the installation instructions at: + + https://github.com/pyenv/pyenv#installation + # + + + hint: This usually indicates a problem with the package or the build environment. "); // Ensure the tool environment is not created. @@ -3099,16 +3099,16 @@ fn tool_install_preserve_environment() { .arg("packaging==0.0.1") .env(EnvVars::UV_TOOL_DIR, tool_dir.as_os_str()) .env(EnvVars::XDG_BIN_HOME, bin_dir.as_os_str()) - .env(EnvVars::PATH, bin_dir.as_os_str()), @r###" + .env(EnvVars::PATH, bin_dir.as_os_str()), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because black==24.1.1 depends on packaging>=22.0 and you require black==24.1.1, we can conclude that you require packaging>=22.0. - And because you require packaging==0.0.1, we can conclude that your requirements are unsatisfiable. - "###); + error: No solution found when resolving dependencies: + Caused by: Because black==24.1.1 depends on packaging>=22.0 and you require black==24.1.1, we can conclude that you require packaging>=22.0. + And because you require packaging==0.0.1, we can conclude that your requirements are unsatisfiable. + "); // Install `black`. The tool should already be installed, since we didn't remove the environment. uv_snapshot!(context.filters(), context.tool_install() @@ -4487,11 +4487,11 @@ fn tool_install_find_links() { ----- stdout ----- ----- stderr ----- - × No solution found when resolving tool dependencies: - ╰─▶ Because only basic-app==0.1 is available and basic-app==0.1 needs to be downloaded from a registry, we can conclude that all versions of basic-app cannot be used. - And because you require basic-app, we can conclude that your requirements are unsatisfiable. - - hint: Packages were unavailable because the network was disabled. When the network is disabled, registry packages may only be read from the cache. + error: No solution found when resolving tool dependencies: + Caused by: Because only basic-app==0.1 is available and basic-app==0.1 needs to be downloaded from a registry, we can conclude that all versions of basic-app cannot be used. + And because you require basic-app, we can conclude that your requirements are unsatisfiable. + + hint: Packages were unavailable because the network was disabled. When the network is disabled, registry packages may only be read from the cache. "); } diff --git a/crates/uv/tests/it/tool_run.rs b/crates/uv/tests/it/tool_run.rs index 26bd5d636..791c8640f 100644 --- a/crates/uv/tests/it/tool_run.rs +++ b/crates/uv/tests/it/tool_run.rs @@ -109,15 +109,15 @@ fn tool_run_at_version() { .arg("pytest@invalid") .arg("--version") .env(EnvVars::UV_TOOL_DIR, tool_dir.as_os_str()) - .env(EnvVars::XDG_BIN_HOME, bin_dir.as_os_str()), @r###" + .env(EnvVars::XDG_BIN_HOME, bin_dir.as_os_str()), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- - × Failed to resolve tool requirement - ╰─▶ Distribution not found at: file://[TEMP_DIR]/invalid - "###); + error: Failed to resolve tool requirement + Caused by: Distribution not found at: file://[TEMP_DIR]/invalid + "); let filters = context .filters() @@ -1809,15 +1809,15 @@ fn tool_run_with_editable() -> anyhow::Result<()> { .arg("flask") .arg("--version") .env(EnvVars::UV_TOOL_DIR, tool_dir - .as_os_str()).env(EnvVars::XDG_BIN_HOME, bin_dir.as_os_str()), @r###" + .as_os_str()).env(EnvVars::XDG_BIN_HOME, bin_dir.as_os_str()), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- - × Failed to resolve `--with` requirement - ╰─▶ Distribution not found at: file://[TEMP_DIR]/foo - "###); + error: Failed to resolve `--with` requirement + Caused by: Distribution not found at: file://[TEMP_DIR]/foo + "); Ok(()) } @@ -1914,15 +1914,15 @@ fn tool_run_resolution_error() { uv_snapshot!(context.filters(), context.tool_run() .arg("add") .env(EnvVars::UV_TOOL_DIR, tool_dir.as_os_str()) - .env(EnvVars::XDG_BIN_HOME, bin_dir.as_os_str()), @r###" + .env(EnvVars::XDG_BIN_HOME, bin_dir.as_os_str()), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- - × No solution found when resolving tool dependencies: - ╰─▶ Because there are no versions of add and you require add, we can conclude that your requirements are unsatisfiable. - "###); + error: No solution found when resolving tool dependencies: + Caused by: Because there are no versions of add and you require add, we can conclude that your requirements are unsatisfiable. + "); } #[test] @@ -2238,8 +2238,8 @@ fn tool_run_python_at_version() { ----- stdout ----- ----- stderr ----- - × No solution found when resolving tool dependencies: - ╰─▶ Because cp311 was not found in the package registry and you require cp311, we can conclude that your requirements are unsatisfiable. + error: No solution found when resolving tool dependencies: + Caused by: Because cp311 was not found in the package registry and you require cp311, we can conclude that your requirements are unsatisfiable. "); // Bare versions don't work either. Again we interpret them as package names. @@ -2251,8 +2251,8 @@ fn tool_run_python_at_version() { ----- stdout ----- ----- stderr ----- - × No solution found when resolving tool dependencies: - ╰─▶ Because 311 was not found in the package registry and you require 311, we can conclude that your requirements are unsatisfiable. + error: No solution found when resolving tool dependencies: + Caused by: Because 311 was not found in the package registry and you require 311, we can conclude that your requirements are unsatisfiable. "); // Request a version via `-p` @@ -2833,48 +2833,51 @@ fn tool_run_verbose_hint() { .arg("nonexistent-package-foo") .arg("--verbose") .env(EnvVars::UV_TOOL_DIR, tool_dir.as_os_str()) - .env(EnvVars::XDG_BIN_HOME, bin_dir.as_os_str()), @r###" + .env(EnvVars::XDG_BIN_HOME, bin_dir.as_os_str()), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because nonexistent-package-foo was not found in the package registry and you require nonexistent-package-foo, we can conclude that your requirements are unsatisfiable. - help: You provided `--verbose` to `nonexistent-package-foo`. Did you mean to provide it to `uv tool run`? e.g., `uv tool run --verbose nonexistent-package-foo` - "###); + error: No solution found when resolving dependencies: + Caused by: Because nonexistent-package-foo was not found in the package registry and you require nonexistent-package-foo, we can conclude that your requirements are unsatisfiable. + + hint: You provided `--verbose` to `nonexistent-package-foo`. Did you mean to provide it to `uv tool run`? e.g., `uv tool run --verbose nonexistent-package-foo` + "); // Test with -v flag uv_snapshot!(context.filters(), context.tool_run() .arg("nonexistent-package-bar") .arg("-v") .env(EnvVars::UV_TOOL_DIR, tool_dir.as_os_str()) - .env(EnvVars::XDG_BIN_HOME, bin_dir.as_os_str()), @r###" + .env(EnvVars::XDG_BIN_HOME, bin_dir.as_os_str()), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because nonexistent-package-bar was not found in the package registry and you require nonexistent-package-bar, we can conclude that your requirements are unsatisfiable. - help: You provided `-v` to `nonexistent-package-bar`. Did you mean to provide it to `uv tool run`? e.g., `uv tool run -v nonexistent-package-bar` - "###); + error: No solution found when resolving dependencies: + Caused by: Because nonexistent-package-bar was not found in the package registry and you require nonexistent-package-bar, we can conclude that your requirements are unsatisfiable. + + hint: You provided `-v` to `nonexistent-package-bar`. Did you mean to provide it to `uv tool run`? e.g., `uv tool run -v nonexistent-package-bar` + "); // Test with -vv flag uv_snapshot!(context.filters(), context.tool_run() .arg("nonexistent-package-baz") .arg("-vv") .env(EnvVars::UV_TOOL_DIR, tool_dir.as_os_str()) - .env(EnvVars::XDG_BIN_HOME, bin_dir.as_os_str()), @r###" + .env(EnvVars::XDG_BIN_HOME, bin_dir.as_os_str()), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- - × No solution found when resolving dependencies: - ╰─▶ Because nonexistent-package-baz was not found in the package registry and you require nonexistent-package-baz, we can conclude that your requirements are unsatisfiable. - help: You provided `-vv` to `nonexistent-package-baz`. Did you mean to provide it to `uv tool run`? e.g., `uv tool run -vv nonexistent-package-baz` - "###); + error: No solution found when resolving dependencies: + Caused by: Because nonexistent-package-baz was not found in the package registry and you require nonexistent-package-baz, we can conclude that your requirements are unsatisfiable. + + hint: You provided `-vv` to `nonexistent-package-baz`. Did you mean to provide it to `uv tool run`? e.g., `uv tool run -vv nonexistent-package-baz` + "); // Test for false positives uv_snapshot!(context.filters(), context.tool_run() @@ -2887,8 +2890,8 @@ fn tool_run_verbose_hint() { ----- stdout ----- ----- stderr ----- - × No solution found when resolving tool dependencies: - ╰─▶ Because nonexistent-package-quux was not found in the package registry and you require nonexistent-package-quux, we can conclude that your requirements are unsatisfiable. + error: No solution found when resolving tool dependencies: + Caused by: Because nonexistent-package-quux was not found in the package registry and you require nonexistent-package-quux, we can conclude that your requirements are unsatisfiable. "); } @@ -2956,10 +2959,10 @@ fn tool_run_with_incompatible_build_constraints() -> Result<()> { ----- stdout ----- ----- stderr ----- - × Failed to download and build `requests==1.2.0` - ├─▶ Failed to resolve requirements from `setup.py` build - ├─▶ No solution found when resolving: `setuptools>=40.8.0` - ╰─▶ Because you require setuptools>=40.8.0 and setuptools==2, we can conclude that your requirements are unsatisfiable. + error: Failed to download and build `requests==1.2.0` + Caused by: Failed to resolve requirements from `setup.py` build + Caused by: No solution found when resolving: `setuptools>=40.8.0` + Caused by: Because you require setuptools>=40.8.0 and setuptools==2, we can conclude that your requirements are unsatisfiable. "); Ok(()) @@ -3442,9 +3445,9 @@ fn tool_run_reresolve_python() -> anyhow::Result<()> { ----- stdout ----- ----- stderr ----- - × No solution found when resolving tool dependencies: - ╰─▶ Because the current Python version (3.11.[X]) does not satisfy Python>=3.12 and foo==1.0.0 depends on Python>=3.12, we can conclude that foo==1.0.0 cannot be used. - And because only foo==1.0.0 is available and you require foo, we can conclude that your requirements are unsatisfiable. + error: No solution found when resolving tool dependencies: + Caused by: Because the current Python version (3.11.[X]) does not satisfy Python>=3.12 and foo==1.0.0 depends on Python>=3.12, we can conclude that foo==1.0.0 cannot be used. + And because only foo==1.0.0 is available and you require foo, we can conclude that your requirements are unsatisfiable. "); // Unless the discovered interpreter is compatible with the request diff --git a/crates/uv/tests/it/workspace.rs b/crates/uv/tests/it/workspace.rs index aee68d125..58f0e05e8 100644 --- a/crates/uv/tests/it/workspace.rs +++ b/crates/uv/tests/it/workspace.rs @@ -1131,19 +1131,19 @@ fn workspace_inherit_sources() -> Result<()> { library.child("src/__init__.py").touch()?; // As-is, resolving should fail. - uv_snapshot!(context.filters(), context.lock().arg("--offline").current_dir(&workspace), @r###" + uv_snapshot!(context.filters(), context.lock().arg("--offline").current_dir(&workspace), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- Using CPython 3.12.[X] interpreter at: [PYTHON-3.12] - × No solution found when resolving dependencies: - ╰─▶ Because library was not found in the cache and leaf depends on library, we can conclude that leaf's requirements are unsatisfiable. - And because your workspace requires leaf, we can conclude that your workspace's requirements are unsatisfiable. - - hint: Packages were unavailable because the network was disabled. When the network is disabled, registry packages may only be read from the cache. - "### + error: No solution found when resolving dependencies: + Caused by: Because library was not found in the cache and leaf depends on library, we can conclude that leaf's requirements are unsatisfiable. + And because your workspace requires leaf, we can conclude that your workspace's requirements are unsatisfiable. + + hint: Packages were unavailable because the network was disabled. When the network is disabled, registry packages may only be read from the cache. + " ); // Update the leaf to include the source. @@ -1358,9 +1358,9 @@ fn workspace_unsatisfiable_member_dependencies() -> Result<()> { ----- stderr ----- Using CPython 3.12.[X] interpreter at: [PYTHON-3.12] - × No solution found when resolving dependencies: - ╰─▶ Because only httpx<=0.27.0 is available and leaf depends on httpx>9999, we can conclude that leaf's requirements are unsatisfiable. - And because your workspace requires leaf, we can conclude that your workspace's requirements are unsatisfiable. + error: No solution found when resolving dependencies: + Caused by: Because only httpx<=0.27.0 is available and leaf depends on httpx>9999, we can conclude that leaf's requirements are unsatisfiable. + And because your workspace requires leaf, we can conclude that your workspace's requirements are unsatisfiable. " ); @@ -1419,17 +1419,17 @@ fn workspace_unsatisfiable_member_dependencies_conflicting() -> Result<()> { bar.child("src/__init__.py").touch()?; // Resolving should fail. - uv_snapshot!(context.filters(), context.lock().current_dir(&workspace), @r###" + uv_snapshot!(context.filters(), context.lock().current_dir(&workspace), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- Using CPython 3.12.[X] interpreter at: [PYTHON-3.12] - × No solution found when resolving dependencies: - ╰─▶ Because bar depends on anyio==4.2.0 and foo depends on anyio==4.1.0, we can conclude that bar and foo are incompatible. - And because your workspace requires bar and foo, we can conclude that your workspace's requirements are unsatisfiable. - "### + error: No solution found when resolving dependencies: + Caused by: Because bar depends on anyio==4.2.0 and foo depends on anyio==4.1.0, we can conclude that bar and foo are incompatible. + And because your workspace requires bar and foo, we can conclude that your workspace's requirements are unsatisfiable. + " ); Ok(()) @@ -1502,17 +1502,17 @@ fn workspace_unsatisfiable_member_dependencies_conflicting_threeway() -> Result< bird.child("src/__init__.py").touch()?; // Resolving should fail. - uv_snapshot!(context.filters(), context.lock().current_dir(&workspace), @r###" + uv_snapshot!(context.filters(), context.lock().current_dir(&workspace), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- Using CPython 3.12.[X] interpreter at: [PYTHON-3.12] - × No solution found when resolving dependencies: - ╰─▶ Because bird depends on anyio==4.3.0 and knot depends on anyio==4.2.0, we can conclude that bird and knot are incompatible. - And because your workspace requires bird and knot, we can conclude that your workspace's requirements are unsatisfiable. - "### + error: No solution found when resolving dependencies: + Caused by: Because bird depends on anyio==4.3.0 and knot depends on anyio==4.2.0, we can conclude that bird and knot are incompatible. + And because your workspace requires bird and knot, we can conclude that your workspace's requirements are unsatisfiable. + " ); Ok(()) @@ -1572,17 +1572,17 @@ fn workspace_unsatisfiable_member_dependencies_conflicting_extra() -> Result<()> bar.child("src/__init__.py").touch()?; // Resolving should fail. - uv_snapshot!(context.filters(), context.lock().current_dir(&workspace), @r###" + uv_snapshot!(context.filters(), context.lock().current_dir(&workspace), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- Using CPython 3.12.[X] interpreter at: [PYTHON-3.12] - × No solution found when resolving dependencies: - ╰─▶ Because bar[some-extra] depends on anyio==4.2.0 and foo depends on anyio==4.1.0, we can conclude that foo and bar[some-extra] are incompatible. - And because your workspace requires bar[some-extra] and foo, we can conclude that your workspace's requirements are unsatisfiable. - "### + error: No solution found when resolving dependencies: + Caused by: Because bar[some-extra] depends on anyio==4.2.0 and foo depends on anyio==4.1.0, we can conclude that foo and bar[some-extra] are incompatible. + And because your workspace requires bar[some-extra] and foo, we can conclude that your workspace's requirements are unsatisfiable. + " ); Ok(()) @@ -1650,9 +1650,9 @@ fn workspace_unsatisfiable_member_dependencies_conflicting_dev() -> Result<()> { ----- stderr ----- warning: The `tool.uv.dev-dependencies` field (used in `packages/bar/pyproject.toml`) is deprecated and will be removed in a future release; use `dependency-groups.dev` instead Using CPython 3.12.[X] interpreter at: [PYTHON-3.12] - × No solution found when resolving dependencies: - ╰─▶ Because bar:dev depends on anyio==4.2.0 and foo depends on anyio==4.1.0, we can conclude that foo and bar:dev are incompatible. - And because your workspace requires bar:dev and foo, we can conclude that your workspace's requirements are unsatisfiable. + error: No solution found when resolving dependencies: + Caused by: Because bar:dev depends on anyio==4.2.0 and foo depends on anyio==4.1.0, we can conclude that foo and bar:dev are incompatible. + And because your workspace requires bar:dev and foo, we can conclude that your workspace's requirements are unsatisfiable. " ); @@ -1714,17 +1714,17 @@ fn workspace_member_name_shadows_dependencies() -> Result<()> { // We should fail // TODO(zanieb): This error message is bad? - uv_snapshot!(context.filters(), context.lock().current_dir(&workspace), @r###" + uv_snapshot!(context.filters(), context.lock().current_dir(&workspace), @r" success: false exit_code: 1 ----- stdout ----- ----- stderr ----- Using CPython 3.12.[X] interpreter at: [PYTHON-3.12] - × Failed to build `foo @ file://[TEMP_DIR]/workspace/packages/foo` - ├─▶ Failed to parse entry: `anyio` - ╰─▶ `anyio` is included as a workspace member, but is missing an entry in `tool.uv.sources` (e.g., `anyio = { workspace = true }`) - "### + error: Failed to build `foo @ file://[TEMP_DIR]/workspace/packages/foo` + Caused by: Failed to parse entry: `anyio` + Caused by: `anyio` is included as a workspace member, but is missing an entry in `tool.uv.sources` (e.g., `anyio = { workspace = true }`) + " ); Ok(())