From 5f6c7152b39162926571272caf79f9eaff049564 Mon Sep 17 00:00:00 2001 From: Noah <33094578+coolreader18@users.noreply.github.com> Date: Mon, 4 May 2020 11:38:58 -0500 Subject: [PATCH] Have a default sys.path value pointing to /Lib --- src/main.rs | 56 +++++++++++++++++++++++------------------------------ 1 file changed, 24 insertions(+), 32 deletions(-) diff --git a/src/main.rs b/src/main.rs index c4ac3b38ef..604b891b46 100644 --- a/src/main.rs +++ b/src/main.rs @@ -186,9 +186,19 @@ fn create_settings(matches: &ArgMatches) -> PySettings { // add the current directory to sys.path settings.path_list.push("".to_owned()); + if let Some(paths) = option_env!("BUILDTIME_RUSTPYTHONPATH") { + settings.path_list.extend( + std::env::split_paths(paths).map(|path| path.into_os_string().into_string().unwrap()), + ) + } else if option_env!("RUSTPYTHONPATH").is_none() { + settings + .path_list + .push(concat!(env!("CARGO_MANIFEST_DIR"), "/Lib").to_owned()); + } + if !ignore_environment { - settings.path_list.append(&mut get_paths("RUSTPYTHONPATH")); - settings.path_list.append(&mut get_paths("PYTHONPATH")); + settings.path_list.extend(get_paths("RUSTPYTHONPATH")); + settings.path_list.extend(get_paths("PYTHONPATH")); } // Now process command line flags: @@ -268,18 +278,18 @@ fn get_env_var_value(name: &str) -> Result { } /// Helper function to retrieve a sequence of paths from an environment variable. -fn get_paths(env_variable_name: &str) -> Vec { - let paths = env::var_os(env_variable_name); - match paths { - Some(paths) => env::split_paths(&paths) - .map(|path| { - path.into_os_string() - .into_string() - .unwrap_or_else(|_| panic!("{} isn't valid unicode", env_variable_name)) - }) - .collect(), - None => vec![], - } +fn get_paths(env_variable_name: &str) -> impl Iterator + '_ { + env::var_os(env_variable_name) + .into_iter() + .flat_map(move |paths| { + env::split_paths(&paths) + .map(|path| { + path.into_os_string() + .into_string() + .unwrap_or_else(|_| panic!("{} isn't valid unicode", env_variable_name)) + }) + .collect::>() + }) } #[cfg(feature = "flame-it")] @@ -329,24 +339,6 @@ fn write_profile(matches: &ArgMatches) -> Result<(), Box> } fn run_rustpython(vm: &VirtualMachine, matches: &ArgMatches) -> PyResult<()> { - if let Some(paths) = option_env!("BUILDTIME_RUSTPYTHONPATH") { - let sys_path = vm.get_attribute(vm.sys_module.clone(), "path")?; - for (i, path) in std::env::split_paths(paths).enumerate() { - vm.call_method( - &sys_path, - "insert", - vec![ - vm.ctx.new_int(i), - vm.ctx.new_str( - path.into_os_string() - .into_string() - .expect("Invalid UTF8 in BUILDTIME_RUSTPYTHONPATH"), - ), - ], - )?; - } - } - let scope = vm.new_scope_with_builtins(); let main_module = vm.new_module("__main__", scope.globals.clone());