Mercurial > cpython-lru_cache-weakref
diff Lib/importlib/_bootstrap.py @ 74839:322e6f818cd2
Move setup code from importlib.__init__ to
importlib._bootstrap._setup().
| author | Brett Cannon <brett@python.org> |
|---|---|
| date | Wed, 08 Feb 2012 18:50:22 -0500 |
| parents | 7a6fd7cd16e9 |
| children | 7c487140981c |
line wrap: on
line diff
--- a/Lib/importlib/_bootstrap.py Wed Feb 08 18:44:14 2012 -0500 +++ b/Lib/importlib/_bootstrap.py Wed Feb 08 18:50:22 2012 -0500 @@ -995,3 +995,47 @@ except ImportError: pass return module + + +def _setup(sys_module, imp_module): + """Setup importlib by importing needed built-in modules and injecting them + into the global namespace. + + As sys is needed for sys.modules access and imp is needed to load built-in + modules those two modules must be explicitly passed in. + + """ + global imp, sys + imp = imp_module + sys = sys_module + + for module in (imp, sys): + if not hasattr(module, '__loader__'): + module.__loader__ = BuiltinImporter + + self_module = sys.modules[__name__] + for builtin_name in ('_io', '_warnings', 'builtins', 'marshal'): + if builtin_name not in sys.modules: + builtin_module = BuiltinImporter.load_module(builtin_name) + else: + builtin_module = sys.modules[builtin_name] + setattr(self_module, builtin_name, builtin_module) + + for builtin_os, path_sep in [('posix', '/'), ('nt', '\\'), ('os2', '\\')]: + if builtin_os in sys.modules: + os_module = sys.modules[builtin_os] + break + else: + try: + os_module = BuiltinImporter.load_module(builtin_os) + # TODO: rip out os2 code after 3.3 is released as per PEP 11 + if builtin_os == 'os2' and 'EMX GCC' in sys.version: + path_sep = '/' + break + except ImportError: + continue + else: + raise ImportError('importlib requires posix or nt') + setattr(self_module, '_os', os_module) + setattr(self_module, 'path_sep', path_sep) +
