@@ -6,8 +6,8 @@ use rand::Rng;
6
6
use crate :: bytecode:: CodeObject ;
7
7
use crate :: exceptions:: PyBaseExceptionRef ;
8
8
use crate :: obj:: objtraceback:: { PyTraceback , PyTracebackRef } ;
9
- use crate :: obj:: { objcode, objtype} ;
10
- use crate :: pyobject:: { ItemProtocol , PyResult , PyValue } ;
9
+ use crate :: obj:: { objcode, objlist , objtype} ;
10
+ use crate :: pyobject:: { ItemProtocol , PyResult , PyValue , TryFromObject } ;
11
11
use crate :: scope:: Scope ;
12
12
use crate :: version:: get_git_revision;
13
13
use crate :: vm:: { InitParameter , VirtualMachine } ;
@@ -37,6 +37,17 @@ pub fn init_importlib(vm: &VirtualMachine, initialize_parameter: InitParameter)
37
37
magic = rand:: thread_rng ( ) . gen :: < [ u8 ; 4 ] > ( ) . to_vec ( ) ;
38
38
}
39
39
vm. set_attr ( & importlib_external, "MAGIC_NUMBER" , vm. ctx . new_bytes ( magic) ) ?;
40
+ let zipimport_res = ( || -> PyResult < ( ) > {
41
+ let zipimport = vm. import ( "zipimport" , & [ ] , 0 ) ?;
42
+ let zipimporter = vm. get_attribute ( zipimport, "zipimporter" ) ?;
43
+ let path_hooks = vm. get_attribute ( vm. sys_module . clone ( ) , "path_hooks" ) ?;
44
+ let path_hooks = objlist:: PyListRef :: try_from_object ( vm, path_hooks) ?;
45
+ path_hooks. insert ( 0 , zipimporter) ;
46
+ Ok ( ( ) )
47
+ } ) ( ) ;
48
+ if let Err ( _) = zipimport_res {
49
+ eprintln ! ( "couldn't init zipimport" )
50
+ }
40
51
}
41
52
InitParameter :: NoInitialize => {
42
53
panic ! ( "Import library initialize should be InitializeInternal or InitializeExternal" ) ;
0 commit comments