From fa2b6a28bc8c5ab329c432d16c3e88100511bf5e Mon Sep 17 00:00:00 2001 From: Charlie Marsh Date: Wed, 5 Jun 2024 22:11:21 -0400 Subject: [PATCH] Prefix sys fields with `sys_` consistently on Interpreter (#4084) ## Summary This is more consistent across the struct _and_ opens up space for `--prefix`. --- crates/uv-cache/src/lib.rs | 2 +- .../python/get_interpreter_info.py | 8 +-- crates/uv-interpreter/src/environment.rs | 14 ++--- crates/uv-interpreter/src/interpreter.rs | 60 +++++++++---------- crates/uv-interpreter/src/lib.rs | 6 +- crates/uv-virtualenv/src/bare.rs | 6 +- 6 files changed, 48 insertions(+), 48 deletions(-) diff --git a/crates/uv-cache/src/lib.rs b/crates/uv-cache/src/lib.rs index 936329d90..1726a662d 100644 --- a/crates/uv-cache/src/lib.rs +++ b/crates/uv-cache/src/lib.rs @@ -636,7 +636,7 @@ impl CacheBucket { Self::BuiltWheels => "built-wheels-v3", Self::FlatIndex => "flat-index-v0", Self::Git => "git-v0", - Self::Interpreter => "interpreter-v1", + Self::Interpreter => "interpreter-v2", Self::Simple => "simple-v8", Self::Wheels => "wheels-v1", Self::Archive => "archive-v0", diff --git a/crates/uv-interpreter/python/get_interpreter_info.py b/crates/uv-interpreter/python/get_interpreter_info.py index ec4d722e7..14fb6635e 100644 --- a/crates/uv-interpreter/python/get_interpreter_info.py +++ b/crates/uv-interpreter/python/get_interpreter_info.py @@ -545,10 +545,10 @@ def main() -> None: interpreter_info = { "result": "success", "markers": markers, - "base_prefix": sys.base_prefix, - "base_exec_prefix": sys.base_exec_prefix, - "prefix": sys.prefix, - "base_executable": getattr(sys, "_base_executable", None), + "sys_base_prefix": sys.base_prefix, + "sys_base_exec_prefix": sys.base_exec_prefix, + "sys_prefix": sys.prefix, + "sys_base_executable": getattr(sys, "_base_executable", None), "sys_executable": sys.executable, "sys_path": sys.path, "stdlib": sysconfig.get_path("stdlib"), diff --git a/crates/uv-interpreter/src/environment.rs b/crates/uv-interpreter/src/environment.rs index e26b76600..8b5009dab 100644 --- a/crates/uv-interpreter/src/environment.rs +++ b/crates/uv-interpreter/src/environment.rs @@ -75,11 +75,11 @@ impl PythonEnvironment { || matches!(found.source(), InterpreterSource::CondaPrefix), "Not a virtualenv (source: {}, prefix: {})", found.source(), - found.interpreter().base_prefix().display() + found.interpreter().sys_base_prefix().display() ); Ok(Self(Arc::new(PythonEnvironmentShared { - root: found.interpreter().prefix().to_path_buf(), + root: found.interpreter().sys_prefix().to_path_buf(), interpreter: found.into_interpreter(), }))) } @@ -91,7 +91,7 @@ impl PythonEnvironment { let found = find_interpreter(&request, system, &sources, cache)??; Ok(Self(Arc::new(PythonEnvironmentShared { - root: found.interpreter().prefix().to_path_buf(), + root: found.interpreter().sys_prefix().to_path_buf(), interpreter: found.into_interpreter(), }))) } @@ -111,7 +111,7 @@ impl PythonEnvironment { let interpreter = Interpreter::query(executable, cache)?; Ok(Self(Arc::new(PythonEnvironmentShared { - root: interpreter.prefix().to_path_buf(), + root: interpreter.sys_prefix().to_path_buf(), interpreter, }))) } @@ -127,7 +127,7 @@ impl PythonEnvironment { let request = InterpreterRequest::parse(request); let interpreter = find_interpreter(&request, system, &sources, cache)??.into_interpreter(); Ok(Self(Arc::new(PythonEnvironmentShared { - root: interpreter.prefix().to_path_buf(), + root: interpreter.sys_prefix().to_path_buf(), interpreter, }))) } @@ -136,7 +136,7 @@ impl PythonEnvironment { pub fn from_default_python(preview: PreviewMode, cache: &Cache) -> Result { let interpreter = find_default_interpreter(preview, cache)??.into_interpreter(); Ok(Self(Arc::new(PythonEnvironmentShared { - root: interpreter.prefix().to_path_buf(), + root: interpreter.sys_prefix().to_path_buf(), interpreter, }))) } @@ -144,7 +144,7 @@ impl PythonEnvironment { /// Create a [`PythonEnvironment`] from an existing [`Interpreter`]. pub fn from_interpreter(interpreter: Interpreter) -> Self { Self(Arc::new(PythonEnvironmentShared { - root: interpreter.prefix().to_path_buf(), + root: interpreter.sys_prefix().to_path_buf(), interpreter, })) } diff --git a/crates/uv-interpreter/src/interpreter.rs b/crates/uv-interpreter/src/interpreter.rs index 1ed5654d3..696ae3e26 100644 --- a/crates/uv-interpreter/src/interpreter.rs +++ b/crates/uv-interpreter/src/interpreter.rs @@ -29,10 +29,10 @@ pub struct Interpreter { markers: Box, scheme: Scheme, virtualenv: Scheme, - prefix: PathBuf, - base_exec_prefix: PathBuf, - base_prefix: PathBuf, - base_executable: Option, + sys_prefix: PathBuf, + sys_base_exec_prefix: PathBuf, + sys_base_prefix: PathBuf, + sys_base_executable: Option, sys_executable: PathBuf, sys_path: Vec, stdlib: PathBuf, @@ -58,12 +58,12 @@ impl Interpreter { markers: Box::new(info.markers), scheme: info.scheme, virtualenv: info.virtualenv, - prefix: info.prefix, - base_exec_prefix: info.base_exec_prefix, + sys_prefix: info.sys_prefix, + sys_base_exec_prefix: info.sys_base_exec_prefix, pointer_size: info.pointer_size, gil_disabled: info.gil_disabled, - base_prefix: info.base_prefix, - base_executable: info.base_executable, + sys_base_prefix: info.sys_base_prefix, + sys_base_executable: info.sys_base_executable, sys_executable: info.sys_executable, sys_path: info.sys_path, stdlib: info.stdlib, @@ -91,10 +91,10 @@ impl Interpreter { scripts: PathBuf::from("/dev/null"), data: PathBuf::from("/dev/null"), }, - prefix: PathBuf::from("/dev/null"), - base_exec_prefix: PathBuf::from("/dev/null"), - base_prefix: PathBuf::from("/dev/null"), - base_executable: None, + sys_prefix: PathBuf::from("/dev/null"), + sys_base_exec_prefix: PathBuf::from("/dev/null"), + sys_base_prefix: PathBuf::from("/dev/null"), + sys_base_executable: None, sys_executable: PathBuf::from("/dev/null"), sys_path: vec![], stdlib: PathBuf::from("/dev/null"), @@ -111,7 +111,7 @@ impl Interpreter { Self { scheme: virtualenv.scheme, sys_executable: virtualenv.executable, - prefix: virtualenv.root, + sys_prefix: virtualenv.root, target: None, ..self } @@ -158,7 +158,7 @@ impl Interpreter { /// See: pub fn is_virtualenv(&self) -> bool { // Maybe this should return `false` if it's a target? - self.prefix != self.base_prefix + self.sys_prefix != self.sys_base_prefix } /// Returns `true` if the environment is a `--target` environment. @@ -273,24 +273,24 @@ impl Interpreter { } /// Return the `sys.base_exec_prefix` path for this Python interpreter. - pub fn base_exec_prefix(&self) -> &Path { - &self.base_exec_prefix + pub fn sys_base_exec_prefix(&self) -> &Path { + &self.sys_base_exec_prefix } /// Return the `sys.base_prefix` path for this Python interpreter. - pub fn base_prefix(&self) -> &Path { - &self.base_prefix + pub fn sys_base_prefix(&self) -> &Path { + &self.sys_base_prefix } /// Return the `sys.prefix` path for this Python interpreter. - pub fn prefix(&self) -> &Path { - &self.prefix + pub fn sys_prefix(&self) -> &Path { + &self.sys_prefix } /// Return the `sys._base_executable` path for this Python interpreter. Some platforms do not /// have this attribute, so it may be `None`. - pub fn base_executable(&self) -> Option<&Path> { - self.base_executable.as_deref() + pub fn sys_base_executable(&self) -> Option<&Path> { + self.sys_base_executable.as_deref() } /// Return the `sys.executable` path for this Python interpreter. @@ -374,7 +374,7 @@ impl Interpreter { include: if self.is_virtualenv() { // If the interpreter is a venv, then the `include` directory has a different structure. // See: https://github.com/pypa/pip/blob/0ad4c94be74cc24874c6feb5bb3c2152c398a18e/src/pip/_internal/locations/_sysconfig.py#L172 - self.prefix.join("include").join("site").join(format!( + self.sys_prefix.join("include").join("site").join(format!( "python{}.{}", self.python_major(), self.python_minor() @@ -476,10 +476,10 @@ struct InterpreterInfo { markers: MarkerEnvironment, scheme: Scheme, virtualenv: Scheme, - prefix: PathBuf, - base_exec_prefix: PathBuf, - base_prefix: PathBuf, - base_executable: Option, + sys_prefix: PathBuf, + sys_base_exec_prefix: PathBuf, + sys_base_prefix: PathBuf, + sys_base_executable: Option, sys_executable: PathBuf, sys_path: Vec, stdlib: PathBuf, @@ -709,9 +709,9 @@ mod tests { "python_version": "3.12", "sys_platform": "linux" }, - "base_exec_prefix": "/home/ferris/.pyenv/versions/3.12.0", - "base_prefix": "/home/ferris/.pyenv/versions/3.12.0", - "prefix": "/home/ferris/projects/uv/.venv", + "sys_base_exec_prefix": "/home/ferris/.pyenv/versions/3.12.0", + "sys_base_prefix": "/home/ferris/.pyenv/versions/3.12.0", + "sys_prefix": "/home/ferris/projects/uv/.venv", "sys_executable": "/home/ferris/projects/uv/.venv/bin/python", "sys_path": [ "/home/ferris/.pyenv/versions/3.12.0/lib/python3.12/lib/python3.12", diff --git a/crates/uv-interpreter/src/lib.rs b/crates/uv-interpreter/src/lib.rs index be5131048..f63e438b4 100644 --- a/crates/uv-interpreter/src/lib.rs +++ b/crates/uv-interpreter/src/lib.rs @@ -192,9 +192,9 @@ mod tests { "python_version": "{VERSION}", "sys_platform": "linux" }, - "base_exec_prefix": "/home/ferris/.pyenv/versions/{FULL_VERSION}", - "base_prefix": "/home/ferris/.pyenv/versions/{FULL_VERSION}", - "prefix": "{PREFIX}", + "sys_base_exec_prefix": "/home/ferris/.pyenv/versions/{FULL_VERSION}", + "sys_base_prefix": "/home/ferris/.pyenv/versions/{FULL_VERSION}", + "sys_prefix": "{PREFIX}", "sys_executable": "{PATH}", "sys_path": [ "/home/ferris/.pyenv/versions/{FULL_VERSION}/lib/python{VERSION}/lib/python{VERSION}", diff --git a/crates/uv-virtualenv/src/bare.rs b/crates/uv-virtualenv/src/bare.rs index c90b53670..4172f3707 100644 --- a/crates/uv-virtualenv/src/bare.rs +++ b/crates/uv-virtualenv/src/bare.rs @@ -68,12 +68,12 @@ pub fn create_bare_venv( // already a "system Python". We canonicalize the path to ensure that it's real and // consistent, though we don't expect any symlinks on Windows. if interpreter.is_virtualenv() { - if let Some(base_executable) = interpreter.base_executable() { + if let Some(base_executable) = interpreter.sys_base_executable() { base_executable.to_path_buf() } else { // Assume `python.exe`, though the exact executable name is never used (below) on // Windows, only its parent directory. - interpreter.base_prefix().join("python.exe") + interpreter.sys_base_prefix().join("python.exe") } } else { uv_fs::canonicalize_executable(interpreter.sys_executable())? @@ -395,7 +395,7 @@ fn copy_launcher_windows( // `DLLs` subdirectory (if it exists). for directory in [ python_home, - interpreter.base_prefix().join("DLLs").as_path(), + interpreter.sys_base_prefix().join("DLLs").as_path(), ] { let entries = match fs_err::read_dir(directory) { Ok(read_dir) => read_dir,