mirror of
https://github.com/python/cpython.git
synced 2024-12-24 09:15:04 +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
|
from . import _bootstrap
|
||||||
|
|
||||||
import os
|
|
||||||
import re
|
|
||||||
import tokenize
|
|
||||||
|
|
||||||
# To simplify imports in test code
|
# To simplify imports in test code
|
||||||
_w_long = _bootstrap._w_long
|
_w_long = _bootstrap._w_long
|
||||||
@ -32,31 +29,10 @@ _r_long = _bootstrap._r_long
|
|||||||
|
|
||||||
|
|
||||||
# Bootstrap help #####################################################
|
# Bootstrap help #####################################################
|
||||||
|
import imp
|
||||||
|
import sys
|
||||||
|
|
||||||
# Required built-in modules.
|
_bootstrap._setup(sys, imp)
|
||||||
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
|
|
||||||
|
|
||||||
|
|
||||||
# Public API #########################################################
|
# Public API #########################################################
|
||||||
|
@ -995,3 +995,47 @@ def __import__(name, globals={}, locals={}, fromlist=[], level=0):
|
|||||||
except ImportError:
|
except ImportError:
|
||||||
pass
|
pass
|
||||||
return module
|
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