mirror of
https://github.com/python/cpython.git
synced 2024-12-24 01:05:10 +08:00
Move setup code from importlib.__init__ to
importlib._bootstrap._setup().
This commit is contained in:
parent
8490fab4ad
commit
354c26ecd6
@ -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 #########################################################
|
||||
|
@ -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)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user