@@ -186,9 +186,19 @@ fn create_settings(matches: &ArgMatches) -> PySettings {
186
186
// add the current directory to sys.path
187
187
settings. path_list . push ( "" . to_owned ( ) ) ;
188
188
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
+
189
199
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" ) ) ;
192
202
}
193
203
194
204
// Now process command line flags:
@@ -268,18 +278,18 @@ fn get_env_var_value(name: &str) -> Result<u8, std::env::VarError> {
268
278
}
269
279
270
280
/// 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
+ } )
283
293
}
284
294
285
295
#[ cfg( feature = "flame-it" ) ]
@@ -329,24 +339,6 @@ fn write_profile(matches: &ArgMatches) -> Result<(), Box<dyn std::error::Error>>
329
339
}
330
340
331
341
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
-
350
342
let scope = vm. new_scope_with_builtins ( ) ;
351
343
let main_module = vm. new_module ( "__main__" , scope. globals . clone ( ) ) ;
352
344
0 commit comments