summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrett Cannon <brett@python.org>2012-02-08 23:50:22 (GMT)
committerBrett Cannon <brett@python.org>2012-02-08 23:50:22 (GMT)
commit354c26ecd6d1f6341bb1f65ea099d6952a29abd8 (patch)
tree3e5ca9ca9e590d5b8e0455200b3338740aedf1ee
parent8490fab4add07e4db261053fb420c2e411f82026 (diff)
downloadcpython-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__.py30
-rw-r--r--Lib/importlib/_bootstrap.py44
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)
+