diff --git a/crates/uv/src/commands/project/environment.rs b/crates/uv/src/commands/project/environment.rs
index 70a65a2b65b2..4f3417f0bfe1 100644
--- a/crates/uv/src/commands/project/environment.rs
+++ b/crates/uv/src/commands/project/environment.rs
@@ -1,18 +1,18 @@
use tracing::debug;
+use crate::commands::pip::loggers::{InstallLogger, ResolveLogger};
+use crate::commands::project::{
+ resolve_environment, sync_environment, EnvironmentSpecification, ProjectError,
+};
+use crate::commands::SharedState;
+use crate::printer::Printer;
+use crate::settings::ResolverInstallerSettings;
use cache_key::{cache_digest, hash_digest};
use distribution_types::Resolution;
use uv_cache::{Cache, CacheBucket};
use uv_client::Connectivity;
use uv_configuration::Concurrency;
use uv_python::{Interpreter, PythonEnvironment};
-use uv_requirements::RequirementsSpecification;
-
-use crate::commands::pip::loggers::{InstallLogger, ResolveLogger};
-use crate::commands::project::{resolve_environment, sync_environment, ProjectError};
-use crate::commands::SharedState;
-use crate::printer::Printer;
-use crate::settings::ResolverInstallerSettings;
/// A [`PythonEnvironment`] stored in the cache.
#[derive(Debug)]
@@ -28,7 +28,7 @@ impl CachedEnvironment {
/// Get or create an [`CachedEnvironment`] based on a given set of requirements and a base
/// interpreter.
pub(crate) async fn get_or_create(
- spec: RequirementsSpecification,
+ spec: EnvironmentSpecification<'_>,
interpreter: Interpreter,
settings: &ResolverInstallerSettings,
state: &SharedState,
@@ -58,8 +58,8 @@ impl CachedEnvironment {
// Resolve the requirements with the interpreter.
let graph = resolve_environment(
- &interpreter,
spec,
+ &interpreter,
settings.as_ref().into(),
state,
resolve,
diff --git a/crates/uv/src/commands/project/lock.rs b/crates/uv/src/commands/project/lock.rs
index 5ea58d4050cd..40819ac4b3a0 100644
--- a/crates/uv/src/commands/project/lock.rs
+++ b/crates/uv/src/commands/project/lock.rs
@@ -858,7 +858,7 @@ async fn commit(lock: &Lock, workspace: &Workspace) -> Result<(), ProjectError>
/// Read the lockfile from the workspace.
///
/// Returns `Ok(None)` if the lockfile does not exist.
-async fn read(workspace: &Workspace) -> Result