rusty_stack/installers/common/
managed_python_build_tools.rs1pub const MANAGED_PYTHON_PACKAGES: [(&str, &str); 11] = [
12 ("setuptools", "81.0.0"),
13 ("cmake", "4.4.4"),
14 ("scikit-build-core", "1.1.1"),
15 ("pathspec", "1.1.1"),
16 ("wheel", "0.48.0"),
17 ("ninja", "1.13.2"),
18 ("imageio", "2.38.1"),
19 ("diffusers", "0.33.1"),
20 ("remote-pdb", "2.1.0"),
21 ("ftfy", "6.3.1"),
22 ("wcwidth", "0.2.13"),
23];
24
25#[derive(Debug, Clone, PartialEq, Eq)]
27pub struct ManagedPythonCommand {
28 pub program: String,
30 pub args: Vec<String>,
32}
33
34pub fn managed_python_install_command(python_bin: impl Into<String>) -> ManagedPythonCommand {
41 let mut args = [
42 "-m",
43 "pip",
44 "install",
45 "--break-system-packages",
46 "--no-cache-dir",
47 "--no-deps",
48 ]
49 .into_iter()
50 .map(str::to_string)
51 .collect::<Vec<_>>();
52 args.extend(
53 MANAGED_PYTHON_PACKAGES
54 .iter()
55 .map(|(name, version)| format!("{name}=={version}")),
56 );
57
58 ManagedPythonCommand {
59 program: python_bin.into(),
60 args,
61 }
62}
63
64pub fn managed_python_verify_command(python_bin: impl Into<String>) -> ManagedPythonCommand {
66 let expected = MANAGED_PYTHON_PACKAGES
67 .iter()
68 .map(|(name, version)| format!(" {name:?}: {version:?},"))
69 .collect::<Vec<_>>()
70 .join("\n");
71 let script = format!(
72 r#"import importlib.metadata
73
74expected_versions = {{
75{expected}
76}}
77problems = []
78for package, expected_version in expected_versions.items():
79 try:
80 actual = importlib.metadata.version(package)
81 except importlib.metadata.PackageNotFoundError:
82 problems.append(f"{{package}}: missing (expected {{expected_version}})")
83 continue
84 if actual != expected_version:
85 problems.append(f"{{package}}: {{actual}} (expected {{expected_version}})")
86
87if problems:
88 raise SystemExit("Rusty managed Python package mismatch:\\n" + "\\n".join(problems))
89print("Rusty managed Python package versions verified")
90"#
91 );
92
93 ManagedPythonCommand {
94 program: python_bin.into(),
95 args: vec!["-c".to_string(), script],
96 }
97}
98
99#[cfg(test)]
100mod tests {
101 use super::{
102 managed_python_install_command, managed_python_verify_command, MANAGED_PYTHON_PACKAGES,
103 };
104
105 const EXPECTED_PACKAGES: [(&str, &str); 11] = [
106 ("setuptools", "81.0.0"),
107 ("cmake", "4.4.4"),
108 ("scikit-build-core", "1.1.1"),
109 ("pathspec", "1.1.1"),
110 ("wheel", "0.48.0"),
111 ("ninja", "1.13.2"),
112 ("imageio", "2.38.1"),
113 ("diffusers", "0.33.1"),
114 ("remote-pdb", "2.1.0"),
115 ("ftfy", "6.3.1"),
116 ("wcwidth", "0.2.13"),
117 ];
118
119 #[test]
120 fn install_uses_selected_python_and_exact_argument_order() {
121 let command = managed_python_install_command("/managed/python3");
122 let mut expected_args = vec![
123 "-m".to_string(),
124 "pip".to_string(),
125 "install".to_string(),
126 "--break-system-packages".to_string(),
127 "--no-cache-dir".to_string(),
128 "--no-deps".to_string(),
129 ];
130 expected_args.extend(
131 EXPECTED_PACKAGES
132 .iter()
133 .map(|(name, version)| format!("{name}=={version}")),
134 );
135
136 assert_eq!(command.program, "/managed/python3");
137 assert_eq!(command.args, expected_args);
138 }
139
140 #[test]
141 fn managed_packages_are_exact_and_resolver_safe() {
142 assert_eq!(MANAGED_PYTHON_PACKAGES, EXPECTED_PACKAGES);
143
144 let command = managed_python_install_command("selected-python");
145 let package_args = &command.args[6..];
146 assert_eq!(package_args.len(), EXPECTED_PACKAGES.len());
147 assert!(package_args.iter().all(|package| {
148 let mut pieces = package.split("==");
149 matches!(
150 (pieces.next(), pieces.next(), pieces.next()),
151 (Some(name), Some(version), None) if !name.is_empty() && !version.is_empty()
152 )
153 }));
154
155 let rendered = command.args.join(" ").to_ascii_lowercase();
156 for forbidden in [
157 "--upgrade",
158 "--index-url",
159 "--extra-index-url",
160 "nvidia",
161 "cuda",
162 "cu11",
163 "cu12",
164 ] {
165 assert!(
166 !rendered.contains(forbidden),
167 "managed install command contains forbidden token {forbidden}: {rendered}"
168 );
169 }
170 assert!(command.args.iter().any(|arg| arg == "--no-deps"));
171 }
172
173 #[test]
174 fn verification_is_read_only_and_checks_every_exact_version() {
175 let command = managed_python_verify_command("/managed/python3");
176 assert_eq!(command.program, "/managed/python3");
177 assert_eq!(command.args.first().map(String::as_str), Some("-c"));
178 assert_eq!(command.args.len(), 2);
179
180 let script = &command.args[1];
181 for (name, version) in EXPECTED_PACKAGES {
182 assert!(script.contains(&format!("{name:?}: {version:?}")));
183 }
184 for forbidden in ["subprocess", "pip install", "--upgrade", "--index-url"] {
185 assert!(
186 !script.to_ascii_lowercase().contains(forbidden),
187 "verification command must be read-only: found {forbidden}"
188 );
189 }
190 assert!(script.contains("importlib.metadata"));
191 assert!(script.contains("actual != expected_version"));
192 }
193}