(vm: &VirtualMachine, importlib: PyObjectRef)
| 36 | |
| 37 | #[cfg(feature = "host_env")] |
| 38 | pub(crate) fn init_importlib_package(vm: &VirtualMachine, importlib: PyObjectRef) -> PyResult<()> { |
| 39 | use crate::{TryFromObject, builtins::PyListRef}; |
| 40 | |
| 41 | thread::enter_vm(vm, || { |
| 42 | flame_guard!("install_external"); |
| 43 | |
| 44 | // same deal as imports above |
| 45 | import_builtin(vm, crate::stdlib::os::MODULE_NAME)?; |
| 46 | #[cfg(windows)] |
| 47 | import_builtin(vm, "winreg")?; |
| 48 | import_builtin(vm, "_io")?; |
| 49 | import_builtin(vm, "marshal")?; |
| 50 | |
| 51 | let install_external = importlib.get_attr("_install_external_importers", vm)?; |
| 52 | install_external.call((), vm)?; |
| 53 | let zipimport_res = (|| -> PyResult<()> { |
| 54 | let zipimport = vm.import("zipimport", 0)?; |
| 55 | let zipimporter = zipimport.get_attr("zipimporter", vm)?; |
| 56 | let path_hooks = vm.sys_module.get_attr("path_hooks", vm)?; |
| 57 | let path_hooks = PyListRef::try_from_object(vm, path_hooks)?; |
| 58 | path_hooks.insert(0, zipimporter); |
| 59 | Ok(()) |
| 60 | })(); |
| 61 | if zipimport_res.is_err() { |
| 62 | warn!("couldn't init zipimport") |
| 63 | } |
| 64 | Ok(()) |
| 65 | }) |
| 66 | } |
| 67 | |
| 68 | pub fn make_frozen(vm: &VirtualMachine, name: &str) -> PyResult<PyRef<PyCode>> { |
| 69 | let frozen = vm.state.frozen.get(name).ok_or_else(|| { |
no test coverage detected