@@ -6,8 +6,8 @@ use rand::Rng;
66use crate :: bytecode:: CodeObject ;
77use crate :: exceptions:: PyBaseExceptionRef ;
88use 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 } ;
1111use crate :: scope:: Scope ;
1212use crate :: version:: get_git_revision;
1313use crate :: vm:: { InitParameter , VirtualMachine } ;
@@ -37,6 +37,17 @@ pub fn init_importlib(vm: &VirtualMachine, initialize_parameter: InitParameter)
3737 magic = rand:: thread_rng ( ) . gen :: < [ u8 ; 4 ] > ( ) . to_vec ( ) ;
3838 }
3939 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+ }
4051 }
4152 InitParameter :: NoInitialize => {
4253 panic ! ( "Import library initialize should be InitializeInternal or InitializeExternal" ) ;
0 commit comments