diff options
author | Brett Cannon <brett@python.org> | 2012-02-08 23:50:22 (GMT) |
---|---|---|
committer | Brett Cannon <brett@python.org> | 2012-02-08 23:50:22 (GMT) |
commit | 354c26ecd6d1f6341bb1f65ea099d6952a29abd8 (patch) | |
tree | 3e5ca9ca9e590d5b8e0455200b3338740aedf1ee | |
parent | 8490fab4add07e4db261053fb420c2e411f82026 (diff) | |
download | cpython-354c26ecd6d1f6341bb1f65ea099d6952a29abd8.zip cpython-354c26ecd6d1f6341bb1f65ea099d6952a29abd8.tar.gz cpython-354c26ecd6d1f6341bb1f65ea099d6952a29abd8.tar.bz2 |
Move setup code from importlib.__init__ to
importlib._bootstrap._setup().
-rw-r--r-- | Lib/importlib/__init__.py | 30 | ||||
-rw-r--r-- | Lib/importlib/_bootstrap.py | 44 |
2 files changed, 47 insertions, 27 deletions
diff --git a/Lib/importlib/__init__.py b/Lib/importlib/__init__.py index ec6a965..940a9a2 100644 --- a/Lib/importlib/__init__.py +++ b/Lib/importlib/__init__.py @@ -22,9 +22,6 @@ __all__ = ['__import__', 'import_module'] from . import _bootstrap -import os -import re -import tokenize # To simplify imports in test code _w_long = _bootstrap._w_long @@ -32,31 +29,10 @@ _r_long = _bootstrap._r_long # Bootstrap help ##################################################### +import imp +import sys -# Required built-in modules. -try: - import posix as _os -except ImportError: - try: - import nt as _os - except ImportError: - try: - import os2 as _os - except ImportError: - raise ImportError('posix, nt, or os2 module required for importlib') -_bootstrap._os = _os -import imp, sys, marshal, _io -_bootstrap.imp = imp -_bootstrap.sys = sys -_bootstrap.marshal = marshal -_bootstrap._io = _io -import _warnings -_bootstrap._warnings = _warnings - - -from os import sep -# For os.path.join replacement; pull from Include/osdefs.h:SEP . -_bootstrap.path_sep = sep +_bootstrap._setup(sys, imp) # Public API ######################################################### diff --git a/Lib/importlib/_bootstrap.py b/Lib/importlib/_bootstrap.py index e2dd086..e5a9580 100644 --- a/Lib/importlib/_bootstrap.py +++ b/Lib/importlib/_bootstrap.py @@ -995,3 +995,47 @@ def __import__(name, globals={}, locals={}, fromlist=[], level=0): 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) + |