@@ -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
331341fn 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