Skip to content

Commit c3ea697

Browse files
authored
Merge pull request #1906 from RustPython/coolreader18/default-rustpythonpath
Have a default sys.path value pointing to <checkout>/Lib
2 parents 9a8f47b + 5f6c715 commit c3ea697

File tree

1 file changed

+24
-32
lines changed

1 file changed

+24
-32
lines changed

src/main.rs

Lines changed: 24 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -186,9 +186,19 @@ fn create_settings(matches: &ArgMatches) -> PySettings {
186186
// add the current directory to sys.path
187187
settings.path_list.push("".to_owned());
188188

189+
if let Some(paths) = option_env!("BUILDTIME_RUSTPYTHONPATH") {
190+
settings.path_list.extend(
191+
std::env::split_paths(paths).map(|path| path.into_os_string().into_string().unwrap()),
192+
)
193+
} else if option_env!("RUSTPYTHONPATH").is_none() {
194+
settings
195+
.path_list
196+
.push(concat!(env!("CARGO_MANIFEST_DIR"), "/Lib").to_owned());
197+
}
198+
189199
if !ignore_environment {
190-
settings.path_list.append(&mut get_paths("RUSTPYTHONPATH"));
191-
settings.path_list.append(&mut get_paths("PYTHONPATH"));
200+
settings.path_list.extend(get_paths("RUSTPYTHONPATH"));
201+
settings.path_list.extend(get_paths("PYTHONPATH"));
192202
}
193203

194204
// Now process command line flags:
@@ -268,18 +278,18 @@ fn get_env_var_value(name: &str) -> Result<u8, std::env::VarError> {
268278
}
269279

270280
/// Helper function to retrieve a sequence of paths from an environment variable.
271-
fn get_paths(env_variable_name: &str) -> Vec<String> {
272-
let paths = env::var_os(env_variable_name);
273-
match paths {
274-
Some(paths) => env::split_paths(&paths)
275-
.map(|path| {
276-
path.into_os_string()
277-
.into_string()
278-
.unwrap_or_else(|_| panic!("{} isn't valid unicode", env_variable_name))
279-
})
280-
.collect(),
281-
None => vec![],
282-
}
281+
fn get_paths(env_variable_name: &str) -> impl Iterator<Item = String> + '_ {
282+
env::var_os(env_variable_name)
283+
.into_iter()
284+
.flat_map(move |paths| {
285+
env::split_paths(&paths)
286+
.map(|path| {
287+
path.into_os_string()
288+
.into_string()
289+
.unwrap_or_else(|_| panic!("{} isn't valid unicode", env_variable_name))
290+
})
291+
.collect::<Vec<_>>()
292+
})
283293
}
284294

285295
#[cfg(feature = "flame-it")]
@@ -329,24 +339,6 @@ fn write_profile(matches: &ArgMatches) -> Result<(), Box<dyn std::error::Error>>
329339
}
330340

331341
fn run_rustpython(vm: &VirtualMachine, matches: &ArgMatches) -> PyResult<()> {
332-
if let Some(paths) = option_env!("BUILDTIME_RUSTPYTHONPATH") {
333-
let sys_path = vm.get_attribute(vm.sys_module.clone(), "path")?;
334-
for (i, path) in std::env::split_paths(paths).enumerate() {
335-
vm.call_method(
336-
&sys_path,
337-
"insert",
338-
vec![
339-
vm.ctx.new_int(i),
340-
vm.ctx.new_str(
341-
path.into_os_string()
342-
.into_string()
343-
.expect("Invalid UTF8 in BUILDTIME_RUSTPYTHONPATH"),
344-
),
345-
],
346-
)?;
347-
}
348-
}
349-
350342
let scope = vm.new_scope_with_builtins();
351343
let main_module = vm.new_module("__main__", scope.globals.clone());
352344

0 commit comments

Comments
 (0)