Remove preview labeling for uv 0.3.0 (#6166)

- Removes "experimental" labels from command documentation
- Removes preview warnings
- Removes `PreviewMode` from most structs and methods — we could keep it
around but I figure we can propagate it again easily where needed in the
future
- Enables preview behavior by default everywhere, e.g., `uv venv` will
download Python versions
This commit is contained in:
Zanie Blue 2024-08-20 11:12:08 -05:00
parent 33480d61eb
commit 04e3e7ce65
72 changed files with 380 additions and 1288 deletions

1
Cargo.lock generated
View file

@ -5027,7 +5027,6 @@ dependencies = [
"url",
"uv-cache",
"uv-client",
"uv-configuration",
"uv-extract",
"uv-fs",
"uv-state",

View file

@ -91,8 +91,7 @@ mod resolver {
use uv_cache::Cache;
use uv_client::RegistryClient;
use uv_configuration::{
BuildOptions, Concurrency, ConfigSettings, IndexStrategy, PreviewMode, SetupPyStrategy,
SourceStrategy,
BuildOptions, Concurrency, ConfigSettings, IndexStrategy, SetupPyStrategy, SourceStrategy,
};
use uv_dispatch::BuildDispatch;
use uv_distribution::DistributionDatabase;
@ -188,7 +187,6 @@ mod resolver {
exclude_newer,
sources,
concurrency,
PreviewMode::Disabled,
);
let markers = if universal {
@ -208,12 +206,7 @@ mod resolver {
&hashes,
&build_context,
installed_packages,
DistributionDatabase::new(
client,
&build_context,
concurrency.downloads,
PreviewMode::Disabled,
),
DistributionDatabase::new(client, &build_context, concurrency.downloads),
)?;
Ok(resolver.resolve().await?)

View file

@ -247,14 +247,14 @@ pub enum Commands {
#[command(flatten)]
Project(Box<ProjectCommand>),
/// Run and install commands provided by Python packages (experimental).
/// Run and install commands provided by Python packages.
#[command(
after_help = "Use `uv help tool` for more details.",
after_long_help = ""
)]
Tool(ToolNamespace),
/// Manage Python versions and installations (experimental)
/// Manage Python versions and installations
///
/// Generally, uv first searches for Python in a virtual environment, either
/// active or in a `.venv` directory in the current working directory or
@ -265,8 +265,7 @@ pub enum Commands {
/// On Windows, the `py` launcher is also invoked to find Python
/// executables.
///
/// When preview is enabled, i.e., via `--preview` or by using a preview
/// command, uv will download Python if a version cannot be found. This
/// By default, uv will download Python if a version cannot be found. This
/// behavior can be disabled with the `--python-downloads` option.
///
/// The `--python` option allows requesting a different interpreter.
@ -515,7 +514,7 @@ pub enum PipCommand {
#[derive(Subcommand)]
pub enum ProjectCommand {
/// Run a command or script (experimental).
/// Run a command or script.
///
/// Ensures that the command runs in a Python environment.
///
@ -542,7 +541,7 @@ pub enum ProjectCommand {
after_long_help = ""
)]
Run(RunArgs),
/// Create a new project (experimental).
/// Create a new project.
///
/// Follows the `pyproject.toml` specification.
///
@ -557,7 +556,7 @@ pub enum ProjectCommand {
/// virtual environment (`.venv`) and lockfile (`uv.lock`) are lazily
/// created during the first sync.
Init(InitArgs),
/// Add dependencies to the project (experimental).
/// Add dependencies to the project.
///
/// Dependencies are added to the project's `pyproject.toml` file.
///
@ -584,7 +583,7 @@ pub enum ProjectCommand {
after_long_help = ""
)]
Add(AddArgs),
/// Remove dependencies from the project (experimental).
/// Remove dependencies from the project.
///
/// Dependencies are removed from the project's `pyproject.toml` file.
///
@ -608,7 +607,7 @@ pub enum ProjectCommand {
after_long_help = ""
)]
Remove(RemoveArgs),
/// Update the project's environment (experimental).
/// Update the project's environment.
///
/// Syncing ensures that all project dependencies are installed and
/// up-to-date with the lockfile. Syncing also removes packages that are not
@ -630,7 +629,7 @@ pub enum ProjectCommand {
after_long_help = ""
)]
Sync(SyncArgs),
/// Update the project's lockfile (experimental).
/// Update the project's lockfile.
///
/// If the project lockfile (`uv.lock`) does not exist, it will be created.
/// If a lockfile is present, its contents will be used as preferences for
@ -643,7 +642,7 @@ pub enum ProjectCommand {
after_long_help = ""
)]
Lock(LockArgs),
/// Display the project's dependency tree (experimental).
/// Display the project's dependency tree.
Tree(TreeArgs),
}

View file

@ -11,8 +11,8 @@ use uv_build::{SourceBuild, SourceBuildContext};
use uv_cache::{Cache, CacheArgs};
use uv_client::RegistryClientBuilder;
use uv_configuration::{
BuildKind, BuildOptions, Concurrency, ConfigSettings, IndexStrategy, PreviewMode,
SetupPyStrategy, SourceStrategy,
BuildKind, BuildOptions, Concurrency, ConfigSettings, IndexStrategy, SetupPyStrategy,
SourceStrategy,
};
use uv_dispatch::BuildDispatch;
use uv_git::GitResolver;
@ -96,7 +96,6 @@ pub(crate) async fn build(args: BuildArgs) -> Result<PathBuf> {
exclude_newer,
sources,
concurrency,
PreviewMode::Enabled,
);
let builder = SourceBuild::setup(

View file

@ -16,11 +16,11 @@ use pypi_types::Requirement;
use uv_build::{SourceBuild, SourceBuildContext};
use uv_cache::Cache;
use uv_client::RegistryClient;
use uv_configuration::Concurrency;
use uv_configuration::{
BuildKind, BuildOptions, ConfigSettings, Constraints, IndexStrategy, Reinstall,
SetupPyStrategy, SourceStrategy,
};
use uv_configuration::{Concurrency, PreviewMode};
use uv_distribution::DistributionDatabase;
use uv_git::GitResolver;
use uv_installer::{Installer, Plan, Planner, Preparer, SitePackages};
@ -54,7 +54,6 @@ pub struct BuildDispatch<'a> {
build_extra_env_vars: FxHashMap<OsString, OsString>,
sources: SourceStrategy,
concurrency: Concurrency,
preview_mode: PreviewMode,
}
impl<'a> BuildDispatch<'a> {
@ -77,7 +76,6 @@ impl<'a> BuildDispatch<'a> {
exclude_newer: Option<ExcludeNewer>,
sources: SourceStrategy,
concurrency: Concurrency,
preview_mode: PreviewMode,
) -> Self {
Self {
client,
@ -100,7 +98,6 @@ impl<'a> BuildDispatch<'a> {
build_extra_env_vars: FxHashMap::default(),
sources,
concurrency,
preview_mode,
}
}
@ -162,12 +159,7 @@ impl<'a> BuildContext for BuildDispatch<'a> {
&HashStrategy::None,
self,
EmptyInstalledPackages,
DistributionDatabase::new(
self.client,
self,
self.concurrency.downloads,
self.preview_mode,
),
DistributionDatabase::new(self.client, self, self.concurrency.downloads),
)?;
let graph = resolver.resolve().await.with_context(|| {
format!(
@ -250,12 +242,7 @@ impl<'a> BuildContext for BuildDispatch<'a> {
tags,
&HashStrategy::None,
self.build_options,
DistributionDatabase::new(
self.client,
self,
self.concurrency.downloads,
self.preview_mode,
),
DistributionDatabase::new(self.client, self, self.concurrency.downloads),
);
debug!(

View file

@ -25,7 +25,6 @@ use uv_cache::{ArchiveId, ArchiveTimestamp, CacheBucket, CacheEntry, Timestamp,
use uv_client::{
CacheControl, CachedClientError, Connectivity, DataWithCachePolicy, RegistryClient,
};
use uv_configuration::PreviewMode;
use uv_extract::hash::Hasher;
use uv_fs::write_atomic;
use uv_types::BuildContext;
@ -61,11 +60,10 @@ impl<'a, Context: BuildContext> DistributionDatabase<'a, Context> {
client: &'a RegistryClient,
build_context: &'a Context,
concurrent_downloads: usize,
preview_mode: PreviewMode,
) -> Self {
Self {
build_context,
builder: SourceDistributionBuilder::new(build_context, preview_mode),
builder: SourceDistributionBuilder::new(build_context),
locks: Rc::new(Locks::default()),
client: ManagedClient::new(client, concurrent_downloads),
reporter: None,

View file

@ -9,7 +9,6 @@ use pep508_rs::{VerbatimUrl, VersionOrUrl};
use pypi_types::{ParsedUrlError, Requirement, RequirementSource, VerbatimParsedUrl};
use thiserror::Error;
use url::Url;
use uv_configuration::PreviewMode;
use uv_fs::{relative_to, Simplified};
use uv_git::GitReference;
use uv_normalize::PackageName;
@ -36,7 +35,6 @@ impl LoweredRequirement {
project_dir: &Path,
project_sources: &BTreeMap<PackageName, Source>,
workspace: &Workspace,
preview: PreviewMode,
) -> Result<Self, LoweringError> {
let (source, origin) = if let Some(source) = project_sources.get(&requirement.name) {
(Some(source), Origin::Project)
@ -80,10 +78,6 @@ impl LoweredRequirement {
return Ok(Self(Requirement::from(requirement)));
};
if preview.is_disabled() {
warn_user_once!("`uv.sources` is experimental and may change without warning");
}
let source = match source {
Source::Git {
git,
@ -180,7 +174,6 @@ impl LoweredRequirement {
requirement: pep508_rs::Requirement<VerbatimParsedUrl>,
dir: &Path,
sources: &BTreeMap<PackageName, Source>,
preview: PreviewMode,
) -> Result<Self, LoweringError> {
let source = sources.get(&requirement.name).cloned();
@ -188,10 +181,6 @@ impl LoweredRequirement {
return Ok(Self(Requirement::from(requirement)));
};
if preview.is_disabled() {
warn_user_once!("`uv.sources` is experimental and may change without warning");
}
let source = match source {
Source::Git {
git,

View file

@ -5,7 +5,7 @@ use thiserror::Error;
use pep440_rs::{Version, VersionSpecifiers};
use pypi_types::{HashDigest, Metadata23};
use uv_configuration::{PreviewMode, SourceStrategy};
use uv_configuration::SourceStrategy;
use uv_normalize::{ExtraName, GroupName, PackageName};
use uv_workspace::WorkspaceError;
@ -61,7 +61,6 @@ impl Metadata {
install_path: &Path,
lock_path: &Path,
sources: SourceStrategy,
preview_mode: PreviewMode,
) -> Result<Self, MetadataError> {
// Lower the requirements.
let RequiresDist {
@ -78,7 +77,6 @@ impl Metadata {
install_path,
lock_path,
sources,
preview_mode,
)
.await?;

View file

@ -1,7 +1,7 @@
use std::collections::BTreeMap;
use std::path::Path;
use uv_configuration::{PreviewMode, SourceStrategy};
use uv_configuration::SourceStrategy;
use uv_normalize::{ExtraName, GroupName, PackageName, DEV_DEPENDENCIES};
use uv_workspace::{DiscoveryOptions, ProjectWorkspace};
@ -39,7 +39,6 @@ impl RequiresDist {
install_path: &Path,
lock_path: &Path,
sources: SourceStrategy,
preview_mode: PreviewMode,
) -> Result<Self, MetadataError> {
match sources {
SourceStrategy::Enabled => {
@ -55,7 +54,7 @@ impl RequiresDist {
return Ok(Self::from_metadata23(metadata));
};
Self::from_project_workspace(metadata, &project_workspace, preview_mode)
Self::from_project_workspace(metadata, &project_workspace)
}
SourceStrategy::Disabled => Ok(Self::from_metadata23(metadata)),
}
@ -64,7 +63,6 @@ impl RequiresDist {
fn from_project_workspace(
metadata: pypi_types::RequiresDist,
project_workspace: &ProjectWorkspace,
preview_mode: PreviewMode,
) -> Result<Self, MetadataError> {
// Collect any `tool.uv.sources` and `tool.uv.dev_dependencies` from `pyproject.toml`.
let empty = BTreeMap::default();
@ -96,7 +94,6 @@ impl RequiresDist {
project_workspace.project_root(),
sources,
project_workspace.workspace(),
preview_mode,
)
.map(LoweredRequirement::into_inner)
.map_err(|err| MetadataError::LoweringError(requirement_name.clone(), err))
@ -120,7 +117,6 @@ impl RequiresDist {
project_workspace.project_root(),
sources,
project_workspace.workspace(),
preview_mode,
)
.map(LoweredRequirement::into_inner)
.map_err(|err| MetadataError::LoweringError(requirement_name.clone(), err))
@ -155,7 +151,6 @@ mod test {
use indoc::indoc;
use insta::assert_snapshot;
use uv_configuration::PreviewMode;
use uv_workspace::pyproject::PyProjectToml;
use uv_workspace::{DiscoveryOptions, ProjectWorkspace};
@ -182,7 +177,6 @@ mod test {
Ok(RequiresDist::from_project_workspace(
requires_dist,
&project_workspace,
PreviewMode::Enabled,
)?)
}

View file

@ -27,7 +27,7 @@ use uv_cache::{
use uv_client::{
CacheControl, CachedClientError, Connectivity, DataWithCachePolicy, RegistryClient,
};
use uv_configuration::{BuildKind, PreviewMode};
use uv_configuration::BuildKind;
use uv_extract::hash::Hasher;
use uv_fs::{rename_with_retry, write_atomic, LockedFile};
use uv_types::{BuildContext, SourceBuildTrait};
@ -46,7 +46,6 @@ mod revision;
/// Fetch and build a source distribution from a remote source, or from a local cache.
pub(crate) struct SourceDistributionBuilder<'a, T: BuildContext> {
build_context: &'a T,
preview_mode: PreviewMode,
reporter: Option<Arc<dyn Reporter>>,
}
@ -61,10 +60,9 @@ pub(crate) const METADATA: &str = "metadata.msgpack";
impl<'a, T: BuildContext> SourceDistributionBuilder<'a, T> {
/// Initialize a [`SourceDistributionBuilder`] from a [`BuildContext`].
pub(crate) fn new(build_context: &'a T, preview_mode: PreviewMode) -> Self {
pub(crate) fn new(build_context: &'a T) -> Self {
Self {
build_context,
preview_mode,
reporter: None,
}
}
@ -429,7 +427,6 @@ impl<'a, T: BuildContext> SourceDistributionBuilder<'a, T> {
project_root,
project_root,
self.build_context.sources(),
self.preview_mode,
)
.await?;
Ok(requires_dist)
@ -997,7 +994,6 @@ impl<'a, T: BuildContext> SourceDistributionBuilder<'a, T> {
resource.install_path.as_ref(),
resource.lock_path.as_ref(),
self.build_context.sources(),
self.preview_mode,
)
.await?,
));
@ -1023,7 +1019,6 @@ impl<'a, T: BuildContext> SourceDistributionBuilder<'a, T> {
resource.install_path.as_ref(),
resource.lock_path.as_ref(),
self.build_context.sources(),
self.preview_mode,
)
.await?,
));
@ -1056,7 +1051,6 @@ impl<'a, T: BuildContext> SourceDistributionBuilder<'a, T> {
resource.install_path.as_ref(),
resource.lock_path.as_ref(),
self.build_context.sources(),
self.preview_mode,
)
.await?,
))
@ -1234,14 +1228,8 @@ impl<'a, T: BuildContext> SourceDistributionBuilder<'a, T> {
debug!("Using cached metadata for: {source}");
return Ok(ArchiveMetadata::from(
Metadata::from_workspace(
metadata,
&path,
&path,
self.build_context.sources(),
self.preview_mode,
)
.await?,
Metadata::from_workspace(metadata, &path, &path, self.build_context.sources())
.await?,
));
}
}
@ -1267,14 +1255,8 @@ impl<'a, T: BuildContext> SourceDistributionBuilder<'a, T> {
};
return Ok(ArchiveMetadata::from(
Metadata::from_workspace(
metadata,
&path,
&path,
self.build_context.sources(),
self.preview_mode,
)
.await?,
Metadata::from_workspace(metadata, &path, &path, self.build_context.sources())
.await?,
));
}
@ -1305,7 +1287,6 @@ impl<'a, T: BuildContext> SourceDistributionBuilder<'a, T> {
fetch.path(),
fetch.path(),
self.build_context.sources(),
self.preview_mode,
)
.await?,
))

View file

@ -22,7 +22,6 @@ platform-tags = { workspace = true }
pypi-types = { workspace = true }
uv-cache = { workspace = true }
uv-client = { workspace = true }
uv-configuration = { workspace = true }
uv-extract = { workspace = true }
uv-fs = { workspace = true }
uv-state = { workspace = true }

View file

@ -12,7 +12,6 @@ use which::{which, which_all};
use pep440_rs::{Version, VersionSpecifiers};
use uv_cache::Cache;
use uv_configuration::PreviewMode;
use uv_fs::Simplified;
use uv_warnings::warn_user_once;
@ -1294,15 +1293,12 @@ impl PythonPreference {
}
}
/// Return a default [`PythonPreference`] based on the environment and preview mode.
pub fn default_from(preview: PreviewMode) -> Self {
/// Return the default [`PythonPreference`], respecting the `UV_TEST_PYTHON_PATH` variable.
pub fn default_from_env() -> Self {
if env::var_os("UV_TEST_PYTHON_PATH").is_some() {
debug!("Only considering system interpreters due to `UV_TEST_PYTHON_PATH`");
Self::OnlySystem
} else if preview.is_enabled() {
Self::default()
} else {
Self::OnlySystem
Self::default()
}
}

View file

@ -7,7 +7,6 @@ use tracing::debug;
use distribution_types::{Diagnostic, InstalledDist};
use uv_cache::Cache;
use uv_configuration::PreviewMode;
use uv_fs::Simplified;
use uv_installer::{SitePackages, SitePackagesDiagnostic};
use uv_python::{EnvironmentPreference, PythonEnvironment, PythonRequest};
@ -19,7 +18,6 @@ use crate::printer::Printer;
pub(crate) fn pip_check(
python: Option<&str>,
system: bool,
_preview: PreviewMode,
cache: &Cache,
printer: Printer,
) -> Result<ExitStatus> {

View file

@ -16,7 +16,7 @@ use uv_cache::Cache;
use uv_client::{BaseClientBuilder, Connectivity, FlatIndexClient, RegistryClientBuilder};
use uv_configuration::{
BuildOptions, Concurrency, ConfigSettings, ExtrasSpecification, IndexStrategy, NoBinary,
NoBuild, PreviewMode, Reinstall, SetupPyStrategy, SourceStrategy, Upgrade,
NoBuild, Reinstall, SetupPyStrategy, SourceStrategy, Upgrade,
};
use uv_configuration::{KeyringProviderType, TargetTriple};
use uv_dispatch::BuildDispatch;
@ -92,7 +92,6 @@ pub(crate) async fn pip_compile(
concurrency: Concurrency,
native_tls: bool,
quiet: bool,
preview: PreviewMode,
cache: Cache,
printer: Printer,
) -> Result<ExitStatus> {
@ -331,7 +330,6 @@ pub(crate) async fn pip_compile(
exclude_newer,
sources,
concurrency,
preview,
);
let options = OptionsBuilder::new()
@ -368,7 +366,6 @@ pub(crate) async fn pip_compile(
options,
Box::new(DefaultResolveLogger),
printer,
preview,
)
.await
{

View file

@ -7,7 +7,6 @@ use tracing::debug;
use distribution_types::{Diagnostic, InstalledDist, Name};
use uv_cache::Cache;
use uv_configuration::PreviewMode;
use uv_fs::Simplified;
use uv_installer::SitePackages;
use uv_python::{EnvironmentPreference, PythonEnvironment, PythonRequest};
@ -21,7 +20,6 @@ pub(crate) fn pip_freeze(
strict: bool,
python: Option<&str>,
system: bool,
_preview: PreviewMode,
cache: &Cache,
printer: Printer,
) -> Result<ExitStatus> {

View file

@ -14,7 +14,7 @@ use uv_cache::Cache;
use uv_client::{BaseClientBuilder, Connectivity, FlatIndexClient, RegistryClientBuilder};
use uv_configuration::{
BuildOptions, Concurrency, ConfigSettings, ExtrasSpecification, HashCheckingMode,
IndexStrategy, PreviewMode, Reinstall, SetupPyStrategy, SourceStrategy, Upgrade,
IndexStrategy, Reinstall, SetupPyStrategy, SourceStrategy, Upgrade,
};
use uv_configuration::{KeyringProviderType, TargetTriple};
use uv_dispatch::BuildDispatch;
@ -75,7 +75,6 @@ pub(crate) async fn pip_install(
prefix: Option<Prefix>,
concurrency: Concurrency,
native_tls: bool,
preview: PreviewMode,
cache: Cache,
dry_run: bool,
printer: Printer,
@ -321,7 +320,6 @@ pub(crate) async fn pip_install(
exclude_newer,
sources,
concurrency,
preview,
);
let options = OptionsBuilder::new()
@ -358,7 +356,6 @@ pub(crate) async fn pip_install(
options,
Box::new(DefaultResolveLogger),
printer,
preview,
)
.await
{
@ -392,7 +389,6 @@ pub(crate) async fn pip_install(
Box::new(DefaultInstallLogger),
dry_run,
printer,
preview,
)
.await?;

View file

@ -11,7 +11,6 @@ use unicode_width::UnicodeWidthStr;
use distribution_types::{Diagnostic, InstalledDist, Name};
use uv_cache::Cache;
use uv_cli::ListFormat;
use uv_configuration::PreviewMode;
use uv_fs::Simplified;
use uv_installer::SitePackages;
use uv_normalize::PackageName;
@ -30,7 +29,6 @@ pub(crate) fn pip_list(
strict: bool,
python: Option<&str>,
system: bool,
_preview: PreviewMode,
cache: &Cache,
printer: Printer,
) -> Result<ExitStatus> {

View file

@ -21,8 +21,7 @@ use pypi_types::Requirement;
use uv_cache::Cache;
use uv_client::{BaseClientBuilder, RegistryClient};
use uv_configuration::{
BuildOptions, Concurrency, Constraints, ExtrasSpecification, Overrides, PreviewMode, Reinstall,
Upgrade,
BuildOptions, Concurrency, Constraints, ExtrasSpecification, Overrides, Reinstall, Upgrade,
};
use uv_dispatch::BuildDispatch;
use uv_distribution::DistributionDatabase;
@ -111,7 +110,6 @@ pub(crate) async fn resolve<InstalledPackages: InstalledPackagesProvider>(
options: Options,
logger: Box<dyn ResolveLogger>,
printer: Printer,
preview: PreviewMode,
) -> Result<ResolutionGraph, Error> {
let start = std::time::Instant::now();
@ -122,7 +120,7 @@ pub(crate) async fn resolve<InstalledPackages: InstalledPackagesProvider>(
requirements,
hasher,
index,
DistributionDatabase::new(client, build_dispatch, concurrency.downloads, preview),
DistributionDatabase::new(client, build_dispatch, concurrency.downloads),
)
.with_reporter(ResolverReporter::from(printer))
.resolve()
@ -135,7 +133,7 @@ pub(crate) async fn resolve<InstalledPackages: InstalledPackagesProvider>(
extras,
hasher,
index,
DistributionDatabase::new(client, build_dispatch, concurrency.downloads, preview),
DistributionDatabase::new(client, build_dispatch, concurrency.downloads),
)
.with_reporter(ResolverReporter::from(printer))
.resolve()
@ -188,7 +186,7 @@ pub(crate) async fn resolve<InstalledPackages: InstalledPackagesProvider>(
overrides,
hasher,
index,
DistributionDatabase::new(client, build_dispatch, concurrency.downloads, preview),
DistributionDatabase::new(client, build_dispatch, concurrency.downloads),
)
.with_reporter(ResolverReporter::from(printer))
.resolve()
@ -213,7 +211,7 @@ pub(crate) async fn resolve<InstalledPackages: InstalledPackagesProvider>(
&dev,
hasher,
index,
DistributionDatabase::new(client, build_dispatch, concurrency.downloads, preview),
DistributionDatabase::new(client, build_dispatch, concurrency.downloads),
)
.with_reporter(ResolverReporter::from(printer))
.resolve(&markers)
@ -259,7 +257,7 @@ pub(crate) async fn resolve<InstalledPackages: InstalledPackagesProvider>(
hasher,
build_dispatch,
installed_packages,
DistributionDatabase::new(client, build_dispatch, concurrency.downloads, preview),
DistributionDatabase::new(client, build_dispatch, concurrency.downloads),
)?
.with_reporter(reporter);
@ -361,7 +359,6 @@ pub(crate) async fn install(
logger: Box<dyn InstallLogger>,
dry_run: bool,
printer: Printer,
preview: PreviewMode,
) -> Result<Changelog, Error> {
let start = std::time::Instant::now();
@ -429,7 +426,7 @@ pub(crate) async fn install(
tags,
hasher,
build_options,
DistributionDatabase::new(client, build_dispatch, concurrency.downloads, preview),
DistributionDatabase::new(client, build_dispatch, concurrency.downloads),
)
.with_reporter(PrepareReporter::from(printer).with_length(remote.len() as u64));

View file

@ -8,7 +8,6 @@ use tracing::debug;
use distribution_types::{Diagnostic, Name};
use uv_cache::Cache;
use uv_configuration::PreviewMode;
use uv_fs::Simplified;
use uv_installer::SitePackages;
use uv_normalize::PackageName;
@ -23,7 +22,6 @@ pub(crate) fn pip_show(
strict: bool,
python: Option<&str>,
system: bool,
_preview: PreviewMode,
cache: &Cache,
printer: Printer,
) -> Result<ExitStatus> {

View file

@ -13,7 +13,7 @@ use uv_cache::Cache;
use uv_client::{BaseClientBuilder, Connectivity, FlatIndexClient, RegistryClientBuilder};
use uv_configuration::{
BuildOptions, Concurrency, ConfigSettings, ExtrasSpecification, HashCheckingMode,
IndexStrategy, PreviewMode, Reinstall, SetupPyStrategy, SourceStrategy, Upgrade,
IndexStrategy, Reinstall, SetupPyStrategy, SourceStrategy, Upgrade,
};
use uv_configuration::{KeyringProviderType, TargetTriple};
use uv_dispatch::BuildDispatch;
@ -67,7 +67,6 @@ pub(crate) async fn pip_sync(
sources: SourceStrategy,
concurrency: Concurrency,
native_tls: bool,
preview: PreviewMode,
cache: Cache,
dry_run: bool,
printer: Printer,
@ -267,7 +266,6 @@ pub(crate) async fn pip_sync(
exclude_newer,
sources,
concurrency,
preview,
);
// Determine the set of installed packages.
@ -306,7 +304,6 @@ pub(crate) async fn pip_sync(
options,
Box::new(DefaultResolveLogger),
printer,
preview,
)
.await
{
@ -340,7 +337,6 @@ pub(crate) async fn pip_sync(
Box::new(DefaultInstallLogger),
dry_run,
printer,
preview,
)
.await?;

View file

@ -11,7 +11,7 @@ use pypi_types::Requirement;
use pypi_types::VerbatimParsedUrl;
use uv_cache::Cache;
use uv_client::{BaseClientBuilder, Connectivity};
use uv_configuration::{KeyringProviderType, PreviewMode};
use uv_configuration::KeyringProviderType;
use uv_fs::Simplified;
use uv_python::EnvironmentPreference;
use uv_python::PythonRequest;
@ -32,7 +32,6 @@ pub(crate) async fn pip_uninstall(
cache: Cache,
connectivity: Connectivity,
native_tls: bool,
_preview: PreviewMode,
keyring_provider: KeyringProviderType,
printer: Printer,
) -> Result<ExitStatus> {

View file

@ -11,9 +11,7 @@ use tracing::debug;
use uv_auth::{store_credentials_from_url, Credentials};
use uv_cache::Cache;
use uv_client::{BaseClientBuilder, Connectivity, FlatIndexClient, RegistryClientBuilder};
use uv_configuration::{
Concurrency, ExtrasSpecification, PreviewMode, SetupPyStrategy, SourceStrategy,
};
use uv_configuration::{Concurrency, ExtrasSpecification, SetupPyStrategy, SourceStrategy};
use uv_dispatch::BuildDispatch;
use uv_distribution::DistributionDatabase;
use uv_fs::{Simplified, CWD};
@ -61,17 +59,13 @@ pub(crate) async fn add(
script: Option<PathBuf>,
python_preference: PythonPreference,
python_downloads: PythonDownloads,
preview: PreviewMode,
connectivity: Connectivity,
concurrency: Concurrency,
native_tls: bool,
cache: &Cache,
printer: Printer,
) -> Result<ExitStatus> {
if preview.is_disabled() {
warn_user_once!("`uv add` is experimental and may change without warning");
}
for source in &requirements {
match source {
RequirementsSource::PyprojectToml(_) => {
@ -293,7 +287,6 @@ pub(crate) async fn add(
settings.exclude_newer,
sources,
concurrency,
preview,
);
// Resolve any unnamed requirements.
@ -301,7 +294,7 @@ pub(crate) async fn add(
requirements,
&hasher,
&state.index,
DistributionDatabase::new(&client, &build_dispatch, concurrency.downloads, preview),
DistributionDatabase::new(&client, &build_dispatch, concurrency.downloads),
)
.with_reporter(ResolverReporter::from(printer))
.resolve()
@ -461,7 +454,6 @@ pub(crate) async fn add(
venv.interpreter(),
settings.as_ref().into(),
Box::new(DefaultResolveLogger),
preview,
connectivity,
concurrency,
native_tls,
@ -599,7 +591,6 @@ pub(crate) async fn add(
settings.as_ref().into(),
&state,
Box::new(DefaultInstallLogger),
preview,
connectivity,
concurrency,
native_tls,

View file

@ -4,7 +4,7 @@ use cache_key::{cache_digest, hash_digest};
use distribution_types::Resolution;
use uv_cache::{Cache, CacheBucket};
use uv_client::Connectivity;
use uv_configuration::{Concurrency, PreviewMode};
use uv_configuration::Concurrency;
use uv_python::{Interpreter, PythonEnvironment};
use uv_requirements::RequirementsSpecification;
@ -34,7 +34,6 @@ impl CachedEnvironment {
state: &SharedState,
resolve: Box<dyn ResolveLogger>,
install: Box<dyn InstallLogger>,
preview: PreviewMode,
connectivity: Connectivity,
concurrency: Concurrency,
native_tls: bool,
@ -64,7 +63,6 @@ impl CachedEnvironment {
settings.as_ref().into(),
state,
resolve,
preview,
connectivity,
concurrency,
native_tls,
@ -114,7 +112,6 @@ impl CachedEnvironment {
settings.as_ref().into(),
state,
install,
preview,
connectivity,
concurrency,
native_tls,

View file

@ -8,7 +8,6 @@ use pep440_rs::Version;
use pep508_rs::PackageName;
use uv_cache::Cache;
use uv_client::{BaseClientBuilder, Connectivity};
use uv_configuration::PreviewMode;
use uv_fs::{absolutize_path, Simplified, CWD};
use uv_python::{
EnvironmentPreference, PythonDownloads, PythonInstallation, PythonPreference, PythonRequest,
@ -33,7 +32,6 @@ pub(crate) async fn init(
no_readme: bool,
python: Option<String>,
no_workspace: bool,
preview: PreviewMode,
python_preference: PythonPreference,
python_downloads: PythonDownloads,
connectivity: Connectivity,
@ -41,10 +39,6 @@ pub(crate) async fn init(
cache: &Cache,
printer: Printer,
) -> Result<ExitStatus> {
if preview.is_disabled() {
warn_user_once!("`uv init` is experimental and may change without warning");
}
// Default to the current directory if a path was not provided.
let path = match explicit_path {
None => CWD.to_path_buf(),

View file

@ -14,9 +14,7 @@ use pypi_types::Requirement;
use uv_auth::store_credentials_from_url;
use uv_cache::Cache;
use uv_client::{Connectivity, FlatIndexClient, RegistryClientBuilder};
use uv_configuration::{
Concurrency, ExtrasSpecification, PreviewMode, Reinstall, SetupPyStrategy, Upgrade,
};
use uv_configuration::{Concurrency, ExtrasSpecification, Reinstall, SetupPyStrategy, Upgrade};
use uv_dispatch::BuildDispatch;
use uv_distribution::DistributionDatabase;
use uv_fs::CWD;
@ -30,7 +28,7 @@ use uv_resolver::{
ResolverMarkers, SatisfiesResult,
};
use uv_types::{BuildContext, BuildIsolation, EmptyInstalledPackages, HashStrategy};
use uv_warnings::{warn_user, warn_user_once};
use uv_warnings::warn_user;
use uv_workspace::{DiscoveryOptions, SupportedEnvironments, Workspace};
use crate::commands::pip::loggers::{DefaultResolveLogger, ResolveLogger, SummaryResolveLogger};
@ -71,7 +69,7 @@ pub(crate) async fn lock(
frozen: bool,
python: Option<String>,
settings: ResolverSettings,
preview: PreviewMode,
python_preference: PythonPreference,
python_downloads: PythonDownloads,
connectivity: Connectivity,
@ -80,10 +78,6 @@ pub(crate) async fn lock(
cache: &Cache,
printer: Printer,
) -> anyhow::Result<ExitStatus> {
if preview.is_disabled() {
warn_user_once!("`uv lock` is experimental and may change without warning");
}
// Find the project requirements.
let workspace = Workspace::discover(&CWD, &DiscoveryOptions::default()).await?;
@ -109,7 +103,6 @@ pub(crate) async fn lock(
&interpreter,
settings.as_ref(),
Box::new(DefaultResolveLogger),
preview,
connectivity,
concurrency,
native_tls,
@ -143,7 +136,7 @@ pub(super) async fn do_safe_lock(
interpreter: &Interpreter,
settings: ResolverSettingsRef<'_>,
logger: Box<dyn ResolveLogger>,
preview: PreviewMode,
connectivity: Connectivity,
concurrency: Concurrency,
native_tls: bool,
@ -181,7 +174,6 @@ pub(super) async fn do_safe_lock(
settings,
&state,
logger,
preview,
connectivity,
concurrency,
native_tls,
@ -208,7 +200,6 @@ pub(super) async fn do_safe_lock(
settings,
&state,
logger,
preview,
connectivity,
concurrency,
native_tls,
@ -234,7 +225,7 @@ async fn do_lock(
settings: ResolverSettingsRef<'_>,
state: &SharedState,
logger: Box<dyn ResolveLogger>,
preview: PreviewMode,
connectivity: Connectivity,
concurrency: Concurrency,
native_tls: bool,
@ -421,18 +412,16 @@ async fn do_lock(
exclude_newer,
sources,
concurrency,
preview,
);
let database =
DistributionDatabase::new(&client, &build_dispatch, concurrency.downloads, preview);
let database = DistributionDatabase::new(&client, &build_dispatch, concurrency.downloads);
// Annoyingly, we have to resolve any unnamed overrides upfront.
let overrides = NamedRequirementsResolver::new(
overrides,
&hasher,
&state.index,
DistributionDatabase::new(&client, &build_dispatch, concurrency.downloads, preview),
DistributionDatabase::new(&client, &build_dispatch, concurrency.downloads),
)
.with_reporter(ResolverReporter::from(printer))
.resolve()
@ -545,7 +534,6 @@ async fn do_lock(
options,
Box::new(SummaryResolveLogger),
printer,
preview,
)
.await?;

View file

@ -11,9 +11,7 @@ use pypi_types::Requirement;
use uv_auth::store_credentials_from_url;
use uv_cache::Cache;
use uv_client::{BaseClientBuilder, Connectivity, FlatIndexClient, RegistryClientBuilder};
use uv_configuration::{
Concurrency, ExtrasSpecification, PreviewMode, Reinstall, SetupPyStrategy, Upgrade,
};
use uv_configuration::{Concurrency, ExtrasSpecification, Reinstall, SetupPyStrategy, Upgrade};
use uv_dispatch::BuildDispatch;
use uv_distribution::DistributionDatabase;
use uv_fs::Simplified;
@ -397,7 +395,6 @@ pub(crate) async fn resolve_names(
interpreter: &Interpreter,
settings: &ResolverInstallerSettings,
state: &SharedState,
preview: PreviewMode,
connectivity: Connectivity,
concurrency: Concurrency,
native_tls: bool,
@ -478,7 +475,6 @@ pub(crate) async fn resolve_names(
*exclude_newer,
*sources,
concurrency,
preview,
);
// Initialize the resolver.
@ -486,7 +482,7 @@ pub(crate) async fn resolve_names(
requirements,
&hasher,
&state.index,
DistributionDatabase::new(&client, &build_dispatch, concurrency.downloads, preview),
DistributionDatabase::new(&client, &build_dispatch, concurrency.downloads),
)
.with_reporter(ResolverReporter::from(printer));
@ -500,7 +496,6 @@ pub(crate) async fn resolve_environment<'a>(
settings: ResolverSettingsRef<'_>,
state: &SharedState,
logger: Box<dyn ResolveLogger>,
preview: PreviewMode,
connectivity: Connectivity,
concurrency: Concurrency,
native_tls: bool,
@ -616,7 +611,6 @@ pub(crate) async fn resolve_environment<'a>(
exclude_newer,
sources,
concurrency,
preview,
);
// Resolve the requirements.
@ -645,7 +639,6 @@ pub(crate) async fn resolve_environment<'a>(
options,
logger,
printer,
preview,
)
.await?)
}
@ -657,7 +650,6 @@ pub(crate) async fn sync_environment(
settings: InstallerSettingsRef<'_>,
state: &SharedState,
logger: Box<dyn InstallLogger>,
preview: PreviewMode,
connectivity: Connectivity,
concurrency: Concurrency,
native_tls: bool,
@ -742,7 +734,6 @@ pub(crate) async fn sync_environment(
exclude_newer,
sources,
concurrency,
preview,
);
// Sync the environment.
@ -766,7 +757,6 @@ pub(crate) async fn sync_environment(
logger,
dry_run,
printer,
preview,
)
.await?;
@ -800,7 +790,6 @@ pub(crate) async fn update_environment(
state: &SharedState,
resolve: Box<dyn ResolveLogger>,
install: Box<dyn InstallLogger>,
preview: PreviewMode,
connectivity: Connectivity,
concurrency: Concurrency,
native_tls: bool,
@ -939,7 +928,6 @@ pub(crate) async fn update_environment(
*exclude_newer,
*sources,
concurrency,
preview,
);
// Resolve the requirements.
@ -968,7 +956,6 @@ pub(crate) async fn update_environment(
options,
resolve,
printer,
preview,
)
.await
{
@ -997,7 +984,6 @@ pub(crate) async fn update_environment(
install,
dry_run,
printer,
preview,
)
.await?;

View file

@ -6,7 +6,7 @@ use owo_colors::OwoColorize;
use pep508_rs::PackageName;
use uv_cache::Cache;
use uv_client::Connectivity;
use uv_configuration::{Concurrency, ExtrasSpecification, PreviewMode};
use uv_configuration::{Concurrency, ExtrasSpecification};
use uv_fs::{Simplified, CWD};
use uv_python::{PythonDownloads, PythonPreference, PythonRequest};
use uv_scripts::Pep723Script;
@ -35,17 +35,13 @@ pub(crate) async fn remove(
script: Option<Pep723Script>,
python_preference: PythonPreference,
python_downloads: PythonDownloads,
preview: PreviewMode,
connectivity: Connectivity,
concurrency: Concurrency,
native_tls: bool,
cache: &Cache,
printer: Printer,
) -> Result<ExitStatus> {
if preview.is_disabled() {
warn_user_once!("`uv remove` is experimental and may change without warning");
}
let target = if let Some(script) = script {
// If we found a PEP 723 script and the user provided a project-only setting, warn.
if package.is_some() {
@ -178,7 +174,6 @@ pub(crate) async fn remove(
venv.interpreter(),
settings.as_ref().into(),
Box::new(DefaultResolveLogger),
preview,
connectivity,
concurrency,
native_tls,
@ -210,7 +205,6 @@ pub(crate) async fn remove(
settings.as_ref().into(),
&state,
Box::new(DefaultInstallLogger),
preview,
connectivity,
concurrency,
native_tls,

View file

@ -14,7 +14,7 @@ use tracing::debug;
use uv_cache::Cache;
use uv_cli::ExternalCommand;
use uv_client::{BaseClientBuilder, Connectivity};
use uv_configuration::{Concurrency, ExtrasSpecification, PreviewMode};
use uv_configuration::{Concurrency, ExtrasSpecification};
use uv_distribution::LoweredRequirement;
use uv_fs::{PythonExt, Simplified, CWD};
use uv_installer::{SatisfiesResult, SitePackages};
@ -56,7 +56,7 @@ pub(crate) async fn run(
dev: bool,
python: Option<String>,
settings: ResolverInstallerSettings,
preview: PreviewMode,
python_preference: PythonPreference,
python_downloads: PythonDownloads,
connectivity: Connectivity,
@ -65,10 +65,6 @@ pub(crate) async fn run(
cache: &Cache,
printer: Printer,
) -> anyhow::Result<ExitStatus> {
if preview.is_disabled() {
warn_user_once!("`uv run` is experimental and may change without warning");
}
// These cases seem quite complex because (in theory) they should change the "current package".
// Let's ban them entirely for now.
for source in &requirements {
@ -158,7 +154,6 @@ pub(crate) async fn run(
requirement,
script_dir,
script_sources,
preview,
)
.map(LoweredRequirement::into_inner)
})
@ -179,7 +174,6 @@ pub(crate) async fn run(
} else {
Box::new(SummaryInstallLogger)
},
preview,
connectivity,
concurrency,
native_tls,
@ -347,7 +341,6 @@ pub(crate) async fn run(
)
.await?;
// Note we force preview on during `uv run` for now since the entire interface is in preview.
PythonInstallation::find_or_download(
python_request,
EnvironmentPreference::Any,
@ -398,7 +391,6 @@ pub(crate) async fn run(
} else {
Box::new(SummaryResolveLogger)
},
preview,
connectivity,
concurrency,
native_tls,
@ -432,7 +424,6 @@ pub(crate) async fn run(
} else {
Box::new(SummaryInstallLogger)
},
preview,
connectivity,
concurrency,
native_tls,
@ -545,7 +536,6 @@ pub(crate) async fn run(
} else {
Box::new(SummaryInstallLogger)
},
preview,
connectivity,
concurrency,
native_tls,

View file

@ -4,9 +4,7 @@ use pep508_rs::MarkerTree;
use uv_auth::store_credentials_from_url;
use uv_cache::Cache;
use uv_client::{Connectivity, FlatIndexClient, RegistryClientBuilder};
use uv_configuration::{
Concurrency, ExtrasSpecification, HashCheckingMode, PreviewMode, SetupPyStrategy,
};
use uv_configuration::{Concurrency, ExtrasSpecification, HashCheckingMode, SetupPyStrategy};
use uv_dispatch::BuildDispatch;
use uv_fs::CWD;
use uv_installer::SitePackages;
@ -14,7 +12,6 @@ use uv_normalize::{PackageName, DEV_DEPENDENCIES};
use uv_python::{PythonDownloads, PythonEnvironment, PythonPreference, PythonRequest};
use uv_resolver::{FlatIndex, Lock};
use uv_types::{BuildIsolation, HashStrategy};
use uv_warnings::warn_user_once;
use uv_workspace::{DiscoveryOptions, VirtualProject, Workspace};
use crate::commands::pip::loggers::{DefaultInstallLogger, DefaultResolveLogger, InstallLogger};
@ -38,17 +35,13 @@ pub(crate) async fn sync(
python_preference: PythonPreference,
python_downloads: PythonDownloads,
settings: ResolverInstallerSettings,
preview: PreviewMode,
connectivity: Connectivity,
concurrency: Concurrency,
native_tls: bool,
cache: &Cache,
printer: Printer,
) -> Result<ExitStatus> {
if preview.is_disabled() {
warn_user_once!("`uv sync` is experimental and may change without warning");
}
// Identify the project.
let project = if let Some(package) = package {
VirtualProject::Project(
@ -81,7 +74,6 @@ pub(crate) async fn sync(
venv.interpreter(),
settings.as_ref().into(),
Box::new(DefaultResolveLogger),
preview,
connectivity,
concurrency,
native_tls,
@ -115,7 +107,6 @@ pub(crate) async fn sync(
settings.as_ref().into(),
&state,
Box::new(DefaultInstallLogger),
preview,
connectivity,
concurrency,
native_tls,
@ -138,7 +129,7 @@ pub(super) async fn do_sync(
settings: InstallerSettingsRef<'_>,
state: &SharedState,
logger: Box<dyn InstallLogger>,
preview: PreviewMode,
connectivity: Connectivity,
concurrency: Concurrency,
native_tls: bool,
@ -257,7 +248,6 @@ pub(super) async fn do_sync(
exclude_newer,
sources,
concurrency,
preview,
);
let site_packages = SitePackages::from_environment(venv)?;
@ -283,7 +273,6 @@ pub(super) async fn do_sync(
logger,
dry_run,
printer,
preview,
)
.await?;

View file

@ -6,11 +6,10 @@ use anyhow::Result;
use pep508_rs::PackageName;
use uv_cache::Cache;
use uv_client::Connectivity;
use uv_configuration::{Concurrency, PreviewMode, TargetTriple};
use uv_configuration::{Concurrency, TargetTriple};
use uv_fs::CWD;
use uv_python::{PythonDownloads, PythonPreference, PythonRequest, PythonVersion};
use uv_resolver::TreeDisplay;
use uv_warnings::warn_user_once;
use uv_workspace::{DiscoveryOptions, Workspace};
use crate::commands::pip::loggers::DefaultResolveLogger;
@ -36,17 +35,13 @@ pub(crate) async fn tree(
settings: ResolverSettings,
python_preference: PythonPreference,
python_downloads: PythonDownloads,
preview: PreviewMode,
connectivity: Connectivity,
concurrency: Concurrency,
native_tls: bool,
cache: &Cache,
printer: Printer,
) -> Result<ExitStatus> {
if preview.is_disabled() {
warn_user_once!("`uv tree` is experimental and may change without warning");
}
// Find the project requirements.
let workspace = Workspace::discover(&CWD, &DiscoveryOptions::default()).await?;
@ -72,7 +67,6 @@ pub(crate) async fn tree(
&interpreter,
settings.as_ref(),
Box::new(DefaultResolveLogger),
preview,
connectivity,
concurrency,
native_tls,

View file

@ -2,16 +2,11 @@ use anstream::println;
use anyhow::Context;
use owo_colors::OwoColorize;
use uv_configuration::PreviewMode;
use uv_fs::Simplified;
use uv_python::managed::ManagedPythonInstallations;
use uv_warnings::warn_user_once;
/// Show the toolchain directory.
pub(crate) fn dir(preview: PreviewMode) -> anyhow::Result<()> {
if preview.is_disabled() {
warn_user_once!("`uv python dir` is experimental and may change without warning");
}
pub(crate) fn dir() -> anyhow::Result<()> {
let installed_toolchains = ManagedPythonInstallations::from_settings()
.context("Failed to initialize toolchain settings")?;
println!(

View file

@ -2,10 +2,8 @@ use anstream::println;
use anyhow::Result;
use uv_cache::Cache;
use uv_configuration::PreviewMode;
use uv_fs::Simplified;
use uv_python::{EnvironmentPreference, PythonInstallation, PythonPreference, PythonRequest};
use uv_warnings::warn_user_once;
use crate::commands::ExitStatus;
@ -13,13 +11,8 @@ use crate::commands::ExitStatus;
pub(crate) async fn find(
request: Option<String>,
python_preference: PythonPreference,
preview: PreviewMode,
cache: &Cache,
) -> Result<ExitStatus> {
if preview.is_disabled() {
warn_user_once!("`uv python find` is experimental and may change without warning");
}
let request = match request {
Some(request) => PythonRequest::parse(&request),
None => PythonRequest::Any,

View file

@ -11,7 +11,6 @@ use owo_colors::OwoColorize;
use tracing::debug;
use uv_client::Connectivity;
use uv_configuration::PreviewMode;
use uv_fs::CWD;
use uv_python::downloads::{DownloadResult, ManagedPythonDownload, PythonDownloadRequest};
use uv_python::managed::{ManagedPythonInstallation, ManagedPythonInstallations};
@ -19,7 +18,6 @@ use uv_python::{
requests_from_version_file, PythonDownloads, PythonRequest, PYTHON_VERSIONS_FILENAME,
PYTHON_VERSION_FILENAME,
};
use uv_warnings::warn_user_once;
use crate::commands::python::{ChangeEvent, ChangeEventKind};
use crate::commands::reporters::PythonDownloadReporter;
@ -33,14 +31,9 @@ pub(crate) async fn install(
python_downloads: PythonDownloads,
native_tls: bool,
connectivity: Connectivity,
preview: PreviewMode,
no_config: bool,
printer: Printer,
) -> Result<ExitStatus> {
if preview.is_disabled() {
warn_user_once!("`uv python install` is experimental and may change without warning");
}
let start = std::time::Instant::now();
let installations = ManagedPythonInstallations::from_settings()?.init()?;

View file

@ -5,14 +5,12 @@ use anyhow::Result;
use owo_colors::OwoColorize;
use uv_cache::Cache;
use uv_configuration::PreviewMode;
use uv_fs::Simplified;
use uv_python::downloads::PythonDownloadRequest;
use uv_python::{
find_python_installations, DiscoveryError, EnvironmentPreference, PythonDownloads,
PythonInstallation, PythonNotFound, PythonPreference, PythonRequest, PythonSource,
};
use uv_warnings::warn_user_once;
use crate::commands::ExitStatus;
use crate::printer::Printer;
@ -33,14 +31,9 @@ pub(crate) async fn list(
all_platforms: bool,
python_preference: PythonPreference,
python_downloads: PythonDownloads,
preview: PreviewMode,
cache: &Cache,
printer: Printer,
) -> Result<ExitStatus> {
if preview.is_disabled() {
warn_user_once!("`uv python list` is experimental and may change without warning");
}
let mut output = BTreeSet::new();
if python_preference != PythonPreference::OnlySystem {
let download_request = match kinds {

View file

@ -6,7 +6,6 @@ use owo_colors::OwoColorize;
use tracing::debug;
use uv_cache::Cache;
use uv_configuration::PreviewMode;
use uv_fs::{Simplified, CWD};
use uv_python::{
request_from_version_file, requests_from_version_file, write_version_file,
@ -24,15 +23,10 @@ pub(crate) async fn pin(
request: Option<String>,
resolved: bool,
python_preference: PythonPreference,
preview: PreviewMode,
no_workspace: bool,
cache: &Cache,
printer: Printer,
) -> Result<ExitStatus> {
if preview.is_disabled() {
warn_user_once!("`uv python pin` is experimental and may change without warning");
}
let virtual_project = if no_workspace {
None
} else {

View file

@ -7,11 +7,9 @@ use futures::StreamExt;
use itertools::Itertools;
use owo_colors::OwoColorize;
use uv_configuration::PreviewMode;
use uv_python::downloads::PythonDownloadRequest;
use uv_python::managed::ManagedPythonInstallations;
use uv_python::PythonRequest;
use uv_warnings::warn_user_once;
use crate::commands::python::{ChangeEvent, ChangeEventKind};
use crate::commands::{elapsed, ExitStatus};
@ -21,13 +19,9 @@ use crate::printer::Printer;
pub(crate) async fn uninstall(
targets: Vec<String>,
all: bool,
preview: PreviewMode,
printer: Printer,
) -> Result<ExitStatus> {
if preview.is_disabled() {
warn_user_once!("`uv python uninstall` is experimental and may change without warning");
}
let start = std::time::Instant::now();
let installations = ManagedPythonInstallations::from_settings()?.init()?;

View file

@ -5,14 +5,9 @@ use owo_colors::OwoColorize;
use uv_configuration::PreviewMode;
use uv_fs::Simplified;
use uv_tool::{find_executable_directory, InstalledTools};
use uv_warnings::warn_user_once;
/// Show the tool directory.
pub(crate) fn dir(bin: bool, preview: PreviewMode) -> anyhow::Result<()> {
if preview.is_disabled() {
warn_user_once!("`uv tool dir` is experimental and may change without warning");
}
pub(crate) fn dir(bin: bool, _preview: PreviewMode) -> anyhow::Result<()> {
if bin {
let executable_directory = find_executable_directory()?;
println!("{}", executable_directory.simplified_display().cyan());

View file

@ -8,7 +8,7 @@ use tracing::debug;
use uv_cache::Cache;
use uv_client::{BaseClientBuilder, Connectivity};
use uv_configuration::{Concurrency, PreviewMode};
use uv_configuration::Concurrency;
use uv_normalize::PackageName;
use uv_python::{
EnvironmentPreference, PythonDownloads, PythonInstallation, PythonPreference, PythonRequest,
@ -16,7 +16,7 @@ use uv_python::{
use uv_requirements::{RequirementsSource, RequirementsSpecification};
use uv_settings::{ResolverInstallerOptions, ToolOptions};
use uv_tool::InstalledTools;
use uv_warnings::{warn_user, warn_user_once};
use uv_warnings::warn_user;
use crate::commands::pip::loggers::{DefaultInstallLogger, DefaultResolveLogger};
@ -39,7 +39,6 @@ pub(crate) async fn install(
force: bool,
options: ResolverInstallerOptions,
settings: ResolverInstallerSettings,
preview: PreviewMode,
python_preference: PythonPreference,
python_downloads: PythonDownloads,
connectivity: Connectivity,
@ -48,10 +47,6 @@ pub(crate) async fn install(
cache: &Cache,
printer: Printer,
) -> Result<ExitStatus> {
if preview.is_disabled() {
warn_user_once!("`uv tool install` is experimental and may change without warning");
}
let client_builder = BaseClientBuilder::new()
.connectivity(connectivity)
.native_tls(native_tls);
@ -104,7 +99,6 @@ pub(crate) async fn install(
&interpreter,
&settings,
&state,
preview,
connectivity,
concurrency,
native_tls,
@ -142,7 +136,6 @@ pub(crate) async fn install(
&interpreter,
&settings,
&state,
preview,
connectivity,
concurrency,
native_tls,
@ -167,7 +160,6 @@ pub(crate) async fn install(
&interpreter,
&settings,
&state,
preview,
connectivity,
concurrency,
native_tls,
@ -284,7 +276,6 @@ pub(crate) async fn install(
&state,
Box::new(DefaultResolveLogger),
Box::new(DefaultInstallLogger),
preview,
connectivity,
concurrency,
native_tls,
@ -310,7 +301,6 @@ pub(crate) async fn install(
settings.as_ref().into(),
&state,
Box::new(DefaultResolveLogger),
preview,
connectivity,
concurrency,
native_tls,
@ -334,7 +324,6 @@ pub(crate) async fn install(
settings.as_ref().into(),
&state,
Box::new(DefaultInstallLogger),
preview,
connectivity,
concurrency,
native_tls,

View file

@ -4,25 +4,15 @@ use anyhow::Result;
use owo_colors::OwoColorize;
use uv_cache::Cache;
use uv_configuration::PreviewMode;
use uv_fs::Simplified;
use uv_tool::InstalledTools;
use uv_warnings::{warn_user, warn_user_once};
use uv_warnings::warn_user;
use crate::commands::ExitStatus;
use crate::printer::Printer;
/// List installed tools.
pub(crate) async fn list(
show_paths: bool,
preview: PreviewMode,
cache: &Cache,
printer: Printer,
) -> Result<ExitStatus> {
if preview.is_disabled() {
warn_user_once!("`uv tool list` is experimental and may change without warning");
}
pub(crate) async fn list(show_paths: bool, cache: &Cache, printer: Printer) -> Result<ExitStatus> {
let installed_tools = InstalledTools::from_settings()?;
let _lock = match installed_tools.acquire_lock() {
Ok(lock) => lock,

View file

@ -18,7 +18,7 @@ use pypi_types::{Requirement, RequirementSource};
use uv_cache::{Cache, Refresh, Timestamp};
use uv_cli::ExternalCommand;
use uv_client::{BaseClientBuilder, Connectivity};
use uv_configuration::{Concurrency, PreviewMode};
use uv_configuration::Concurrency;
use uv_installer::{SatisfiesResult, SitePackages};
use uv_normalize::PackageName;
use uv_python::{
@ -27,7 +27,7 @@ use uv_python::{
};
use uv_requirements::{RequirementsSource, RequirementsSpecification};
use uv_tool::{entrypoint_paths, InstalledTools};
use uv_warnings::{warn_user, warn_user_once};
use uv_warnings::warn_user;
use crate::commands::pip::loggers::{
DefaultInstallLogger, DefaultResolveLogger, SummaryInstallLogger, SummaryResolveLogger,
@ -70,7 +70,6 @@ pub(crate) async fn run(
settings: ResolverInstallerSettings,
invocation_source: ToolRunCommand,
isolated: bool,
preview: PreviewMode,
python_preference: PythonPreference,
python_downloads: PythonDownloads,
connectivity: Connectivity,
@ -79,13 +78,9 @@ pub(crate) async fn run(
cache: Cache,
printer: Printer,
) -> anyhow::Result<ExitStatus> {
if preview.is_disabled() {
warn_user_once!("`{invocation_source}` is experimental and may change without warning");
}
// treat empty command as `uv tool list`
let Some(command) = command else {
return tool_list(false, PreviewMode::Enabled, &cache, printer).await;
return tool_list(false, &cache, printer).await;
};
let (target, args) = command.split();
@ -110,7 +105,6 @@ pub(crate) async fn run(
python.as_deref(),
&settings,
isolated,
preview,
python_preference,
python_downloads,
connectivity,
@ -380,7 +374,6 @@ async fn get_or_create_environment(
python: Option<&str>,
settings: &ResolverInstallerSettings,
isolated: bool,
preview: PreviewMode,
python_preference: PythonPreference,
python_downloads: PythonDownloads,
connectivity: Connectivity,
@ -456,7 +449,6 @@ async fn get_or_create_environment(
&interpreter,
settings,
&state,
preview,
connectivity,
concurrency,
native_tls,
@ -486,7 +478,6 @@ async fn get_or_create_environment(
&interpreter,
settings,
&state,
preview,
connectivity,
concurrency,
native_tls,
@ -559,7 +550,6 @@ async fn get_or_create_environment(
} else {
Box::new(SummaryInstallLogger)
},
preview,
connectivity,
concurrency,
native_tls,

View file

@ -5,25 +5,15 @@ use itertools::Itertools;
use owo_colors::OwoColorize;
use tracing::debug;
use uv_configuration::PreviewMode;
use uv_fs::Simplified;
use uv_normalize::PackageName;
use uv_tool::{InstalledTools, Tool, ToolEntrypoint};
use uv_warnings::warn_user_once;
use crate::commands::ExitStatus;
use crate::printer::Printer;
/// Uninstall a tool.
pub(crate) async fn uninstall(
name: Option<PackageName>,
preview: PreviewMode,
printer: Printer,
) -> Result<ExitStatus> {
if preview.is_disabled() {
warn_user_once!("`uv tool uninstall` is experimental and may change without warning");
}
pub(crate) async fn uninstall(name: Option<PackageName>, printer: Printer) -> Result<ExitStatus> {
let installed_tools = InstalledTools::from_settings()?.init()?;
let _lock = match installed_tools.acquire_lock() {
Ok(lock) => lock,

View file

@ -7,21 +7,15 @@ use owo_colors::OwoColorize;
use tokio::io::AsyncWriteExt;
use tracing::debug;
use uv_configuration::PreviewMode;
use uv_fs::Simplified;
use uv_shell::Shell;
use uv_tool::find_executable_directory;
use uv_warnings::warn_user_once;
use crate::commands::ExitStatus;
use crate::printer::Printer;
/// Ensure that the executable directory is in PATH.
pub(crate) async fn update_shell(preview: PreviewMode, printer: Printer) -> Result<ExitStatus> {
if preview.is_disabled() {
warn_user_once!("`uv tool update-shell` is experimental and may change without warning");
}
pub(crate) async fn update_shell(printer: Printer) -> Result<ExitStatus> {
let executable_directory = find_executable_directory()?;
debug!(
"Ensuring that the executable directory is in PATH: {}",

View file

@ -6,12 +6,11 @@ use tracing::debug;
use uv_cache::Cache;
use uv_client::Connectivity;
use uv_configuration::{Concurrency, PreviewMode};
use uv_configuration::Concurrency;
use uv_normalize::PackageName;
use uv_requirements::RequirementsSpecification;
use uv_settings::{Combine, ResolverInstallerOptions, ToolOptions};
use uv_tool::InstalledTools;
use uv_warnings::warn_user_once;
use crate::commands::pip::loggers::{SummaryResolveLogger, UpgradeInstallLogger};
use crate::commands::project::{update_environment, EnvironmentUpdate};
@ -29,13 +28,9 @@ pub(crate) async fn upgrade(
concurrency: Concurrency,
native_tls: bool,
cache: &Cache,
preview: PreviewMode,
printer: Printer,
) -> Result<ExitStatus> {
if preview.is_disabled() {
warn_user_once!("`uv tool upgrade` is experimental and may change without warning");
}
// Initialize any shared state.
let state = SharedState::default();
@ -136,7 +131,6 @@ pub(crate) async fn upgrade(
&state,
Box::new(SummaryResolveLogger),
Box::new(UpgradeInstallLogger::new(name.clone())),
preview,
connectivity,
concurrency,
native_tls,

View file

@ -17,7 +17,7 @@ use uv_cache::Cache;
use uv_client::{BaseClientBuilder, Connectivity, FlatIndexClient, RegistryClientBuilder};
use uv_configuration::{
BuildOptions, Concurrency, ConfigSettings, IndexStrategy, KeyringProviderType, NoBinary,
NoBuild, PreviewMode, SetupPyStrategy, SourceStrategy,
NoBuild, SetupPyStrategy, SourceStrategy,
};
use uv_dispatch::BuildDispatch;
use uv_fs::{Simplified, CWD};
@ -56,7 +56,6 @@ pub(crate) async fn venv(
allow_existing: bool,
exclude_newer: Option<ExcludeNewer>,
native_tls: bool,
preview: PreviewMode,
cache: &Cache,
printer: Printer,
relocatable: bool,
@ -72,7 +71,6 @@ pub(crate) async fn venv(
system_site_packages,
connectivity,
seed,
preview,
python_preference,
python_downloads,
allow_existing,
@ -124,7 +122,6 @@ async fn venv_impl(
system_site_packages: bool,
connectivity: Connectivity,
seed: bool,
preview: PreviewMode,
python_preference: PythonPreference,
python_downloads: PythonDownloads,
allow_existing: bool,
@ -134,10 +131,6 @@ async fn venv_impl(
printer: Printer,
relocatable: bool,
) -> miette::Result<ExitStatus> {
if preview.is_disabled() && relocatable {
warn_user_once!("`--relocatable` is experimental and may change without warning");
}
let client_builder = BaseClientBuilder::default()
.connectivity(connectivity)
.native_tls(native_tls);
@ -148,7 +141,7 @@ async fn venv_impl(
let mut interpreter_request = python_request.map(PythonRequest::parse);
// (2) Request from `.python-version`
if preview.is_enabled() && interpreter_request.is_none() {
if interpreter_request.is_none() {
interpreter_request =
request_from_version_file(&std::env::current_dir().into_diagnostic()?)
.await
@ -156,7 +149,7 @@ async fn venv_impl(
}
// (3) `Requires-Python` in `pyproject.toml`
if preview.is_enabled() && interpreter_request.is_none() {
if interpreter_request.is_none() {
let project = match VirtualProject::discover(&CWD, &DiscoveryOptions::default()).await {
Ok(project) => Some(project),
Err(WorkspaceError::MissingProject(_)) => None,
@ -305,7 +298,6 @@ async fn venv_impl(
exclude_newer,
sources,
concurrency,
preview,
);
// Resolve the seed packages.

View file

@ -159,7 +159,7 @@ async fn run(cli: Cli) -> Result<ExitStatus> {
.combine(filesystem);
// Resolve the global settings.
let globals = GlobalSettings::resolve(&cli.command, &cli.global_args, filesystem.as_ref());
let globals = GlobalSettings::resolve(&cli.global_args, filesystem.as_ref());
// Resolve the cache settings.
let cache_settings = CacheSettings::resolve(*cli.cache_args, filesystem.as_ref());
@ -326,7 +326,6 @@ async fn run(cli: Cli) -> Result<ExitStatus> {
args.settings.concurrency,
globals.native_tls,
globals.quiet,
globals.preview,
cache,
printer,
)
@ -399,7 +398,6 @@ async fn run(cli: Cli) -> Result<ExitStatus> {
args.settings.sources,
args.settings.concurrency,
globals.native_tls,
globals.preview,
cache,
args.dry_run,
printer,
@ -492,7 +490,6 @@ async fn run(cli: Cli) -> Result<ExitStatus> {
args.settings.prefix,
args.settings.concurrency,
globals.native_tls,
globals.preview,
cache,
args.dry_run,
printer,
@ -529,7 +526,6 @@ async fn run(cli: Cli) -> Result<ExitStatus> {
cache,
globals.connectivity,
globals.native_tls,
globals.preview,
args.settings.keyring_provider,
printer,
)
@ -550,7 +546,6 @@ async fn run(cli: Cli) -> Result<ExitStatus> {
args.settings.strict,
args.settings.python.as_deref(),
args.settings.system,
globals.preview,
&cache,
printer,
)
@ -574,7 +569,6 @@ async fn run(cli: Cli) -> Result<ExitStatus> {
args.settings.strict,
args.settings.python.as_deref(),
args.settings.system,
globals.preview,
&cache,
printer,
)
@ -594,7 +588,6 @@ async fn run(cli: Cli) -> Result<ExitStatus> {
args.settings.strict,
args.settings.python.as_deref(),
args.settings.system,
globals.preview,
&cache,
printer,
)
@ -635,7 +628,6 @@ async fn run(cli: Cli) -> Result<ExitStatus> {
commands::pip_check(
args.settings.python.as_deref(),
args.settings.system,
globals.preview,
&cache,
printer,
)
@ -702,7 +694,6 @@ async fn run(cli: Cli) -> Result<ExitStatus> {
args.allow_existing,
args.settings.exclude_newer,
globals.native_tls,
globals.preview,
&cache,
printer,
args.relocatable,
@ -768,7 +759,6 @@ async fn run(cli: Cli) -> Result<ExitStatus> {
args.settings,
invocation_source,
args.isolated,
globals.preview,
globals.python_preference,
globals.python_downloads,
globals.connectivity,
@ -813,7 +803,6 @@ async fn run(cli: Cli) -> Result<ExitStatus> {
args.force,
args.options,
args.settings,
globals.preview,
globals.python_preference,
globals.python_downloads,
globals.connectivity,
@ -834,7 +823,7 @@ async fn run(cli: Cli) -> Result<ExitStatus> {
// Initialize the cache.
let cache = cache.init()?;
commands::tool_list(args.show_paths, globals.preview, &cache, printer).await
commands::tool_list(args.show_paths, &cache, printer).await
}
Commands::Tool(ToolNamespace {
command: ToolCommand::Upgrade(args),
@ -854,7 +843,6 @@ async fn run(cli: Cli) -> Result<ExitStatus> {
Concurrency::default(),
globals.native_tls,
&cache,
globals.preview,
printer,
)
.await
@ -866,12 +854,12 @@ async fn run(cli: Cli) -> Result<ExitStatus> {
let args = settings::ToolUninstallSettings::resolve(args, filesystem);
show_settings!(args);
commands::tool_uninstall(args.name, globals.preview, printer).await
commands::tool_uninstall(args.name, printer).await
}
Commands::Tool(ToolNamespace {
command: ToolCommand::UpdateShell,
}) => {
commands::tool_update_shell(globals.preview, printer).await?;
commands::tool_update_shell(printer).await?;
Ok(ExitStatus::Success)
}
Commands::Tool(ToolNamespace {
@ -900,7 +888,6 @@ async fn run(cli: Cli) -> Result<ExitStatus> {
args.all_platforms,
globals.python_preference,
globals.python_downloads,
globals.preview,
&cache,
printer,
)
@ -919,7 +906,6 @@ async fn run(cli: Cli) -> Result<ExitStatus> {
globals.python_downloads,
globals.native_tls,
globals.connectivity,
globals.preview,
cli.no_config,
printer,
)
@ -932,7 +918,7 @@ async fn run(cli: Cli) -> Result<ExitStatus> {
let args = settings::PythonUninstallSettings::resolve(args, filesystem);
show_settings!(args);
commands::python_uninstall(args.targets, args.all, globals.preview, printer).await
commands::python_uninstall(args.targets, args.all, printer).await
}
Commands::Python(PythonNamespace {
command: PythonCommand::Find(args),
@ -943,13 +929,7 @@ async fn run(cli: Cli) -> Result<ExitStatus> {
// Initialize the cache.
let cache = cache.init()?;
commands::python_find(
args.request,
globals.python_preference,
globals.preview,
&cache,
)
.await
commands::python_find(args.request, globals.python_preference, &cache).await
}
Commands::Python(PythonNamespace {
command: PythonCommand::Pin(args),
@ -964,7 +944,6 @@ async fn run(cli: Cli) -> Result<ExitStatus> {
args.request,
args.resolved,
globals.python_preference,
globals.preview,
args.no_workspace,
&cache,
printer,
@ -974,7 +953,7 @@ async fn run(cli: Cli) -> Result<ExitStatus> {
Commands::Python(PythonNamespace {
command: PythonCommand::Dir,
}) => {
commands::python_dir(globals.preview)?;
commands::python_dir()?;
Ok(ExitStatus::Success)
}
}
@ -1020,7 +999,6 @@ async fn run_project(
args.no_readme,
args.python,
args.no_workspace,
globals.preview,
globals.python_preference,
globals.python_downloads,
globals.connectivity,
@ -1067,7 +1045,6 @@ async fn run_project(
args.dev,
args.python,
args.settings,
globals.preview,
globals.python_preference,
globals.python_downloads,
globals.connectivity,
@ -1101,7 +1078,6 @@ async fn run_project(
globals.python_preference,
globals.python_downloads,
args.settings,
globals.preview,
globals.connectivity,
Concurrency::default(),
globals.native_tls,
@ -1123,7 +1099,6 @@ async fn run_project(
args.frozen,
args.python,
args.settings,
globals.preview,
globals.python_preference,
globals.python_downloads,
globals.connectivity,
@ -1185,7 +1160,6 @@ async fn run_project(
args.script,
globals.python_preference,
globals.python_downloads,
globals.preview,
globals.connectivity,
Concurrency::default(),
globals.native_tls,
@ -1218,7 +1192,6 @@ async fn run_project(
script,
globals.python_preference,
globals.python_downloads,
globals.preview,
globals.connectivity,
Concurrency::default(),
globals.native_tls,
@ -1250,7 +1223,6 @@ async fn run_project(
args.resolver,
globals.python_preference,
globals.python_downloads,
globals.preview,
globals.connectivity,
Concurrency::default(),
globals.native_tls,

View file

@ -14,8 +14,8 @@ use uv_cli::{
ToolUpgradeArgs,
};
use uv_cli::{
AddArgs, ColorChoice, Commands, ExternalCommand, GlobalArgs, InitArgs, ListFormat, LockArgs,
Maybe, PipCheckArgs, PipCompileArgs, PipFreezeArgs, PipInstallArgs, PipListArgs, PipShowArgs,
AddArgs, ColorChoice, ExternalCommand, GlobalArgs, InitArgs, ListFormat, LockArgs, Maybe,
PipCheckArgs, PipCompileArgs, PipFreezeArgs, PipInstallArgs, PipListArgs, PipShowArgs,
PipSyncArgs, PipTreeArgs, PipUninstallArgs, PythonFindArgs, PythonInstallArgs, PythonListArgs,
PythonPinArgs, PythonUninstallArgs, RemoveArgs, RunArgs, SyncArgs, ToolDirArgs,
ToolInstallArgs, ToolListArgs, ToolRunArgs, ToolUninstallArgs, TreeArgs, VenvArgs,
@ -56,30 +56,13 @@ pub(crate) struct GlobalSettings {
impl GlobalSettings {
/// Resolve the [`GlobalSettings`] from the CLI and filesystem configuration.
pub(crate) fn resolve(
command: &Commands,
args: &GlobalArgs,
workspace: Option<&FilesystemOptions>,
) -> Self {
pub(crate) fn resolve(args: &GlobalArgs, workspace: Option<&FilesystemOptions>) -> Self {
let preview = PreviewMode::from(
flag(args.preview, args.no_preview)
.combine(workspace.and_then(|workspace| workspace.globals.preview))
.unwrap_or(false),
);
// Always use preview mode python preferences during preview commands
// TODO(zanieb): There should be a cleaner way to do this, we should probably resolve
// force preview to true for these commands but it would break our experimental warning
// right now
let default_python_preference = if matches!(
command,
Commands::Project(_) | Commands::Python(_) | Commands::Tool(_)
) {
PythonPreference::default_from(PreviewMode::Enabled)
} else {
PythonPreference::default_from(preview)
};
Self {
quiet: args.quiet,
verbose: args.verbose,
@ -116,7 +99,7 @@ impl GlobalSettings {
python_preference: args
.python_preference
.combine(workspace.and_then(|workspace| workspace.globals.python_preference))
.unwrap_or(default_python_preference),
.unwrap_or_else(PythonPreference::default_from_env),
python_downloads: flag(args.allow_python_downloads, args.no_python_downloads)
.map(PythonDownloads::from)
.combine(workspace.and_then(|workspace| workspace.globals.python_downloads))

View file

@ -91,7 +91,6 @@ fn prune_cached_env() {
pytest 8.0.0
----- stderr -----
warning: `uv tool run` is experimental and may change without warning
Resolved [N] packages in [TIME]
Prepared [N] packages in [TIME]
Installed [N] packages in [TIME]

View file

@ -31,7 +31,6 @@ fn add_registry() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv add` is experimental and may change without warning
Resolved 4 packages in [TIME]
Prepared 4 packages in [TIME]
Installed 4 packages in [TIME]
@ -125,7 +124,6 @@ fn add_registry() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv sync` is experimental and may change without warning
Audited 4 packages in [TIME]
"###);
@ -153,7 +151,6 @@ fn add_git() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv lock` is experimental and may change without warning
Resolved 4 packages in [TIME]
"###);
@ -163,7 +160,6 @@ fn add_git() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv sync` is experimental and may change without warning
Prepared 4 packages in [TIME]
Installed 4 packages in [TIME]
+ anyio==3.7.0
@ -292,7 +288,6 @@ fn add_git() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv sync` is experimental and may change without warning
Audited 5 packages in [TIME]
"###);
@ -389,7 +384,6 @@ fn add_git_private_source() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv sync` is experimental and may change without warning
Audited 2 packages in [TIME]
"###);
@ -488,7 +482,6 @@ fn add_git_private_raw() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv sync` is experimental and may change without warning
Audited 2 packages in [TIME]
"###);
@ -515,7 +508,6 @@ fn add_git_error() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv lock` is experimental and may change without warning
Resolved 1 package in [TIME]
"###);
@ -525,7 +517,6 @@ fn add_git_error() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv sync` is experimental and may change without warning
Prepared 1 package in [TIME]
Installed 1 package in [TIME]
+ project==0.1.0 (from file://[TEMP_DIR]/)
@ -575,7 +566,6 @@ fn add_git_raw() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv lock` is experimental and may change without warning
Resolved 4 packages in [TIME]
"###);
@ -585,7 +575,6 @@ fn add_git_raw() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv sync` is experimental and may change without warning
Prepared 4 packages in [TIME]
Installed 4 packages in [TIME]
+ anyio==3.7.0
@ -702,7 +691,6 @@ fn add_git_raw() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv sync` is experimental and may change without warning
Audited 5 packages in [TIME]
"###);
@ -730,7 +718,6 @@ fn add_git_implicit() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv lock` is experimental and may change without warning
Resolved 4 packages in [TIME]
"###);
@ -740,7 +727,6 @@ fn add_git_implicit() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv sync` is experimental and may change without warning
Prepared 4 packages in [TIME]
Installed 4 packages in [TIME]
+ anyio==3.7.0
@ -889,7 +875,6 @@ fn add_unnamed() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv sync` is experimental and may change without warning
Audited 2 packages in [TIME]
"###);
@ -916,7 +901,6 @@ fn add_remove_dev() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv add` is experimental and may change without warning
Resolved 4 packages in [TIME]
Prepared 4 packages in [TIME]
Installed 4 packages in [TIME]
@ -1017,7 +1001,6 @@ fn add_remove_dev() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv sync` is experimental and may change without warning
Audited 4 packages in [TIME]
"###);
@ -1028,7 +1011,6 @@ fn add_remove_dev() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv remove` is experimental and may change without warning
warning: `anyio` is a development dependency; try calling `uv remove --dev`
error: The dependency `anyio` could not be found in `dependencies`
"###);
@ -1040,7 +1022,6 @@ fn add_remove_dev() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv remove` is experimental and may change without warning
Resolved 1 package in [TIME]
Prepared 1 package in [TIME]
Uninstalled 4 packages in [TIME]
@ -1098,7 +1079,6 @@ fn add_remove_dev() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv sync` is experimental and may change without warning
Audited 1 package in [TIME]
"###);
@ -1125,7 +1105,6 @@ fn add_remove_optional() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv add` is experimental and may change without warning
Resolved 4 packages in [TIME]
Prepared 4 packages in [TIME]
Installed 4 packages in [TIME]
@ -1225,7 +1204,6 @@ fn add_remove_optional() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv sync` is experimental and may change without warning
Uninstalled 3 packages in [TIME]
- anyio==3.7.0
- idna==3.6
@ -1239,7 +1217,6 @@ fn add_remove_optional() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv remove` is experimental and may change without warning
warning: `anyio` is an optional dependency; try calling `uv remove --optional io`
error: The dependency `anyio` could not be found in `dependencies`
"###);
@ -1251,7 +1228,6 @@ fn add_remove_optional() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv remove` is experimental and may change without warning
Resolved 1 package in [TIME]
Prepared 1 package in [TIME]
Uninstalled 1 package in [TIME]
@ -1306,7 +1282,6 @@ fn add_remove_optional() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv sync` is experimental and may change without warning
Audited 1 package in [TIME]
"###);
@ -1449,7 +1424,6 @@ fn add_remove_workspace() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv sync` is experimental and may change without warning
Audited 2 packages in [TIME]
"###);
@ -1460,7 +1434,6 @@ fn add_remove_workspace() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv remove` is experimental and may change without warning
Resolved 2 packages in [TIME]
Prepared 1 package in [TIME]
Uninstalled 2 packages in [TIME]
@ -1526,7 +1499,6 @@ fn add_remove_workspace() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv sync` is experimental and may change without warning
Audited 1 package in [TIME]
"###);
@ -1649,7 +1621,6 @@ fn add_workspace_editable() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv sync` is experimental and may change without warning
Audited 2 packages in [TIME]
"###);
@ -1679,7 +1650,6 @@ fn update() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv lock` is experimental and may change without warning
Resolved 6 packages in [TIME]
"###);
@ -1689,7 +1659,6 @@ fn update() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv sync` is experimental and may change without warning
Prepared 6 packages in [TIME]
Installed 6 packages in [TIME]
+ certifi==2024.2.2
@ -1707,7 +1676,6 @@ fn update() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv add` is experimental and may change without warning
Resolved 6 packages in [TIME]
Prepared 1 package in [TIME]
Uninstalled 1 package in [TIME]
@ -1740,7 +1708,6 @@ fn update() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv add` is experimental and may change without warning
Resolved 8 packages in [TIME]
Prepared 3 packages in [TIME]
Uninstalled 1 package in [TIME]
@ -1777,8 +1744,6 @@ fn update() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv add` is experimental and may change without warning
warning: `uv.sources` is experimental and may change without warning
Resolved 8 packages in [TIME]
Prepared 2 packages in [TIME]
Uninstalled 2 packages in [TIME]
@ -1935,7 +1900,6 @@ fn update() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv sync` is experimental and may change without warning
Audited 8 packages in [TIME]
"###);
@ -1963,7 +1927,6 @@ fn add_update_marker() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv lock` is experimental and may change without warning
Resolved 6 packages in [TIME]
"###);
@ -1973,7 +1936,6 @@ fn add_update_marker() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv sync` is experimental and may change without warning
Prepared 6 packages in [TIME]
Installed 6 packages in [TIME]
+ certifi==2024.2.2
@ -1991,7 +1953,6 @@ fn add_update_marker() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv add` is experimental and may change without warning
Resolved 8 packages in [TIME]
Prepared 1 package in [TIME]
Uninstalled 1 package in [TIME]
@ -2026,7 +1987,6 @@ fn add_update_marker() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv add` is experimental and may change without warning
Resolved 10 packages in [TIME]
Prepared 1 package in [TIME]
Uninstalled 1 package in [TIME]
@ -2061,7 +2021,6 @@ fn add_update_marker() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv add` is experimental and may change without warning
Resolved 8 packages in [TIME]
Prepared 3 packages in [TIME]
Uninstalled 3 packages in [TIME]
@ -2101,7 +2060,6 @@ fn add_update_marker() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv add` is experimental and may change without warning
Resolved 8 packages in [TIME]
Prepared 1 package in [TIME]
Uninstalled 1 package in [TIME]
@ -2139,7 +2097,6 @@ fn add_update_marker() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv remove` is experimental and may change without warning
Resolved 1 package in [TIME]
Prepared 1 package in [TIME]
Uninstalled 6 packages in [TIME]
@ -2195,8 +2152,6 @@ fn update_source_replace_url() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv add` is experimental and may change without warning
warning: `uv.sources` is experimental and may change without warning
Resolved 6 packages in [TIME]
Prepared 6 packages in [TIME]
Installed 6 packages in [TIME]
@ -2254,7 +2209,6 @@ fn add_no_clean() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv lock` is experimental and may change without warning
Resolved 4 packages in [TIME]
"###);
@ -2264,7 +2218,6 @@ fn add_no_clean() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv sync` is experimental and may change without warning
Prepared 4 packages in [TIME]
Installed 4 packages in [TIME]
+ anyio==3.7.0
@ -2288,7 +2241,6 @@ fn add_no_clean() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv add` is experimental and may change without warning
Resolved 2 packages in [TIME]
Prepared 2 packages in [TIME]
Uninstalled 1 package in [TIME]
@ -2358,7 +2310,6 @@ fn add_no_clean() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv sync` is experimental and may change without warning
Audited 2 packages in [TIME]
"###);
@ -2369,7 +2320,6 @@ fn add_no_clean() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv sync` is experimental and may change without warning
Uninstalled 3 packages in [TIME]
- anyio==3.7.0
- idna==3.6
@ -2399,7 +2349,6 @@ fn remove_registry() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv lock` is experimental and may change without warning
Resolved 4 packages in [TIME]
"###);
@ -2409,7 +2358,6 @@ fn remove_registry() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv sync` is experimental and may change without warning
Prepared 4 packages in [TIME]
Installed 4 packages in [TIME]
+ anyio==3.7.0
@ -2424,7 +2372,6 @@ fn remove_registry() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv remove` is experimental and may change without warning
Resolved 1 package in [TIME]
Prepared 1 package in [TIME]
Uninstalled 4 packages in [TIME]
@ -2479,7 +2426,6 @@ fn remove_registry() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv sync` is experimental and may change without warning
Audited 1 package in [TIME]
"###);
@ -2508,7 +2454,6 @@ fn add_preserves_indentation_in_pyproject_toml() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv add` is experimental and may change without warning
Resolved 8 packages in [TIME]
Prepared 8 packages in [TIME]
Installed 8 packages in [TIME]
@ -2564,7 +2509,6 @@ fn add_puts_default_indentation_in_pyproject_toml_if_not_observed() -> Result<()
----- stdout -----
----- stderr -----
warning: `uv add` is experimental and may change without warning
Resolved 8 packages in [TIME]
Prepared 8 packages in [TIME]
Installed 8 packages in [TIME]
@ -2621,7 +2565,6 @@ fn add_frozen() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv add` is experimental and may change without warning
"###);
let pyproject_toml = fs_err::read_to_string(context.temp_dir.join("pyproject.toml"))?;
@ -2669,7 +2612,6 @@ fn add_no_sync() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv add` is experimental and may change without warning
Resolved 4 packages in [TIME]
"###);
@ -2786,7 +2728,6 @@ fn add_error() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv add` is experimental and may change without warning
× 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 this is intentional, run `uv add --frozen` to skip the lock and sync steps.
@ -2798,7 +2739,6 @@ fn add_error() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv add` is experimental and may change without warning
"###);
let lock = context.temp_dir.join("uv.lock");
@ -2828,7 +2768,6 @@ fn add_lower_bound() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv add` is experimental and may change without warning
Resolved 4 packages in [TIME]
Prepared 4 packages in [TIME]
Installed 4 packages in [TIME]
@ -2881,7 +2820,6 @@ fn add_lower_bound_existing() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv add` is experimental and may change without warning
Resolved 4 packages in [TIME]
Prepared 4 packages in [TIME]
Installed 4 packages in [TIME]
@ -2933,7 +2871,6 @@ fn add_lower_bound_raw() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv add` is experimental and may change without warning
Resolved 4 packages in [TIME]
Prepared 4 packages in [TIME]
Installed 4 packages in [TIME]
@ -2985,7 +2922,6 @@ fn add_lower_bound_dev() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv add` is experimental and may change without warning
Resolved 4 packages in [TIME]
Prepared 4 packages in [TIME]
Installed 4 packages in [TIME]
@ -3040,7 +2976,6 @@ fn add_lower_bound_optional() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv add` is experimental and may change without warning
Resolved 4 packages in [TIME]
Prepared 4 packages in [TIME]
Installed 4 packages in [TIME]
@ -3155,7 +3090,6 @@ fn add_lower_bound_local() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv add` is experimental and may change without warning
Resolved 2 packages in [TIME]
Prepared 2 packages in [TIME]
Installed 2 packages in [TIME]
@ -3236,7 +3170,6 @@ fn add_virtual() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv add` is experimental and may change without warning
error: Found a virtual workspace root, but virtual projects do not support production dependencies (instead, use: `uv add --dev`)
"###);
@ -3248,7 +3181,6 @@ fn add_virtual() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv add` is experimental and may change without warning
error: Found a virtual workspace root, but virtual projects do not support optional dependencies (instead, use: `uv add --dev`)
"###);
@ -3259,7 +3191,6 @@ fn add_virtual() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv add` is experimental and may change without warning
Resolved 1 package in [TIME]
Prepared 1 package in [TIME]
Installed 1 package in [TIME]
@ -3332,7 +3263,6 @@ fn add_repeat() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv add` is experimental and may change without warning
Resolved 4 packages in [TIME]
Prepared 4 packages in [TIME]
Installed 4 packages in [TIME]
@ -3367,7 +3297,6 @@ fn add_repeat() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv add` is experimental and may change without warning
Resolved 4 packages in [TIME]
Audited 4 packages in [TIME]
"###);
@ -3418,7 +3347,6 @@ fn add_requirements_file() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv add` is experimental and may change without warning
Resolved [N] packages in [TIME]
Prepared [N] packages in [TIME]
Installed [N] packages in [TIME]
@ -3463,7 +3391,6 @@ fn add_requirements_file() -> Result<()> {
----- stderr -----
warning: `--raw-sources` is a no-op for `requirements.txt` files, which are always treated as raw sources
warning: `uv add` is experimental and may change without warning
Resolved [N] packages in [TIME]
Audited [N] packages in [TIME]
"###);
@ -3475,7 +3402,6 @@ fn add_requirements_file() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv add` is experimental and may change without warning
error: Adding requirements from a `setup.py` is not supported in `uv add`
"###);
@ -3526,7 +3452,6 @@ fn add_script() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv add` is experimental and may change without warning
Updated `script.py`
"###);
@ -3579,7 +3504,6 @@ fn add_script_without_metadata_table() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv add` is experimental and may change without warning
Updated `script.py`
"###);
@ -3631,7 +3555,6 @@ fn add_script_without_metadata_table_with_shebang() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv add` is experimental and may change without warning
Updated `script.py`
"###);
@ -3684,7 +3607,6 @@ fn add_script_without_metadata_table_with_docstring() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv add` is experimental and may change without warning
Updated `script.py`
"###);
@ -3745,7 +3667,6 @@ fn remove_script() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv remove` is experimental and may change without warning
Updated `script.py`
"###);
@ -3804,7 +3725,6 @@ fn remove_last_dep_script() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv remove` is experimental and may change without warning
Updated `script.py`
"###);

View file

@ -16,15 +16,15 @@ fn help() {
Usage: uv [OPTIONS] <COMMAND>
Commands:
run Run a command or script (experimental)
init Create a new project (experimental)
add Add dependencies to the project (experimental)
remove Remove dependencies from the project (experimental)
sync Update the project's environment (experimental)
lock Update the project's lockfile (experimental)
tree Display the project's dependency tree (experimental)
tool Run and install commands provided by Python packages (experimental)
python Manage Python versions and installations (experimental)
run Run a command or script
init Create a new project
add Add dependencies to the project
remove Remove dependencies from the project
sync Update the project's environment
lock Update the project's lockfile
tree Display the project's dependency tree
tool Run and install commands provided by Python packages
python Manage Python versions and installations
pip Manage Python packages with a pip-compatible interface
venv Create a virtual environment
cache Manage uv's cache
@ -79,15 +79,15 @@ fn help_flag() {
Usage: uv [OPTIONS] <COMMAND>
Commands:
run Run a command or script (experimental)
init Create a new project (experimental)
add Add dependencies to the project (experimental)
remove Remove dependencies from the project (experimental)
sync Update the project's environment (experimental)
lock Update the project's lockfile (experimental)
tree Display the project's dependency tree (experimental)
tool Run and install commands provided by Python packages (experimental)
python Manage Python versions and installations (experimental)
run Run a command or script
init Create a new project
add Add dependencies to the project
remove Remove dependencies from the project
sync Update the project's environment
lock Update the project's lockfile
tree Display the project's dependency tree
tool Run and install commands provided by Python packages
python Manage Python versions and installations
pip Manage Python packages with a pip-compatible interface
venv Create a virtual environment
cache Manage uv's cache
@ -140,15 +140,15 @@ fn help_short_flag() {
Usage: uv [OPTIONS] <COMMAND>
Commands:
run Run a command or script (experimental)
init Create a new project (experimental)
add Add dependencies to the project (experimental)
remove Remove dependencies from the project (experimental)
sync Update the project's environment (experimental)
lock Update the project's lockfile (experimental)
tree Display the project's dependency tree (experimental)
tool Run and install commands provided by Python packages (experimental)
python Manage Python versions and installations (experimental)
run Run a command or script
init Create a new project
add Add dependencies to the project
remove Remove dependencies from the project
sync Update the project's environment
lock Update the project's lockfile
tree Display the project's dependency tree
tool Run and install commands provided by Python packages
python Manage Python versions and installations
pip Manage Python packages with a pip-compatible interface
venv Create a virtual environment
cache Manage uv's cache
@ -197,7 +197,7 @@ fn help_subcommand() {
success: true
exit_code: 0
----- stdout -----
Manage Python versions and installations (experimental)
Manage Python versions and installations
Generally, uv first searches for Python in a virtual environment, either
active or in a `.venv` directory in the current working directory or
@ -208,8 +208,7 @@ fn help_subcommand() {
On Windows, the `py` launcher is also invoked to find Python
executables.
When preview is enabled, i.e., via `--preview` or by using a preview
command, uv will download Python if a version cannot be found. This
By default, uv will download Python if a version cannot be found. This
behavior can be disabled with the `--python-downloads` option.
The `--python` option allows requesting a different interpreter.
@ -513,7 +512,7 @@ fn help_flag_subcommand() {
success: true
exit_code: 0
----- stdout -----
Manage Python versions and installations (experimental)
Manage Python versions and installations
Usage: uv python [OPTIONS] <COMMAND>
@ -693,15 +692,15 @@ fn help_with_global_option() {
Usage: uv [OPTIONS] <COMMAND>
Commands:
run Run a command or script (experimental)
init Create a new project (experimental)
add Add dependencies to the project (experimental)
remove Remove dependencies from the project (experimental)
sync Update the project's environment (experimental)
lock Update the project's lockfile (experimental)
tree Display the project's dependency tree (experimental)
tool Run and install commands provided by Python packages (experimental)
python Manage Python versions and installations (experimental)
run Run a command or script
init Create a new project
add Add dependencies to the project
remove Remove dependencies from the project
sync Update the project's environment
lock Update the project's lockfile
tree Display the project's dependency tree
tool Run and install commands provided by Python packages
python Manage Python versions and installations
pip Manage Python packages with a pip-compatible interface
venv Create a virtual environment
cache Manage uv's cache
@ -792,15 +791,15 @@ fn help_with_no_pager() {
Usage: uv [OPTIONS] <COMMAND>
Commands:
run Run a command or script (experimental)
init Create a new project (experimental)
add Add dependencies to the project (experimental)
remove Remove dependencies from the project (experimental)
sync Update the project's environment (experimental)
lock Update the project's lockfile (experimental)
tree Display the project's dependency tree (experimental)
tool Run and install commands provided by Python packages (experimental)
python Manage Python versions and installations (experimental)
run Run a command or script
init Create a new project
add Add dependencies to the project
remove Remove dependencies from the project
sync Update the project's environment
lock Update the project's lockfile
tree Display the project's dependency tree
tool Run and install commands provided by Python packages
python Manage Python versions and installations
pip Manage Python packages with a pip-compatible interface
venv Create a virtual environment
cache Manage uv's cache

View file

@ -19,7 +19,6 @@ fn init() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv init` is experimental and may change without warning
Initialized project `foo` at `[TEMP_DIR]/foo`
"###);
@ -65,7 +64,6 @@ fn init() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv lock` is experimental and may change without warning
Using Python 3.12.[X] interpreter at: [PYTHON-3.12]
Resolved 1 package in [TIME]
"###);
@ -86,7 +84,6 @@ fn init_cache() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv init` is experimental and may change without warning
Initialized project `foo` at `[TEMP_DIR]/foo`
"###);
@ -103,7 +100,6 @@ fn init_no_readme() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv init` is experimental and may change without warning
Initialized project `foo` at `[TEMP_DIR]/foo`
"###);
@ -145,7 +141,6 @@ fn init_current_dir() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv init` is experimental and may change without warning
Initialized project `foo`
"###);
@ -191,7 +186,6 @@ fn init_current_dir() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv lock` is experimental and may change without warning
Using Python 3.12.[X] interpreter at: [PYTHON-3.12]
Resolved 1 package in [TIME]
"###);
@ -212,7 +206,6 @@ fn init_dot_args() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv init` is experimental and may change without warning
Initialized project `foo` at `[TEMP_DIR]/foo`
"###);
@ -258,7 +251,6 @@ fn init_dot_args() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv lock` is experimental and may change without warning
Using Python 3.12.[X] interpreter at: [PYTHON-3.12]
Resolved 1 package in [TIME]
"###);
@ -290,7 +282,6 @@ fn init_workspace() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv init` is experimental and may change without warning
Adding `foo` as member of workspace `[TEMP_DIR]/`
Initialized project `foo`
"###);
@ -356,7 +347,6 @@ fn init_workspace() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv lock` is experimental and may change without warning
Resolved 5 packages in [TIME]
"###);
@ -386,7 +376,6 @@ fn init_workspace_relative_sub_package() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv init` is experimental and may change without warning
Adding `foo` as member of workspace `[TEMP_DIR]/`
Initialized project `foo` at `[TEMP_DIR]/foo`
"###);
@ -452,7 +441,6 @@ fn init_workspace_relative_sub_package() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv lock` is experimental and may change without warning
Resolved 5 packages in [TIME]
"###);
@ -483,7 +471,6 @@ fn init_workspace_outside() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv init` is experimental and may change without warning
Adding `foo` as member of workspace `[TEMP_DIR]/`
Initialized project `foo` at `[TEMP_DIR]/foo`
"###);
@ -549,7 +536,6 @@ fn init_workspace_outside() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv lock` is experimental and may change without warning
Resolved 5 packages in [TIME]
"###);
@ -567,7 +553,6 @@ fn init_invalid_names() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv init` is experimental and may change without warning
Initialized project `foo-bar` at `[TEMP_DIR]/foo-bar`
"###);
@ -602,7 +587,6 @@ fn init_invalid_names() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv init` is experimental and may change without warning
error: Not a valid package or extra name: "bar baz". Names must start and end with a letter or digit and may only contain -, _, ., and alphanumeric characters.
"###);
@ -633,7 +617,6 @@ fn init_isolated() -> Result<()> {
----- stderr -----
warning: The `--isolated` flag is deprecated and has no effect. Instead, use `--no-config` to prevent uv from discovering configuration files or `--no-workspace` to prevent uv from adding the initialized project to the containing workspace.
warning: `uv init` is experimental and may change without warning
Adding `foo` as member of workspace `[TEMP_DIR]/`
Initialized project `foo`
"###);
@ -682,7 +665,6 @@ fn init_no_workspace() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv init` is experimental and may change without warning
Initialized project `foo`
"###);
@ -715,7 +697,6 @@ fn init_no_workspace_warning() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv init` is experimental and may change without warning
warning: `--no-workspace` was provided, but no workspace was found
Initialized project `project`
"###);
@ -767,7 +748,6 @@ fn init_project_inside_project() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv init` is experimental and may change without warning
Adding `foo` as member of workspace `[TEMP_DIR]/`
Initialized project `foo` at `[TEMP_DIR]/foo`
"###);
@ -779,7 +759,6 @@ fn init_project_inside_project() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv init` is experimental and may change without warning
Adding `bar` as member of workspace `[TEMP_DIR]/`
Initialized project `bar` at `[TEMP_DIR]/foo/bar`
"###);
@ -850,7 +829,6 @@ fn init_explicit_workspace() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv init` is experimental and may change without warning
Adding `foo` as member of workspace `[TEMP_DIR]/`
Initialized project `foo` at `[TEMP_DIR]/foo`
"###);
@ -891,7 +869,6 @@ fn init_virtual_workspace() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv init` is experimental and may change without warning
Initialized workspace `foo`
"###);
@ -913,7 +890,6 @@ fn init_virtual_workspace() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv init` is experimental and may change without warning
Adding `bar` as member of workspace `[TEMP_DIR]/foo`
Initialized project `bar` at `[TEMP_DIR]/foo/bar`
"###);
@ -952,7 +928,6 @@ fn init_nested_virtual_workspace() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv init` is experimental and may change without warning
warning: Nested workspaces are not supported, but outer workspace (`[TEMP_DIR]/`) includes `[TEMP_DIR]/foo`
Initialized workspace `foo` at `[TEMP_DIR]/foo`
"###);
@ -1009,7 +984,6 @@ fn init_matches_members() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv init` is experimental and may change without warning
Project `foo` is already a member of workspace `[TEMP_DIR]/`
Initialized project `foo` at `[TEMP_DIR]/packages/foo`
"###);
@ -1052,7 +1026,6 @@ fn init_matches_exclude() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv init` is experimental and may change without warning
Project `foo` is excluded by workspace `[TEMP_DIR]/`
Initialized project `foo` at `[TEMP_DIR]/packages/foo`
"###);
@ -1098,7 +1071,6 @@ fn init_requires_python_workspace() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv init` is experimental and may change without warning
Adding `foo` as member of workspace `[TEMP_DIR]/`
Initialized project `foo` at `[TEMP_DIR]/foo`
"###);
@ -1152,7 +1124,6 @@ fn init_requires_python_version() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv init` is experimental and may change without warning
Adding `foo` as member of workspace `[TEMP_DIR]/`
Initialized project `foo` at `[TEMP_DIR]/foo`
"###);
@ -1207,7 +1178,6 @@ fn init_requires_python_specifiers() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv init` is experimental and may change without warning
Adding `foo` as member of workspace `[TEMP_DIR]/`
Initialized project `foo` at `[TEMP_DIR]/foo`
"###);
@ -1255,7 +1225,6 @@ fn init_unmanaged() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv init` is experimental and may change without warning
Initialized project `foo` at `[TEMP_DIR]/foo`
"###);
@ -1284,7 +1253,6 @@ fn init_hidden() {
----- stdout -----
----- stderr -----
warning: `uv init` is experimental and may change without warning
error: Not a valid package or extra name: ".foo". Names must start and end with a letter or digit and may only contain -, _, ., and alphanumeric characters.
"###);
}

File diff suppressed because it is too large Load diff

View file

@ -73,7 +73,6 @@ fn fork_allows_non_conflicting_non_overlapping_dependencies() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv lock` is experimental and may change without warning
Resolved 2 packages in [TIME]
"###
);
@ -191,7 +190,6 @@ fn fork_allows_non_conflicting_repeated_dependencies() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv lock` is experimental and may change without warning
Resolved 2 packages in [TIME]
"###
);
@ -291,7 +289,6 @@ fn fork_basic() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv lock` is experimental and may change without warning
Resolved 3 packages in [TIME]
"###
);
@ -426,7 +423,6 @@ fn conflict_in_fork() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv lock` is experimental and may change without warning
× No solution found when resolving dependencies for split (sys_platform == 'darwin'):
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.
@ -495,7 +491,6 @@ fn fork_conflict_unsatisfiable() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv lock` is experimental and may change without warning
× 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.
"###
@ -579,7 +574,6 @@ fn fork_filter_sibling_dependencies() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv lock` is experimental and may change without warning
Resolved 7 packages in [TIME]
"###
);
@ -758,7 +752,6 @@ fn fork_upgrade() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv lock` is experimental and may change without warning
Resolved 3 packages in [TIME]
"###
);
@ -879,7 +872,6 @@ fn fork_incomplete_markers() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv lock` is experimental and may change without warning
Resolved 5 packages in [TIME]
"###
);
@ -1033,7 +1025,6 @@ fn fork_marker_accrue() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv lock` is experimental and may change without warning
Resolved 4 packages in [TIME]
"###
);
@ -1167,7 +1158,6 @@ fn fork_marker_disjoint() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv lock` is experimental and may change without warning
× No solution found when resolving dependencies for split (sys_platform == 'linux'):
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.
"###
@ -1238,7 +1228,6 @@ fn fork_marker_inherit_combined_allowed() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv lock` is experimental and may change without warning
Resolved 6 packages in [TIME]
"###
);
@ -1419,7 +1408,6 @@ fn fork_marker_inherit_combined_disallowed() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv lock` is experimental and may change without warning
Resolved 5 packages in [TIME]
"###
);
@ -1589,7 +1577,6 @@ fn fork_marker_inherit_combined() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv lock` is experimental and may change without warning
Resolved 5 packages in [TIME]
"###
);
@ -1752,7 +1739,6 @@ fn fork_marker_inherit_isolated() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv lock` is experimental and may change without warning
Resolved 4 packages in [TIME]
"###
);
@ -1901,7 +1887,6 @@ fn fork_marker_inherit_transitive() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv lock` is experimental and may change without warning
Resolved 5 packages in [TIME]
"###
);
@ -2058,7 +2043,6 @@ fn fork_marker_inherit() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv lock` is experimental and may change without warning
Resolved 3 packages in [TIME]
"###
);
@ -2197,7 +2181,6 @@ fn fork_marker_limited_inherit() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv lock` is experimental and may change without warning
Resolved 5 packages in [TIME]
"###
);
@ -2353,7 +2336,6 @@ fn fork_marker_selection() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv lock` is experimental and may change without warning
Resolved 4 packages in [TIME]
"###
);
@ -2509,7 +2491,6 @@ fn fork_marker_track() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv lock` is experimental and may change without warning
Resolved 5 packages in [TIME]
"###
);
@ -2662,7 +2643,6 @@ fn fork_non_fork_marker_transitive() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv lock` is experimental and may change without warning
Resolved 4 packages in [TIME]
"###
);
@ -2797,7 +2777,6 @@ fn fork_non_local_fork_marker_direct() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv lock` is experimental and may change without warning
× No solution found when resolving dependencies:
Because package-b{sys_platform == 'darwin'}==1.0.0 depends on package-c>=2.0.0 and package-a{sys_platform == 'linux'}==1.0.0 depends on package-c<2.0.0, we can conclude that package-a{sys_platform == 'linux'}==1.0.0 and package-b{sys_platform == 'darwin'}==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.
@ -2870,7 +2849,6 @@ fn fork_non_local_fork_marker_transitive() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv lock` is experimental and may change without warning
× No solution found when resolving dependencies:
Because package-b==1.0.0 depends on package-c{sys_platform == 'darwin'}>=2.0.0 and only package-c{sys_platform == 'darwin'}<=2.0.0 is available, we can conclude that package-b==1.0.0 depends on package-c{sys_platform == 'darwin'}==2.0.0.
And because only the following versions of package-c{sys_platform == 'linux'} are available:
@ -2964,7 +2942,6 @@ fn fork_overlapping_markers_basic() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv lock` is experimental and may change without warning
Resolved 2 packages in [TIME]
"###
);
@ -3132,7 +3109,6 @@ fn preferences_dependent_forking_bistable() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv lock` is experimental and may change without warning
Resolved 8 packages in [TIME]
"###
);
@ -3369,7 +3345,6 @@ fn preferences_dependent_forking_conflicting() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv lock` is experimental and may change without warning
Resolved 6 packages in [TIME]
"###
);
@ -3512,7 +3487,6 @@ fn preferences_dependent_forking_tristable() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv lock` is experimental and may change without warning
Resolved 11 packages in [TIME]
"###
);
@ -3796,7 +3770,6 @@ fn preferences_dependent_forking() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv lock` is experimental and may change without warning
Resolved 5 packages in [TIME]
"###
);
@ -3971,7 +3944,6 @@ fn fork_remaining_universe_partitioning() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv lock` is experimental and may change without warning
Resolved 5 packages in [TIME]
"###
);
@ -4124,7 +4096,6 @@ fn fork_requires_python_full_prerelease() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv lock` is experimental and may change without warning
Resolved 1 package in [TIME]
"###
);
@ -4209,7 +4180,6 @@ fn fork_requires_python_full() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv lock` is experimental and may change without warning
Resolved 1 package in [TIME]
"###
);
@ -4298,7 +4268,6 @@ fn fork_requires_python_patch_overlap() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv lock` is experimental and may change without warning
Resolved 2 packages in [TIME]
"###
);
@ -4392,7 +4361,6 @@ fn fork_requires_python() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv lock` is experimental and may change without warning
Resolved 1 package in [TIME]
"###
);

View file

@ -5655,7 +5655,6 @@ fn tool_uv_sources_is_in_preview() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv.sources` is experimental and may change without warning
Resolved 1 package in [TIME]
Prepared 1 package in [TIME]
Installed 1 package in [TIME]

View file

@ -17,6 +17,5 @@ fn python_dir() {
[TEMP_DIR]/python
----- stderr -----
warning: `uv python dir` is experimental and may change without warning
"###);
}

View file

@ -173,7 +173,6 @@ fn run_args() -> Result<()> {
Python 3.12.[X]
----- stderr -----
warning: `uv run` is experimental and may change without warning
Resolved 1 package in [TIME]
Prepared 1 package in [TIME]
Installed 1 package in [TIME]
@ -188,7 +187,6 @@ fn run_args() -> Result<()> {
Python 3.12.[X]
----- stderr -----
warning: `uv run` is experimental and may change without warning
Resolved 1 package in [TIME]
Audited 1 package in [TIME]
"###);
@ -453,7 +451,6 @@ fn run_managed_false() -> Result<()> {
Python 3.12.[X]
----- stderr -----
warning: `uv run` is experimental and may change without warning
"###);
Ok(())
@ -486,7 +483,6 @@ fn run_with() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv run` is experimental and may change without warning
Resolved 6 packages in [TIME]
Prepared 4 packages in [TIME]
Installed 4 packages in [TIME]
@ -507,7 +503,6 @@ fn run_with() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv run` is experimental and may change without warning
Resolved 6 packages in [TIME]
Audited 4 packages in [TIME]
"###);
@ -519,7 +514,6 @@ fn run_with() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv run` is experimental and may change without warning
Resolved 6 packages in [TIME]
Audited 4 packages in [TIME]
Resolved 1 package in [TIME]
@ -535,7 +529,6 @@ fn run_with() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv run` is experimental and may change without warning
Resolved 6 packages in [TIME]
Audited 4 packages in [TIME]
× No solution found when resolving `--with` dependencies:
@ -567,7 +560,6 @@ fn run_locked() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv run` is experimental and may change without warning
error: Unable to find lockfile at `uv.lock`. To create a lockfile, run `uv lock` or `uv sync`.
"###);
@ -594,7 +586,6 @@ fn run_locked() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv run` is experimental and may change without warning
Resolved 2 packages in [TIME]
error: The lockfile at `uv.lock` needs to be updated, but `--locked` was provided. To update the lockfile, run `uv lock`.
"###);
@ -615,7 +606,6 @@ fn run_locked() -> Result<()> {
Python 3.12.[X]
----- stderr -----
warning: `uv run` is experimental and may change without warning
Resolved 2 packages in [TIME]
Prepared 2 packages in [TIME]
Installed 2 packages in [TIME]
@ -648,7 +638,6 @@ fn run_frozen() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv run` is experimental and may change without warning
error: Unable to find lockfile at `uv.lock`. To create a lockfile, run `uv lock` or `uv sync`.
"###);
@ -673,7 +662,6 @@ fn run_frozen() -> Result<()> {
Python 3.12.[X]
----- stderr -----
warning: `uv run` is experimental and may change without warning
Prepared 4 packages in [TIME]
Installed 4 packages in [TIME]
+ anyio==3.7.0
@ -716,7 +704,6 @@ fn run_empty_requirements_txt() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv run` is experimental and may change without warning
Resolved 6 packages in [TIME]
Prepared 4 packages in [TIME]
Installed 4 packages in [TIME]
@ -734,7 +721,6 @@ fn run_empty_requirements_txt() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv run` is experimental and may change without warning
Resolved 6 packages in [TIME]
Audited 4 packages in [TIME]
warning: Requirements file requirements.txt does not contain any dependencies
@ -773,7 +759,6 @@ fn run_requirements_txt() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv run` is experimental and may change without warning
Resolved 6 packages in [TIME]
Prepared 4 packages in [TIME]
Installed 4 packages in [TIME]
@ -796,7 +781,6 @@ fn run_requirements_txt() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv run` is experimental and may change without warning
Resolved 6 packages in [TIME]
Audited 4 packages in [TIME]
"###);
@ -810,7 +794,6 @@ fn run_requirements_txt() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv run` is experimental and may change without warning
Resolved 6 packages in [TIME]
Audited 4 packages in [TIME]
Resolved 1 package in [TIME]
@ -833,7 +816,6 @@ fn run_requirements_txt() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv run` is experimental and may change without warning
Resolved 6 packages in [TIME]
Audited 4 packages in [TIME]
Resolved 2 packages in [TIME]
@ -855,7 +837,6 @@ fn run_requirements_txt() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv run` is experimental and may change without warning
error: Reading requirements from stdin is not supported in `uv run`
"###);
@ -897,7 +878,6 @@ fn run_requirements_txt_arguments() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv run` is experimental and may change without warning
Resolved 2 packages in [TIME]
Prepared 2 packages in [TIME]
Installed 2 packages in [TIME]
@ -953,7 +933,6 @@ fn run_editable() -> Result<()> {
Hello, world!
----- stderr -----
warning: `uv run` is experimental and may change without warning
Resolved 1 package in [TIME]
Prepared 1 package in [TIME]
Installed 1 package in [TIME]
@ -1052,7 +1031,6 @@ fn run_without_output() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv run` is experimental and may change without warning
Installed 4 packages in [TIME]
Installed 1 package in [TIME]
"###);
@ -1064,7 +1042,6 @@ fn run_without_output() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv run` is experimental and may change without warning
"###);
Ok(())
@ -1110,7 +1087,6 @@ fn run_isolated_python_version() -> Result<()> {
(3, 8)
----- stderr -----
warning: `uv run` is experimental and may change without warning
Using Python 3.8.[X] interpreter at: [PYTHON-3.8]
Creating virtualenv at: .venv
Resolved 6 packages in [TIME]
@ -1131,7 +1107,6 @@ fn run_isolated_python_version() -> Result<()> {
(3, 8)
----- stderr -----
warning: `uv run` is experimental and may change without warning
Resolved 6 packages in [TIME]
Prepared 5 packages in [TIME]
Installed 6 packages in [TIME]
@ -1156,7 +1131,6 @@ fn run_isolated_python_version() -> Result<()> {
(3, 12)
----- stderr -----
warning: `uv run` is experimental and may change without warning
Resolved 6 packages in [TIME]
Prepared 3 packages in [TIME]
Installed 4 packages in [TIME]
@ -1205,7 +1179,6 @@ fn run_no_project() -> Result<()> {
[VENV]/[BIN]/python
----- stderr -----
warning: `uv run` is experimental and may change without warning
Resolved 6 packages in [TIME]
Prepared 4 packages in [TIME]
Installed 4 packages in [TIME]
@ -1224,7 +1197,6 @@ fn run_no_project() -> Result<()> {
[VENV]/[BIN]/python
----- stderr -----
warning: `uv run` is experimental and may change without warning
"###);
// `run --no-project --isolated` should run in an entirely isolated environment.
@ -1235,7 +1207,6 @@ fn run_no_project() -> Result<()> {
[CACHE_DIR]/builds-v0/[TMP]/python
----- stderr -----
warning: `uv run` is experimental and may change without warning
"###);
// `run --no-project` should not (but it should still run in the same environment, as it would
@ -1247,7 +1218,6 @@ fn run_no_project() -> Result<()> {
[VENV]/[BIN]/python
----- stderr -----
warning: `uv run` is experimental and may change without warning
"###);
// `run --no-project --locked` should fail.
@ -1258,7 +1228,6 @@ fn run_no_project() -> Result<()> {
[VENV]/[BIN]/python
----- stderr -----
warning: `uv run` is experimental and may change without warning
warning: `--locked` has no effect when used alongside `--no-project`
"###);

View file

@ -7,5 +7,4 @@ exit_code: 0
----- stdout -----
----- stderr -----
warning: `uv lock` is experimental and may change without warning
Resolved 39 packages in [TIME]

View file

@ -7,5 +7,4 @@ exit_code: 0
----- stdout -----
----- stderr -----
warning: `uv lock` is experimental and may change without warning
Resolved 31 packages in [TIME]

View file

@ -7,5 +7,4 @@ exit_code: 0
----- stdout -----
----- stderr -----
warning: `uv lock` is experimental and may change without warning
Resolved 97 packages in [TIME]

View file

@ -7,5 +7,4 @@ exit_code: 0
----- stdout -----
----- stderr -----
warning: `uv lock` is experimental and may change without warning
Resolved 49 packages in [TIME]

View file

@ -7,5 +7,4 @@ exit_code: 0
----- stdout -----
----- stderr -----
warning: `uv lock` is experimental and may change without warning
Resolved 298 packages in [TIME]

View file

@ -7,5 +7,4 @@ exit_code: 0
----- stdout -----
----- stderr -----
warning: `uv lock` is experimental and may change without warning
Resolved 323 packages in [TIME]

View file

@ -31,7 +31,6 @@ fn sync() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv sync` is experimental and may change without warning
Resolved 2 packages in [TIME]
Prepared 2 packages in [TIME]
Installed 2 packages in [TIME]
@ -66,7 +65,6 @@ fn locked() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv sync` is experimental and may change without warning
error: Unable to find lockfile at `uv.lock`. To create a lockfile, run `uv lock` or `uv sync`.
"###);
@ -93,7 +91,6 @@ fn locked() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv sync` is experimental and may change without warning
Resolved 2 packages in [TIME]
error: The lockfile at `uv.lock` needs to be updated, but `--locked` was provided. To update the lockfile, run `uv lock`.
"###);
@ -128,7 +125,6 @@ fn frozen() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv sync` is experimental and may change without warning
error: Unable to find lockfile at `uv.lock`. To create a lockfile, run `uv lock` or `uv sync`.
"###);
@ -152,7 +148,6 @@ fn frozen() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv sync` is experimental and may change without warning
Prepared 4 packages in [TIME]
Installed 4 packages in [TIME]
+ anyio==3.7.0
@ -183,7 +178,6 @@ fn empty() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv sync` is experimental and may change without warning
Resolved 0 packages in [TIME]
Audited 0 packages in [TIME]
"###);
@ -197,7 +191,6 @@ fn empty() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv sync` is experimental and may change without warning
Resolved 0 packages in [TIME]
Audited 0 packages in [TIME]
"###);
@ -259,8 +252,6 @@ fn package() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv sync` is experimental and may change without warning
warning: `uv.sources` is experimental and may change without warning
Resolved 6 packages in [TIME]
Prepared 2 packages in [TIME]
Installed 2 packages in [TIME]
@ -331,10 +322,8 @@ fn mixed_requires_python() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv sync` is experimental and may change without warning
Using Python 3.12.[X] interpreter at: [PYTHON-3.12]
Creating virtualenv at: .venv
warning: `uv.sources` is experimental and may change without warning
Resolved 5 packages in [TIME]
Prepared 5 packages in [TIME]
Installed 5 packages in [TIME]
@ -352,7 +341,6 @@ fn mixed_requires_python() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv sync` is experimental and may change without warning
Using Python 3.8.[X] interpreter at: [PYTHON-3.8]
error: The requested Python interpreter (3.8.[X]) is incompatible with the project Python requirement: `>=3.12`. However, a workspace member (`bird-feeder`) supports Python >=3.8. To install the workspace member on its own, navigate to `packages/bird-feeder`, then run `uv venv --python 3.8.[X]` followed by `uv pip install -e .`.
"###);
@ -409,7 +397,6 @@ fn virtual_workspace_dev_dependencies() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv sync` is experimental and may change without warning
Resolved 5 packages in [TIME]
Prepared 2 packages in [TIME]
Installed 2 packages in [TIME]
@ -424,7 +411,6 @@ fn virtual_workspace_dev_dependencies() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv sync` is experimental and may change without warning
Resolved 5 packages in [TIME]
Prepared 3 packages in [TIME]
Installed 3 packages in [TIME]
@ -461,7 +447,6 @@ fn sync_build_isolation() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv sync` is experimental and may change without warning
error: Failed to download and build: `iniconfig @ https://files.pythonhosted.org/packages/d7/4b/cbd8e699e64a6f16ca3a8220661b5f83792b3017d0f79807cb8708d33913/iniconfig-2.0.0.tar.gz`
Caused by: Build backend failed to determine metadata through `prepare_metadata_for_build_wheel` with exit status: 1
--- stdout:
@ -502,7 +487,6 @@ fn sync_build_isolation() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv sync` is experimental and may change without warning
Resolved 2 packages in [TIME]
Prepared 2 packages in [TIME]
Installed 2 packages in [TIME]
@ -568,7 +552,6 @@ fn sync_reset_state() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv sync` is experimental and may change without warning
Resolved 3 packages in [TIME]
Prepared 3 packages in [TIME]
Installed 3 packages in [TIME]
@ -614,7 +597,6 @@ fn sync_build_isolation_package() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv sync` is experimental and may change without warning
error: Failed to download and build: `iniconfig @ https://files.pythonhosted.org/packages/d7/4b/cbd8e699e64a6f16ca3a8220661b5f83792b3017d0f79807cb8708d33913/iniconfig-2.0.0.tar.gz`
Caused by: Build backend failed to determine metadata through `prepare_metadata_for_build_wheel` with exit status: 1
--- stdout:
@ -654,7 +636,6 @@ fn sync_build_isolation_package() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv sync` is experimental and may change without warning
Resolved 2 packages in [TIME]
Prepared 2 packages in [TIME]
Uninstalled 9 packages in [TIME]
@ -718,8 +699,6 @@ fn sync_relative_wheel() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv sync` is experimental and may change without warning
warning: `uv.sources` is experimental and may change without warning
Resolved 2 packages in [TIME]
Prepared 1 package in [TIME]
Installed 2 packages in [TIME]
@ -772,8 +751,6 @@ fn sync_relative_wheel() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv sync` is experimental and may change without warning
warning: `uv.sources` is experimental and may change without warning
Resolved 2 packages in [TIME]
Audited 2 packages in [TIME]
"###);

View file

@ -21,7 +21,6 @@ fn tool_dir() {
[TEMP_DIR]/tools
----- stderr -----
warning: `uv tool dir` is experimental and may change without warning
"###);
}
@ -40,6 +39,5 @@ fn tool_dir_bin() {
[TEMP_DIR]/bin
----- stderr -----
warning: `uv tool dir` is experimental and may change without warning
"###);
}

View file

@ -35,7 +35,6 @@ fn tool_install() {
----- stdout -----
----- stderr -----
warning: `uv tool install` is experimental and may change without warning
Resolved [N] packages in [TIME]
Prepared [N] packages in [TIME]
Installed [N] packages in [TIME]
@ -114,7 +113,6 @@ fn tool_install() {
----- stdout -----
----- stderr -----
warning: `uv tool install` is experimental and may change without warning
Resolved [N] packages in [TIME]
Prepared [N] packages in [TIME]
Installed [N] packages in [TIME]
@ -199,7 +197,6 @@ fn tool_install_suggest_other_packages_with_executable() {
Did you mean `uv tool install fastapi-cli`?
----- stderr -----
warning: `uv tool install` is experimental and may change without warning
Resolved 35 packages in [TIME]
Prepared 35 packages in [TIME]
Installed 35 packages in [TIME]
@ -258,7 +255,6 @@ fn tool_install_version() {
----- stdout -----
----- stderr -----
warning: `uv tool install` is experimental and may change without warning
Resolved 6 packages in [TIME]
Prepared 6 packages in [TIME]
Installed 6 packages in [TIME]
@ -346,7 +342,6 @@ fn tool_install_editable() {
----- stdout -----
----- stderr -----
warning: `uv tool install` is experimental and may change without warning
Resolved 1 package in [TIME]
Prepared 1 package in [TIME]
Installed 1 package in [TIME]
@ -418,7 +413,6 @@ fn tool_install_editable() {
----- stdout -----
----- stderr -----
warning: `uv tool install` is experimental and may change without warning
Installed 1 executable: black
"###);
@ -451,7 +445,6 @@ fn tool_install_editable() {
----- stdout -----
----- stderr -----
warning: `uv tool install` is experimental and may change without warning
Resolved 6 packages in [TIME]
Prepared 6 packages in [TIME]
Uninstalled 1 package in [TIME]
@ -502,7 +495,6 @@ fn tool_install_remove_on_empty() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv tool install` is experimental and may change without warning
Resolved 6 packages in [TIME]
Prepared 6 packages in [TIME]
Installed 6 packages in [TIME]
@ -570,7 +562,6 @@ fn tool_install_remove_on_empty() -> Result<()> {
No executables are provided by `black`
----- stderr -----
warning: `uv tool install` is experimental and may change without warning
Resolved 1 package in [TIME]
Prepared 1 package in [TIME]
Uninstalled 6 packages in [TIME]
@ -595,7 +586,6 @@ fn tool_install_remove_on_empty() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv tool install` is experimental and may change without warning
Resolved 6 packages in [TIME]
Installed 6 packages in [TIME]
+ black==24.3.0
@ -648,7 +638,6 @@ fn tool_install_editable_from() {
----- stdout -----
----- stderr -----
warning: `uv tool install` is experimental and may change without warning
Resolved 1 package in [TIME]
Prepared 1 package in [TIME]
Installed 1 package in [TIME]
@ -730,7 +719,6 @@ fn tool_install_from() {
----- stdout -----
----- stderr -----
warning: `uv tool install` is experimental and may change without warning
Resolved 6 packages in [TIME]
Prepared 6 packages in [TIME]
Installed 6 packages in [TIME]
@ -756,7 +744,6 @@ fn tool_install_from() {
----- stdout -----
----- stderr -----
warning: `uv tool install` is experimental and may change without warning
error: Package name (`flask`) provided with `--from` does not match install request (`black`)
"###);
@ -773,7 +760,6 @@ fn tool_install_from() {
----- stdout -----
----- stderr -----
warning: `uv tool install` is experimental and may change without warning
error: Package requirement (`black==24.3.0`) provided with `--from` conflicts with install request (`black==24.2.0`)
"###);
}
@ -798,7 +784,6 @@ fn tool_install_already_installed() {
----- stdout -----
----- stderr -----
warning: `uv tool install` is experimental and may change without warning
Resolved [N] packages in [TIME]
Prepared [N] packages in [TIME]
Installed [N] packages in [TIME]
@ -866,7 +851,6 @@ fn tool_install_already_installed() {
----- stdout -----
----- stderr -----
warning: `uv tool install` is experimental and may change without warning
`black` is already installed
"###);
@ -905,7 +889,6 @@ fn tool_install_already_installed() {
----- stdout -----
----- stderr -----
warning: `uv tool install` is experimental and may change without warning
Resolved [N] packages in [TIME]
Prepared [N] packages in [TIME]
Uninstalled [N] packages in [TIME]
@ -933,7 +916,6 @@ fn tool_install_already_installed() {
----- stdout -----
----- stderr -----
warning: `uv tool install` is experimental and may change without warning
Resolved [N] packages in [TIME]
Prepared [N] packages in [TIME]
Uninstalled [N] packages in [TIME]
@ -956,7 +938,6 @@ fn tool_install_already_installed() {
----- stdout -----
----- stderr -----
warning: `uv tool install` is experimental and may change without warning
Resolved [N] packages in [TIME]
Prepared [N] packages in [TIME]
Uninstalled [N] packages in [TIME]
@ -989,7 +970,6 @@ fn tool_install_entry_point_exists() {
----- stdout -----
----- stderr -----
warning: `uv tool install` is experimental and may change without warning
Resolved [N] packages in [TIME]
Prepared [N] packages in [TIME]
Installed [N] packages in [TIME]
@ -1029,7 +1009,6 @@ fn tool_install_entry_point_exists() {
----- stdout -----
----- stderr -----
warning: `uv tool install` is experimental and may change without warning
Resolved [N] packages in [TIME]
Prepared [N] packages in [TIME]
Installed [N] packages in [TIME]
@ -1071,7 +1050,6 @@ fn tool_install_entry_point_exists() {
----- stdout -----
----- stderr -----
warning: `uv tool install` is experimental and may change without warning
Resolved [N] packages in [TIME]
Installed [N] packages in [TIME]
+ black==24.3.0
@ -1095,7 +1073,6 @@ fn tool_install_entry_point_exists() {
----- stdout -----
----- stderr -----
warning: `uv tool install` is experimental and may change without warning
Resolved [N] packages in [TIME]
Installed [N] packages in [TIME]
+ black==24.3.0
@ -1121,7 +1098,6 @@ fn tool_install_entry_point_exists() {
----- stdout -----
----- stderr -----
warning: `uv tool install` is experimental and may change without warning
Installed 2 executables: black, blackd
"###);
@ -1138,7 +1114,6 @@ fn tool_install_entry_point_exists() {
----- stdout -----
----- stderr -----
warning: `uv tool install` is experimental and may change without warning
`black` is already installed
"###);
@ -1156,7 +1131,6 @@ fn tool_install_entry_point_exists() {
----- stdout -----
----- stderr -----
warning: `uv tool install` is experimental and may change without warning
Resolved [N] packages in [TIME]
Prepared [N] packages in [TIME]
Uninstalled [N] packages in [TIME]
@ -1263,7 +1237,6 @@ fn tool_install_home() {
----- stdout -----
----- stderr -----
warning: `uv tool install` is experimental and may change without warning
Resolved 6 packages in [TIME]
Prepared 6 packages in [TIME]
Installed 6 packages in [TIME]
@ -1301,7 +1274,6 @@ fn tool_install_xdg_data_home() {
----- stdout -----
----- stderr -----
warning: `uv tool install` is experimental and may change without warning
Resolved 6 packages in [TIME]
Prepared 6 packages in [TIME]
Installed 6 packages in [TIME]
@ -1338,7 +1310,6 @@ fn tool_install_xdg_bin_home() {
----- stdout -----
----- stderr -----
warning: `uv tool install` is experimental and may change without warning
Resolved 6 packages in [TIME]
Prepared 6 packages in [TIME]
Installed 6 packages in [TIME]
@ -1374,7 +1345,6 @@ fn tool_install_tool_bin_dir() {
----- stdout -----
----- stderr -----
warning: `uv tool install` is experimental and may change without warning
Resolved 6 packages in [TIME]
Prepared 6 packages in [TIME]
Installed 6 packages in [TIME]
@ -1410,7 +1380,6 @@ fn tool_install_no_entrypoints() {
No executables are provided by `iniconfig`
----- stderr -----
warning: `uv tool install` is experimental and may change without warning
Resolved 1 package in [TIME]
Prepared 1 package in [TIME]
Installed 1 package in [TIME]
@ -1436,7 +1405,6 @@ fn tool_install_unnamed_package() {
----- stdout -----
----- stderr -----
warning: `uv tool install` is experimental and may change without warning
Resolved 6 packages in [TIME]
Prepared 6 packages in [TIME]
Installed 6 packages in [TIME]
@ -1526,7 +1494,6 @@ fn tool_install_unnamed_conflict() {
----- stdout -----
----- stderr -----
warning: `uv tool install` is experimental and may change without warning
error: Package name (`iniconfig`) provided with `--from` does not match install request (`black`)
"###);
}
@ -1551,7 +1518,6 @@ fn tool_install_unnamed_from() {
----- stdout -----
----- stderr -----
warning: `uv tool install` is experimental and may change without warning
Resolved 6 packages in [TIME]
Prepared 6 packages in [TIME]
Installed 6 packages in [TIME]
@ -1640,7 +1606,6 @@ fn tool_install_unnamed_with() {
----- stdout -----
----- stderr -----
warning: `uv tool install` is experimental and may change without warning
Resolved 7 packages in [TIME]
Prepared 7 packages in [TIME]
Installed 7 packages in [TIME]
@ -1738,7 +1703,6 @@ fn tool_install_requirements_txt() {
----- stdout -----
----- stderr -----
warning: `uv tool install` is experimental and may change without warning
Resolved [N] packages in [TIME]
Prepared [N] packages in [TIME]
Installed [N] packages in [TIME]
@ -1788,7 +1752,6 @@ fn tool_install_requirements_txt() {
----- stdout -----
----- stderr -----
warning: `uv tool install` is experimental and may change without warning
Resolved [N] packages in [TIME]
Prepared [N] packages in [TIME]
Uninstalled [N] packages in [TIME]
@ -1848,7 +1811,6 @@ fn tool_install_requirements_txt_arguments() {
----- stdout -----
----- stderr -----
warning: `uv tool install` is experimental and may change without warning
warning: Ignoring `--index-url` from requirements file: `https://test.pypi.org/simple`. Instead, use the `--index-url` command-line argument, or set `index-url` in a `uv.toml` or `pyproject.toml` file.
Resolved 7 packages in [TIME]
Prepared 7 packages in [TIME]
@ -1906,7 +1868,6 @@ fn tool_install_requirements_txt_arguments() {
----- stdout -----
----- stderr -----
warning: `uv tool install` is experimental and may change without warning
Installed 2 executables: black, blackd
"###);
@ -1934,7 +1895,6 @@ fn tool_install_requirements_txt_arguments() {
----- stdout -----
----- stderr -----
warning: `uv tool install` is experimental and may change without warning
Resolved 8 packages in [TIME]
Prepared 8 packages in [TIME]
Installed 8 packages in [TIME]
@ -1970,7 +1930,6 @@ fn tool_install_upgrade() {
----- stdout -----
----- stderr -----
warning: `uv tool install` is experimental and may change without warning
Resolved [N] packages in [TIME]
Prepared [N] packages in [TIME]
Installed [N] packages in [TIME]
@ -2012,7 +1971,6 @@ fn tool_install_upgrade() {
----- stdout -----
----- stderr -----
warning: `uv tool install` is experimental and may change without warning
Installed 2 executables: black, blackd
"###);
@ -2046,7 +2004,6 @@ fn tool_install_upgrade() {
----- stdout -----
----- stderr -----
warning: `uv tool install` is experimental and may change without warning
Resolved [N] packages in [TIME]
Prepared [N] packages in [TIME]
Installed [N] packages in [TIME]
@ -2087,7 +2044,6 @@ fn tool_install_upgrade() {
----- stdout -----
----- stderr -----
warning: `uv tool install` is experimental and may change without warning
Resolved [N] packages in [TIME]
Prepared [N] packages in [TIME]
Uninstalled [N] packages in [TIME]
@ -2138,7 +2094,6 @@ fn tool_install_python_request() {
----- stdout -----
----- stderr -----
warning: `uv tool install` is experimental and may change without warning
Resolved [N] packages in [TIME]
Prepared [N] packages in [TIME]
Installed [N] packages in [TIME]
@ -2164,7 +2119,6 @@ fn tool_install_python_request() {
----- stdout -----
----- stderr -----
warning: `uv tool install` is experimental and may change without warning
`black` is already installed
"###);
@ -2181,7 +2135,6 @@ fn tool_install_python_request() {
----- stdout -----
----- stderr -----
warning: `uv tool install` is experimental and may change without warning
Existing environment for `black` does not satisfy the requested Python interpreter
Resolved [N] packages in [TIME]
Prepared [N] packages in [TIME]
@ -2216,7 +2169,6 @@ fn tool_install_preserve_environment() {
----- stdout -----
----- stderr -----
warning: `uv tool install` is experimental and may change without warning
Resolved [N] packages in [TIME]
Prepared [N] packages in [TIME]
Installed [N] packages in [TIME]
@ -2242,7 +2194,6 @@ fn tool_install_preserve_environment() {
----- stdout -----
----- stderr -----
warning: `uv tool install` is experimental and may change without warning
error: 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.
"###);
@ -2258,7 +2209,6 @@ fn tool_install_preserve_environment() {
----- stdout -----
----- stderr -----
warning: `uv tool install` is experimental and may change without warning
`black==24.1.1` is already installed
"###);
}
@ -2284,7 +2234,6 @@ fn tool_install_warn_path() {
----- stdout -----
----- stderr -----
warning: `uv tool install` is experimental and may change without warning
Resolved [N] packages in [TIME]
Prepared [N] packages in [TIME]
Installed [N] packages in [TIME]
@ -2319,7 +2268,6 @@ fn tool_install_bad_receipt() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv tool install` is experimental and may change without warning
Resolved [N] packages in [TIME]
Prepared [N] packages in [TIME]
Installed [N] packages in [TIME]
@ -2354,7 +2302,6 @@ fn tool_install_bad_receipt() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv tool install` is experimental and may change without warning
warning: Removed existing `black` with invalid receipt
Resolved [N] packages in [TIME]
Installed [N] packages in [TIME]
@ -2391,7 +2338,6 @@ fn tool_install_malformed_dist_info() {
----- stdout -----
----- stderr -----
warning: `uv tool install` is experimental and may change without warning
Resolved [N] packages in [TIME]
Prepared [N] packages in [TIME]
Installed [N] packages in [TIME]
@ -2465,7 +2411,6 @@ fn tool_install_settings() {
----- stdout -----
----- stderr -----
warning: `uv tool install` is experimental and may change without warning
Resolved [N] packages in [TIME]
Prepared [N] packages in [TIME]
Installed [N] packages in [TIME]
@ -2535,7 +2480,6 @@ fn tool_install_settings() {
----- stdout -----
----- stderr -----
warning: `uv tool install` is experimental and may change without warning
`flask>=3` is already installed
"###);
@ -2571,7 +2515,6 @@ fn tool_install_settings() {
----- stdout -----
----- stderr -----
warning: `uv tool install` is experimental and may change without warning
Resolved [N] packages in [TIME]
Prepared [N] packages in [TIME]
Uninstalled [N] packages in [TIME]

View file

@ -35,7 +35,6 @@ fn tool_list() {
- blackd
----- stderr -----
warning: `uv tool list` is experimental and may change without warning
"###);
}
@ -65,7 +64,6 @@ fn tool_list_paths() {
- blackd ([TEMP_DIR]/bin/blackd)
----- stderr -----
warning: `uv tool list` is experimental and may change without warning
"###);
}
@ -83,7 +81,6 @@ fn tool_list_empty() {
----- stdout -----
----- stderr -----
warning: `uv tool list` is experimental and may change without warning
No tools installed
"###);
}
@ -113,7 +110,6 @@ fn tool_list_missing_receipt() {
----- stdout -----
----- stderr -----
warning: `uv tool list` is experimental and may change without warning
warning: Ignoring malformed tool `black` (run `uv tool uninstall black` to remove)
"###);
}
@ -163,7 +159,6 @@ fn tool_list_bad_environment() -> Result<()> {
- ruff
----- stderr -----
warning: `uv tool list` is experimental and may change without warning
Python interpreter not found at `[TEMP_DIR]/tools/black/[BIN]/python`
"###
);
@ -228,7 +223,6 @@ fn tool_list_deprecated() -> Result<()> {
- blackd
----- stderr -----
warning: `uv tool list` is experimental and may change without warning
"###);
// Replace with an invalid receipt.
@ -253,7 +247,6 @@ fn tool_list_deprecated() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv tool list` is experimental and may change without warning
warning: Ignoring malformed tool `black` (run `uv tool uninstall black` to remove)
"###);

View file

@ -39,7 +39,6 @@ fn tool_run_args() {
pytest 8.1.1
----- stderr -----
warning: `uv tool run` is experimental and may change without warning
Resolved [N] packages in [TIME]
Prepared [N] packages in [TIME]
Installed [N] packages in [TIME]
@ -62,7 +61,6 @@ fn tool_run_args() {
pytest 8.1.1
----- stderr -----
warning: `uv tool run` is experimental and may change without warning
Resolved [N] packages in [TIME]
"###);
}
@ -84,7 +82,6 @@ fn tool_run_at_version() {
pytest 8.0.0
----- stderr -----
warning: `uv tool run` is experimental and may change without warning
Resolved 4 packages in [TIME]
Prepared 4 packages in [TIME]
Installed 4 packages in [TIME]
@ -105,7 +102,6 @@ fn tool_run_at_version() {
----- stdout -----
----- stderr -----
warning: `uv tool run` is experimental and may change without warning
error: Not a valid package or extra name: "pytest@". Names must start and end with a letter or digit and may only contain -, _, ., and alphanumeric characters.
"###);
@ -120,7 +116,6 @@ fn tool_run_at_version() {
----- stdout -----
----- stderr -----
warning: `uv tool run` is experimental and may change without warning
error: Not a valid package or extra name: "pytest@invalid". Names must start and end with a letter or digit and may only contain -, _, ., and alphanumeric characters.
"###);
@ -151,7 +146,6 @@ fn tool_run_at_version() {
- pytest
----- stderr -----
warning: `uv tool run` is experimental and may change without warning
Resolved 4 packages in [TIME]
Prepared 1 package in [TIME]
Installed 4 packages in [TIME]
@ -182,7 +176,6 @@ fn tool_run_from_version() {
pytest 8.0.0
----- stderr -----
warning: `uv tool run` is experimental and may change without warning
Resolved 4 packages in [TIME]
Prepared 4 packages in [TIME]
Installed 4 packages in [TIME]
@ -214,7 +207,6 @@ fn tool_run_suggest_valid_commands() {
- blackd
----- stderr -----
warning: `uv tool run` is experimental and may change without warning
Resolved 6 packages in [TIME]
Prepared 6 packages in [TIME]
Installed 6 packages in [TIME]
@ -237,7 +229,6 @@ fn tool_run_suggest_valid_commands() {
The executable `fastapi-cli` was not found.
----- stderr -----
warning: `uv tool run` is experimental and may change without warning
Resolved 3 packages in [TIME]
Prepared 3 packages in [TIME]
Installed 3 packages in [TIME]
@ -271,7 +262,6 @@ fn tool_run_warn_executable_not_in_from() {
----- stdout -----
----- stderr -----
warning: `uv tool run` is experimental and may change without warning
Resolved 35 packages in [TIME]
Prepared 35 packages in [TIME]
Installed 35 packages in [TIME]
@ -341,7 +331,6 @@ fn tool_run_from_install() {
Python (CPython) 3.12.[X]
----- stderr -----
warning: `uv tool run` is experimental and may change without warning
"###);
// Verify that `--isolated` uses an isolated environment.
@ -358,7 +347,6 @@ fn tool_run_from_install() {
Python (CPython) 3.12.[X]
----- stderr -----
warning: `uv tool run` is experimental and may change without warning
Resolved [N] packages in [TIME]
Prepared [N] packages in [TIME]
Installed [N] packages in [TIME]
@ -383,7 +371,6 @@ fn tool_run_from_install() {
Python (CPython) 3.12.[X]
----- stderr -----
warning: `uv tool run` is experimental and may change without warning
Resolved [N] packages in [TIME]
Prepared [N] packages in [TIME]
Installed [N] packages in [TIME]
@ -412,7 +399,6 @@ fn tool_run_from_install() {
Python (CPython) 3.12.[X]
----- stderr -----
warning: `uv tool run` is experimental and may change without warning
Resolved [N] packages in [TIME]
Prepared [N] packages in [TIME]
Installed [N] packages in [TIME]
@ -440,7 +426,6 @@ fn tool_run_from_install() {
Python (CPython) 3.12.[X]
----- stderr -----
warning: `uv tool run` is experimental and may change without warning
Resolved [N] packages in [TIME]
Prepared [N] packages in [TIME]
Installed [N] packages in [TIME]
@ -474,7 +459,6 @@ fn tool_run_cache() {
Python (CPython) 3.12.[X]
----- stderr -----
warning: `uv tool run` is experimental and may change without warning
Resolved [N] packages in [TIME]
Prepared [N] packages in [TIME]
Installed [N] packages in [TIME]
@ -501,7 +485,6 @@ fn tool_run_cache() {
Python (CPython) 3.12.[X]
----- stderr -----
warning: `uv tool run` is experimental and may change without warning
Resolved [N] packages in [TIME]
"###);
@ -521,7 +504,6 @@ fn tool_run_cache() {
Python (CPython) 3.12.[X]
----- stderr -----
warning: `uv tool run` is experimental and may change without warning
Resolved [N] packages in [TIME]
Prepared [N] packages in [TIME]
Installed [N] packages in [TIME]
@ -550,7 +532,6 @@ fn tool_run_cache() {
Python (CPython) 3.12.[X]
----- stderr -----
warning: `uv tool run` is experimental and may change without warning
Resolved [N] packages in [TIME]
Prepared [N] packages in [TIME]
Installed [N] packages in [TIME]
@ -577,7 +558,6 @@ fn tool_run_cache() {
Python (CPython) 3.11.[X]
----- stderr -----
warning: `uv tool run` is experimental and may change without warning
Resolved [N] packages in [TIME]
Prepared [N] packages in [TIME]
Installed [N] packages in [TIME]
@ -604,7 +584,6 @@ fn tool_run_cache() {
Python (CPython) 3.12.[X]
----- stderr -----
warning: `uv tool run` is experimental and may change without warning
Resolved [N] packages in [TIME]
"###);
@ -625,7 +604,6 @@ fn tool_run_cache() {
Python (CPython) 3.12.[X]
----- stderr -----
warning: `uv tool run` is experimental and may change without warning
Resolved [N] packages in [TIME]
Prepared [N] packages in [TIME]
Installed [N] packages in [TIME]
@ -660,7 +638,6 @@ fn tool_run_url() {
Werkzeug 3.0.1
----- stderr -----
warning: `uv tool run` is experimental and may change without warning
Resolved [N] packages in [TIME]
Prepared [N] packages in [TIME]
Installed [N] packages in [TIME]
@ -701,7 +678,6 @@ fn tool_run_requirements_txt() {
Werkzeug 3.0.1
----- stderr -----
warning: `uv tool run` is experimental and may change without warning
Resolved [N] packages in [TIME]
Prepared [N] packages in [TIME]
Installed [N] packages in [TIME]
@ -748,7 +724,6 @@ fn tool_run_requirements_txt_arguments() {
Werkzeug 3.0.1
----- stderr -----
warning: `uv tool run` is experimental and may change without warning
warning: Ignoring `--index-url` from requirements file: `https://test.pypi.org/simple`. Instead, use the `--index-url` command-line argument, or set `index-url` in a `uv.toml` or `pyproject.toml` file.
Resolved [N] packages in [TIME]
Prepared [N] packages in [TIME]
@ -780,7 +755,6 @@ fn tool_run_list_installed() {
----- stdout -----
----- stderr -----
warning: `uv tool run` is experimental and may change without warning
No tools installed
"###);
@ -805,7 +779,6 @@ fn tool_run_list_installed() {
- blackd
----- stderr -----
warning: `uv tool run` is experimental and may change without warning
"###);
}
@ -830,7 +803,6 @@ fn tool_run_without_output() {
pytest 8.1.1
----- stderr -----
warning: `uv tool run` is experimental and may change without warning
Installed [N] packages in [TIME]
"###);
@ -848,7 +820,6 @@ fn tool_run_without_output() {
pytest 8.1.1
----- stderr -----
warning: `uv tool run` is experimental and may change without warning
"###);
}
@ -868,7 +839,6 @@ fn warn_no_executables_found() {
The executable `requests` was not found.
----- stderr -----
warning: `uv tool run` is experimental and may change without warning
Resolved 5 packages in [TIME]
Prepared 5 packages in [TIME]
Installed 5 packages in [TIME]
@ -901,7 +871,6 @@ fn tool_run_upgrade_warn() {
----- stderr -----
warning: Tools cannot be upgraded via `uv tool run`; use `uv tool upgrade --all` to upgrade all installed tools, or `uv tool run package@latest` to run the latest version of a tool
warning: `uv tool run` is experimental and may change without warning
Resolved [N] packages in [TIME]
Prepared [N] packages in [TIME]
Installed [N] packages in [TIME]
@ -928,7 +897,6 @@ fn tool_run_resolution_error() {
----- stdout -----
----- stderr -----
warning: `uv tool run` is experimental and may change without warning
× 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.
"###);
@ -961,7 +929,6 @@ fn tool_run_latest() {
pytest 7.0.0
----- stderr -----
warning: `uv tool run` is experimental and may change without warning
"###);
// Run `pytest@latest`, which should use the latest version.
@ -976,7 +943,6 @@ fn tool_run_latest() {
pytest 8.1.1
----- stderr -----
warning: `uv tool run` is experimental and may change without warning
Resolved 4 packages in [TIME]
Prepared 4 packages in [TIME]
Installed 4 packages in [TIME]
@ -998,6 +964,5 @@ fn tool_run_latest() {
pytest 7.0.0
----- stderr -----
warning: `uv tool run` is experimental and may change without warning
"###);
}

View file

@ -30,7 +30,6 @@ fn tool_uninstall() {
----- stdout -----
----- stderr -----
warning: `uv tool uninstall` is experimental and may change without warning
Uninstalled 2 executables: black, blackd
"###);
@ -43,7 +42,6 @@ fn tool_uninstall() {
----- stdout -----
----- stderr -----
warning: `uv tool list` is experimental and may change without warning
No tools installed
"###);
@ -58,7 +56,6 @@ fn tool_uninstall() {
----- stdout -----
----- stderr -----
warning: `uv tool install` is experimental and may change without warning
Resolved 6 packages in [TIME]
Installed 6 packages in [TIME]
+ black==24.2.0
@ -85,7 +82,6 @@ fn tool_uninstall_not_installed() {
----- stdout -----
----- stderr -----
warning: `uv tool uninstall` is experimental and may change without warning
error: `black` is not installed
"###);
}
@ -115,7 +111,6 @@ fn tool_uninstall_missing_receipt() {
----- stdout -----
----- stderr -----
warning: `uv tool uninstall` is experimental and may change without warning
Removed dangling environment for `black`
"###);
}
@ -145,7 +140,6 @@ fn tool_uninstall_all_missing_receipt() {
----- stdout -----
----- stderr -----
warning: `uv tool uninstall` is experimental and may change without warning
Removed dangling environment for `black`
"###);
}

View file

@ -27,7 +27,6 @@ fn test_tool_upgrade_name() {
----- stdout -----
----- stderr -----
warning: `uv tool install` is experimental and may change without warning
Resolved [N] packages in [TIME]
Prepared [N] packages in [TIME]
Installed [N] packages in [TIME]
@ -49,7 +48,6 @@ fn test_tool_upgrade_name() {
----- stdout -----
----- stderr -----
warning: `uv tool upgrade` is experimental and may change without warning
Updated babel v2.6.0 -> v2.14.0
- babel==2.6.0
+ babel==2.14.0
@ -79,7 +77,6 @@ fn test_tool_upgrade_all() {
----- stdout -----
----- stderr -----
warning: `uv tool install` is experimental and may change without warning
Resolved [N] packages in [TIME]
Prepared [N] packages in [TIME]
Installed [N] packages in [TIME]
@ -100,7 +97,6 @@ fn test_tool_upgrade_all() {
----- stdout -----
----- stderr -----
warning: `uv tool install` is experimental and may change without warning
Resolved [N] packages in [TIME]
Prepared [N] packages in [TIME]
Installed [N] packages in [TIME]
@ -122,7 +118,6 @@ fn test_tool_upgrade_all() {
----- stdout -----
----- stderr -----
warning: `uv tool upgrade` is experimental and may change without warning
Updated babel v2.6.0 -> v2.14.0
- babel==2.6.0
+ babel==2.14.0
@ -154,7 +149,6 @@ fn test_tool_upgrade_non_existing_package() {
----- stdout -----
----- stderr -----
warning: `uv tool upgrade` is experimental and may change without warning
`black` is not installed; run `uv tool install black` to install
"###);
@ -169,7 +163,6 @@ fn test_tool_upgrade_non_existing_package() {
----- stdout -----
----- stderr -----
warning: `uv tool upgrade` is experimental and may change without warning
Nothing to upgrade
"###);
}
@ -194,7 +187,6 @@ fn test_tool_upgrade_settings() {
----- stdout -----
----- stderr -----
warning: `uv tool install` is experimental and may change without warning
Resolved [N] packages in [TIME]
Prepared [N] packages in [TIME]
Installed [N] packages in [TIME]
@ -218,7 +210,6 @@ fn test_tool_upgrade_settings() {
----- stdout -----
----- stderr -----
warning: `uv tool upgrade` is experimental and may change without warning
Nothing to upgrade
"###);
@ -234,7 +225,6 @@ fn test_tool_upgrade_settings() {
----- stdout -----
----- stderr -----
warning: `uv tool upgrade` is experimental and may change without warning
Updated black v23.1.0 -> v24.3.0
- black==23.1.0
+ black==24.3.0
@ -263,7 +253,6 @@ fn test_tool_upgrade_respect_constraints() {
----- stdout -----
----- stderr -----
warning: `uv tool install` is experimental and may change without warning
Resolved [N] packages in [TIME]
Prepared [N] packages in [TIME]
Installed [N] packages in [TIME]
@ -285,7 +274,6 @@ fn test_tool_upgrade_respect_constraints() {
----- stdout -----
----- stderr -----
warning: `uv tool upgrade` is experimental and may change without warning
Updated babel v2.6.0 -> v2.9.1
- babel==2.6.0
+ babel==2.9.1
@ -316,7 +304,6 @@ fn test_tool_upgrade_constraint() {
----- stdout -----
----- stderr -----
warning: `uv tool install` is experimental and may change without warning
Resolved [N] packages in [TIME]
Prepared [N] packages in [TIME]
Installed [N] packages in [TIME]
@ -340,7 +327,6 @@ fn test_tool_upgrade_constraint() {
----- stdout -----
----- stderr -----
warning: `uv tool upgrade` is experimental and may change without warning
Updated babel v2.6.0 -> v2.13.1
- babel==2.6.0
+ babel==2.13.1
@ -362,7 +348,6 @@ fn test_tool_upgrade_constraint() {
----- stdout -----
----- stderr -----
warning: `uv tool upgrade` is experimental and may change without warning
Updated babel v2.13.1 -> v2.14.0
- babel==2.13.1
+ babel==2.14.0
@ -385,7 +370,6 @@ fn test_tool_upgrade_constraint() {
----- stderr -----
warning: `--upgrade` is enabled by default on `uv tool upgrade`
warning: `uv tool upgrade` is experimental and may change without warning
Nothing to upgrade
"###);
}
@ -413,7 +397,6 @@ fn test_tool_upgrade_with() {
----- stdout -----
----- stderr -----
warning: `uv tool install` is experimental and may change without warning
Resolved [N] packages in [TIME]
Prepared [N] packages in [TIME]
Installed [N] packages in [TIME]
@ -435,7 +418,6 @@ fn test_tool_upgrade_with() {
----- stdout -----
----- stderr -----
warning: `uv tool upgrade` is experimental and may change without warning
Modified babel environment
- pytz==2018.5
+ pytz==2024.1

View file

@ -39,7 +39,6 @@ fn nested_dependencies() -> Result<()> {
threadpoolctl v3.4.0
----- stderr -----
warning: `uv tree` is experimental and may change without warning
Resolved 6 packages in [TIME]
"###
);
@ -85,7 +84,6 @@ fn invert() -> Result<()> {
(*) Package tree already displayed
----- stderr -----
warning: `uv tree` is experimental and may change without warning
Resolved 6 packages in [TIME]
"###
);
@ -108,7 +106,6 @@ fn invert() -> Result<()> {
project v0.1.0
----- stderr -----
warning: `uv tree` is experimental and may change without warning
Resolved 6 packages in [TIME]
"###
);
@ -142,7 +139,6 @@ fn frozen() -> Result<()> {
sniffio v1.3.1
----- stderr -----
warning: `uv tree` is experimental and may change without warning
Resolved 4 packages in [TIME]
"###
);
@ -175,7 +171,6 @@ fn frozen() -> Result<()> {
sniffio v1.3.1
----- stderr -----
warning: `uv tree` is experimental and may change without warning
"###
);
@ -215,7 +210,6 @@ fn platform_dependencies() -> Result<()> {
platformdirs v4.2.0
----- stderr -----
warning: `uv tree` is experimental and may change without warning
Resolved 8 packages in [TIME]
"###);
@ -234,7 +228,6 @@ fn platform_dependencies() -> Result<()> {
platformdirs v4.2.0
----- stderr -----
warning: `uv tree` is experimental and may change without warning
Resolved 8 packages in [TIME]
"###);
@ -254,7 +247,6 @@ fn platform_dependencies() -> Result<()> {
platformdirs v4.2.0
----- stderr -----
warning: `uv tree` is experimental and may change without warning
Resolved 8 packages in [TIME]
"###
);
@ -300,7 +292,6 @@ fn repeated_dependencies() -> Result<()> {
sniffio v1.3.1
----- stderr -----
warning: `uv tree` is experimental and may change without warning
Resolved 6 packages in [TIME]
"###
);
@ -375,7 +366,6 @@ fn repeated_version() -> Result<()> {
sniffio v1.3.1
----- stderr -----
warning: `uv tree` is experimental and may change without warning
Resolved 7 packages in [TIME]
"###
);
@ -417,7 +407,6 @@ fn dev_dependencies() -> Result<()> {
sniffio v1.3.1
----- stderr -----
warning: `uv tree` is experimental and may change without warning
Resolved 5 packages in [TIME]
"###
);
@ -461,7 +450,6 @@ fn dev_dependencies_inverted() -> Result<()> {
(*) Package tree already displayed
----- stderr -----
warning: `uv tree` is experimental and may change without warning
Resolved 5 packages in [TIME]
"###
);
@ -513,7 +501,6 @@ fn optional_dependencies() -> Result<()> {
sniffio v1.3.1
----- stderr -----
warning: `uv tree` is experimental and may change without warning
Resolved 14 packages in [TIME]
"###
);
@ -573,7 +560,6 @@ fn optional_dependencies_inverted() -> Result<()> {
(*) Package tree already displayed
----- stderr -----
warning: `uv tree` is experimental and may change without warning
Resolved 14 packages in [TIME]
"###
);

View file

@ -502,7 +502,7 @@ fn create_venv_unknown_python_minor() {
----- stdout -----
----- stderr -----
× No interpreter found for Python 3.100 in system path or `py` launcher
× No interpreter found for Python 3.100 in managed installations, system path, or `py` launcher
"###
);
} else {
@ -512,7 +512,7 @@ fn create_venv_unknown_python_minor() {
----- stdout -----
----- stderr -----
× No interpreter found for Python 3.100 in system path
× No interpreter found for Python 3.100 in managed installations or system path
"###
);
}
@ -540,7 +540,7 @@ fn create_venv_unknown_python_patch() {
----- stdout -----
----- stderr -----
× No interpreter found for Python 3.12.100 in system path or `py` launcher
× No interpreter found for Python 3.12.100 in managed installations, system path, or `py` launcher
"###
);
} else {
@ -550,7 +550,7 @@ fn create_venv_unknown_python_patch() {
----- stdout -----
----- stderr -----
× No interpreter found for Python 3.12.100 in system path
× No interpreter found for Python 3.12.100 in managed installations or system path
"###
);
}

View file

@ -19,7 +19,6 @@ fn packse_add_remove_one_package() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv lock` is experimental and may change without warning
Resolved 49 packages in [TIME]
"###);
@ -221,7 +220,6 @@ fn packse_add_remove_existing_package_noop() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv lock` is experimental and may change without warning
Resolved 49 packages in [TIME]
"###);
@ -255,7 +253,6 @@ fn packse_promote_transitive_to_direct_then_remove() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv lock` is experimental and may change without warning
Resolved 49 packages in [TIME]
"###);
@ -407,7 +404,6 @@ fn jax_instability() -> Result<()> {
----- stdout -----
----- stderr -----
warning: `uv lock` is experimental and may change without warning
Resolved 8 packages in [TIME]
"###);

View file

@ -12,23 +12,23 @@ uv [OPTIONS] <COMMAND>
<h3 class="cli-reference">Commands</h3>
<dl class="cli-reference"><dt><a href="#uv-run"><code>uv run</code></a></dt><dd><p>Run a command or script (experimental)</p>
<dl class="cli-reference"><dt><a href="#uv-run"><code>uv run</code></a></dt><dd><p>Run a command or script</p>
</dd>
<dt><a href="#uv-init"><code>uv init</code></a></dt><dd><p>Create a new project (experimental)</p>
<dt><a href="#uv-init"><code>uv init</code></a></dt><dd><p>Create a new project</p>
</dd>
<dt><a href="#uv-add"><code>uv add</code></a></dt><dd><p>Add dependencies to the project (experimental)</p>
<dt><a href="#uv-add"><code>uv add</code></a></dt><dd><p>Add dependencies to the project</p>
</dd>
<dt><a href="#uv-remove"><code>uv remove</code></a></dt><dd><p>Remove dependencies from the project (experimental)</p>
<dt><a href="#uv-remove"><code>uv remove</code></a></dt><dd><p>Remove dependencies from the project</p>
</dd>
<dt><a href="#uv-sync"><code>uv sync</code></a></dt><dd><p>Update the project&#8217;s environment (experimental)</p>
<dt><a href="#uv-sync"><code>uv sync</code></a></dt><dd><p>Update the project&#8217;s environment</p>
</dd>
<dt><a href="#uv-lock"><code>uv lock</code></a></dt><dd><p>Update the project&#8217;s lockfile (experimental)</p>
<dt><a href="#uv-lock"><code>uv lock</code></a></dt><dd><p>Update the project&#8217;s lockfile</p>
</dd>
<dt><a href="#uv-tree"><code>uv tree</code></a></dt><dd><p>Display the project&#8217;s dependency tree (experimental)</p>
<dt><a href="#uv-tree"><code>uv tree</code></a></dt><dd><p>Display the project&#8217;s dependency tree</p>
</dd>
<dt><a href="#uv-tool"><code>uv tool</code></a></dt><dd><p>Run and install commands provided by Python packages (experimental)</p>
<dt><a href="#uv-tool"><code>uv tool</code></a></dt><dd><p>Run and install commands provided by Python packages</p>
</dd>
<dt><a href="#uv-python"><code>uv python</code></a></dt><dd><p>Manage Python versions and installations (experimental)</p>
<dt><a href="#uv-python"><code>uv python</code></a></dt><dd><p>Manage Python versions and installations</p>
</dd>
<dt><a href="#uv-pip"><code>uv pip</code></a></dt><dd><p>Manage Python packages with a pip-compatible interface</p>
</dd>
@ -44,7 +44,7 @@ uv [OPTIONS] <COMMAND>
## uv run
Run a command or script (experimental).
Run a command or script.
Ensures that the command runs in a Python environment.
@ -332,7 +332,7 @@ uv run [OPTIONS] <COMMAND>
## uv init
Create a new project (experimental).
Create a new project.
Follows the `pyproject.toml` specification.
@ -451,7 +451,7 @@ uv init [OPTIONS] [PATH]
## uv add
Add dependencies to the project (experimental).
Add dependencies to the project.
Dependencies are added to the project's `pyproject.toml` file.
@ -737,7 +737,7 @@ uv add [OPTIONS] <PACKAGES|--requirements <REQUIREMENTS>>
## uv remove
Remove dependencies from the project (experimental).
Remove dependencies from the project.
Dependencies are removed from the project's `pyproject.toml` file.
@ -997,7 +997,7 @@ uv remove [OPTIONS] <PACKAGES>...
## uv sync
Update the project's environment (experimental).
Update the project's environment.
Syncing ensures that all project dependencies are installed and up-to-date with the lockfile. Syncing also removes packages that are not declared as dependencies of the project.
@ -1261,7 +1261,7 @@ uv sync [OPTIONS]
## uv lock
Update the project's lockfile (experimental).
Update the project's lockfile.
If the project lockfile (`uv.lock`) does not exist, it will be created. If a lockfile is present, its contents will be used as preferences for the resolution.
@ -1489,7 +1489,7 @@ uv lock [OPTIONS]
## uv tree
Display the project's dependency tree (experimental)
Display the project's dependency tree
<h3 class="cli-reference">Usage</h3>
@ -1775,7 +1775,7 @@ uv tree [OPTIONS]
## uv tool
Run and install commands provided by Python packages (experimental)
Run and install commands provided by Python packages
<h3 class="cli-reference">Usage</h3>
@ -2860,7 +2860,7 @@ uv tool dir [OPTIONS]
## uv python
Manage Python versions and installations (experimental)
Manage Python versions and installations
Generally, uv first searches for Python in a virtual environment, either
active or in a `.venv` directory in the current working directory or
@ -2871,8 +2871,7 @@ searching for Python executables in the `PATH` environment variable.
On Windows, the `py` launcher is also invoked to find Python
executables.
When preview is enabled, i.e., via `--preview` or by using a preview
command, uv will download Python if a version cannot be found. This
By default, uv will download Python if a version cannot be found. This
behavior can be disabled with the `--python-downloads` option.
The `--python` option allows requesting a different interpreter.