1*cda5da8dSAndroid Build Coastguard Worker"""This module provides the components needed to build your own __import__ 2*cda5da8dSAndroid Build Coastguard Workerfunction. Undocumented functions are obsolete. 3*cda5da8dSAndroid Build Coastguard Worker 4*cda5da8dSAndroid Build Coastguard WorkerIn most cases it is preferred you consider using the importlib module's 5*cda5da8dSAndroid Build Coastguard Workerfunctionality over this module. 6*cda5da8dSAndroid Build Coastguard Worker 7*cda5da8dSAndroid Build Coastguard Worker""" 8*cda5da8dSAndroid Build Coastguard Worker# (Probably) need to stay in _imp 9*cda5da8dSAndroid Build Coastguard Workerfrom _imp import (lock_held, acquire_lock, release_lock, 10*cda5da8dSAndroid Build Coastguard Worker get_frozen_object, is_frozen_package, 11*cda5da8dSAndroid Build Coastguard Worker init_frozen, is_builtin, is_frozen, 12*cda5da8dSAndroid Build Coastguard Worker _fix_co_filename, _frozen_module_names) 13*cda5da8dSAndroid Build Coastguard Workertry: 14*cda5da8dSAndroid Build Coastguard Worker from _imp import create_dynamic 15*cda5da8dSAndroid Build Coastguard Workerexcept ImportError: 16*cda5da8dSAndroid Build Coastguard Worker # Platform doesn't support dynamic loading. 17*cda5da8dSAndroid Build Coastguard Worker create_dynamic = None 18*cda5da8dSAndroid Build Coastguard Worker 19*cda5da8dSAndroid Build Coastguard Workerfrom importlib._bootstrap import _ERR_MSG, _exec, _load, _builtin_from_name 20*cda5da8dSAndroid Build Coastguard Workerfrom importlib._bootstrap_external import SourcelessFileLoader 21*cda5da8dSAndroid Build Coastguard Worker 22*cda5da8dSAndroid Build Coastguard Workerfrom importlib import machinery 23*cda5da8dSAndroid Build Coastguard Workerfrom importlib import util 24*cda5da8dSAndroid Build Coastguard Workerimport importlib 25*cda5da8dSAndroid Build Coastguard Workerimport os 26*cda5da8dSAndroid Build Coastguard Workerimport sys 27*cda5da8dSAndroid Build Coastguard Workerimport tokenize 28*cda5da8dSAndroid Build Coastguard Workerimport types 29*cda5da8dSAndroid Build Coastguard Workerimport warnings 30*cda5da8dSAndroid Build Coastguard Worker 31*cda5da8dSAndroid Build Coastguard Workerwarnings.warn("the imp module is deprecated in favour of importlib and slated " 32*cda5da8dSAndroid Build Coastguard Worker "for removal in Python 3.12; " 33*cda5da8dSAndroid Build Coastguard Worker "see the module's documentation for alternative uses", 34*cda5da8dSAndroid Build Coastguard Worker DeprecationWarning, stacklevel=2) 35*cda5da8dSAndroid Build Coastguard Worker 36*cda5da8dSAndroid Build Coastguard Worker# DEPRECATED 37*cda5da8dSAndroid Build Coastguard WorkerSEARCH_ERROR = 0 38*cda5da8dSAndroid Build Coastguard WorkerPY_SOURCE = 1 39*cda5da8dSAndroid Build Coastguard WorkerPY_COMPILED = 2 40*cda5da8dSAndroid Build Coastguard WorkerC_EXTENSION = 3 41*cda5da8dSAndroid Build Coastguard WorkerPY_RESOURCE = 4 42*cda5da8dSAndroid Build Coastguard WorkerPKG_DIRECTORY = 5 43*cda5da8dSAndroid Build Coastguard WorkerC_BUILTIN = 6 44*cda5da8dSAndroid Build Coastguard WorkerPY_FROZEN = 7 45*cda5da8dSAndroid Build Coastguard WorkerPY_CODERESOURCE = 8 46*cda5da8dSAndroid Build Coastguard WorkerIMP_HOOK = 9 47*cda5da8dSAndroid Build Coastguard Worker 48*cda5da8dSAndroid Build Coastguard Worker 49*cda5da8dSAndroid Build Coastguard Workerdef new_module(name): 50*cda5da8dSAndroid Build Coastguard Worker """**DEPRECATED** 51*cda5da8dSAndroid Build Coastguard Worker 52*cda5da8dSAndroid Build Coastguard Worker Create a new module. 53*cda5da8dSAndroid Build Coastguard Worker 54*cda5da8dSAndroid Build Coastguard Worker The module is not entered into sys.modules. 55*cda5da8dSAndroid Build Coastguard Worker 56*cda5da8dSAndroid Build Coastguard Worker """ 57*cda5da8dSAndroid Build Coastguard Worker return types.ModuleType(name) 58*cda5da8dSAndroid Build Coastguard Worker 59*cda5da8dSAndroid Build Coastguard Worker 60*cda5da8dSAndroid Build Coastguard Workerdef get_magic(): 61*cda5da8dSAndroid Build Coastguard Worker """**DEPRECATED** 62*cda5da8dSAndroid Build Coastguard Worker 63*cda5da8dSAndroid Build Coastguard Worker Return the magic number for .pyc files. 64*cda5da8dSAndroid Build Coastguard Worker """ 65*cda5da8dSAndroid Build Coastguard Worker return util.MAGIC_NUMBER 66*cda5da8dSAndroid Build Coastguard Worker 67*cda5da8dSAndroid Build Coastguard Worker 68*cda5da8dSAndroid Build Coastguard Workerdef get_tag(): 69*cda5da8dSAndroid Build Coastguard Worker """Return the magic tag for .pyc files.""" 70*cda5da8dSAndroid Build Coastguard Worker return sys.implementation.cache_tag 71*cda5da8dSAndroid Build Coastguard Worker 72*cda5da8dSAndroid Build Coastguard Worker 73*cda5da8dSAndroid Build Coastguard Workerdef cache_from_source(path, debug_override=None): 74*cda5da8dSAndroid Build Coastguard Worker """**DEPRECATED** 75*cda5da8dSAndroid Build Coastguard Worker 76*cda5da8dSAndroid Build Coastguard Worker Given the path to a .py file, return the path to its .pyc file. 77*cda5da8dSAndroid Build Coastguard Worker 78*cda5da8dSAndroid Build Coastguard Worker The .py file does not need to exist; this simply returns the path to the 79*cda5da8dSAndroid Build Coastguard Worker .pyc file calculated as if the .py file were imported. 80*cda5da8dSAndroid Build Coastguard Worker 81*cda5da8dSAndroid Build Coastguard Worker If debug_override is not None, then it must be a boolean and is used in 82*cda5da8dSAndroid Build Coastguard Worker place of sys.flags.optimize. 83*cda5da8dSAndroid Build Coastguard Worker 84*cda5da8dSAndroid Build Coastguard Worker If sys.implementation.cache_tag is None then NotImplementedError is raised. 85*cda5da8dSAndroid Build Coastguard Worker 86*cda5da8dSAndroid Build Coastguard Worker """ 87*cda5da8dSAndroid Build Coastguard Worker with warnings.catch_warnings(): 88*cda5da8dSAndroid Build Coastguard Worker warnings.simplefilter('ignore') 89*cda5da8dSAndroid Build Coastguard Worker return util.cache_from_source(path, debug_override) 90*cda5da8dSAndroid Build Coastguard Worker 91*cda5da8dSAndroid Build Coastguard Worker 92*cda5da8dSAndroid Build Coastguard Workerdef source_from_cache(path): 93*cda5da8dSAndroid Build Coastguard Worker """**DEPRECATED** 94*cda5da8dSAndroid Build Coastguard Worker 95*cda5da8dSAndroid Build Coastguard Worker Given the path to a .pyc. file, return the path to its .py file. 96*cda5da8dSAndroid Build Coastguard Worker 97*cda5da8dSAndroid Build Coastguard Worker The .pyc file does not need to exist; this simply returns the path to 98*cda5da8dSAndroid Build Coastguard Worker the .py file calculated to correspond to the .pyc file. If path does 99*cda5da8dSAndroid Build Coastguard Worker not conform to PEP 3147 format, ValueError will be raised. If 100*cda5da8dSAndroid Build Coastguard Worker sys.implementation.cache_tag is None then NotImplementedError is raised. 101*cda5da8dSAndroid Build Coastguard Worker 102*cda5da8dSAndroid Build Coastguard Worker """ 103*cda5da8dSAndroid Build Coastguard Worker return util.source_from_cache(path) 104*cda5da8dSAndroid Build Coastguard Worker 105*cda5da8dSAndroid Build Coastguard Worker 106*cda5da8dSAndroid Build Coastguard Workerdef get_suffixes(): 107*cda5da8dSAndroid Build Coastguard Worker """**DEPRECATED**""" 108*cda5da8dSAndroid Build Coastguard Worker extensions = [(s, 'rb', C_EXTENSION) for s in machinery.EXTENSION_SUFFIXES] 109*cda5da8dSAndroid Build Coastguard Worker source = [(s, 'r', PY_SOURCE) for s in machinery.SOURCE_SUFFIXES] 110*cda5da8dSAndroid Build Coastguard Worker bytecode = [(s, 'rb', PY_COMPILED) for s in machinery.BYTECODE_SUFFIXES] 111*cda5da8dSAndroid Build Coastguard Worker 112*cda5da8dSAndroid Build Coastguard Worker return extensions + source + bytecode 113*cda5da8dSAndroid Build Coastguard Worker 114*cda5da8dSAndroid Build Coastguard Worker 115*cda5da8dSAndroid Build Coastguard Workerclass NullImporter: 116*cda5da8dSAndroid Build Coastguard Worker 117*cda5da8dSAndroid Build Coastguard Worker """**DEPRECATED** 118*cda5da8dSAndroid Build Coastguard Worker 119*cda5da8dSAndroid Build Coastguard Worker Null import object. 120*cda5da8dSAndroid Build Coastguard Worker 121*cda5da8dSAndroid Build Coastguard Worker """ 122*cda5da8dSAndroid Build Coastguard Worker 123*cda5da8dSAndroid Build Coastguard Worker def __init__(self, path): 124*cda5da8dSAndroid Build Coastguard Worker if path == '': 125*cda5da8dSAndroid Build Coastguard Worker raise ImportError('empty pathname', path='') 126*cda5da8dSAndroid Build Coastguard Worker elif os.path.isdir(path): 127*cda5da8dSAndroid Build Coastguard Worker raise ImportError('existing directory', path=path) 128*cda5da8dSAndroid Build Coastguard Worker 129*cda5da8dSAndroid Build Coastguard Worker def find_module(self, fullname): 130*cda5da8dSAndroid Build Coastguard Worker """Always returns None.""" 131*cda5da8dSAndroid Build Coastguard Worker return None 132*cda5da8dSAndroid Build Coastguard Worker 133*cda5da8dSAndroid Build Coastguard Worker 134*cda5da8dSAndroid Build Coastguard Workerclass _HackedGetData: 135*cda5da8dSAndroid Build Coastguard Worker 136*cda5da8dSAndroid Build Coastguard Worker """Compatibility support for 'file' arguments of various load_*() 137*cda5da8dSAndroid Build Coastguard Worker functions.""" 138*cda5da8dSAndroid Build Coastguard Worker 139*cda5da8dSAndroid Build Coastguard Worker def __init__(self, fullname, path, file=None): 140*cda5da8dSAndroid Build Coastguard Worker super().__init__(fullname, path) 141*cda5da8dSAndroid Build Coastguard Worker self.file = file 142*cda5da8dSAndroid Build Coastguard Worker 143*cda5da8dSAndroid Build Coastguard Worker def get_data(self, path): 144*cda5da8dSAndroid Build Coastguard Worker """Gross hack to contort loader to deal w/ load_*()'s bad API.""" 145*cda5da8dSAndroid Build Coastguard Worker if self.file and path == self.path: 146*cda5da8dSAndroid Build Coastguard Worker # The contract of get_data() requires us to return bytes. Reopen the 147*cda5da8dSAndroid Build Coastguard Worker # file in binary mode if needed. 148*cda5da8dSAndroid Build Coastguard Worker if not self.file.closed: 149*cda5da8dSAndroid Build Coastguard Worker file = self.file 150*cda5da8dSAndroid Build Coastguard Worker if 'b' not in file.mode: 151*cda5da8dSAndroid Build Coastguard Worker file.close() 152*cda5da8dSAndroid Build Coastguard Worker if self.file.closed: 153*cda5da8dSAndroid Build Coastguard Worker self.file = file = open(self.path, 'rb') 154*cda5da8dSAndroid Build Coastguard Worker 155*cda5da8dSAndroid Build Coastguard Worker with file: 156*cda5da8dSAndroid Build Coastguard Worker return file.read() 157*cda5da8dSAndroid Build Coastguard Worker else: 158*cda5da8dSAndroid Build Coastguard Worker return super().get_data(path) 159*cda5da8dSAndroid Build Coastguard Worker 160*cda5da8dSAndroid Build Coastguard Worker 161*cda5da8dSAndroid Build Coastguard Workerclass _LoadSourceCompatibility(_HackedGetData, machinery.SourceFileLoader): 162*cda5da8dSAndroid Build Coastguard Worker 163*cda5da8dSAndroid Build Coastguard Worker """Compatibility support for implementing load_source().""" 164*cda5da8dSAndroid Build Coastguard Worker 165*cda5da8dSAndroid Build Coastguard Worker 166*cda5da8dSAndroid Build Coastguard Workerdef load_source(name, pathname, file=None): 167*cda5da8dSAndroid Build Coastguard Worker loader = _LoadSourceCompatibility(name, pathname, file) 168*cda5da8dSAndroid Build Coastguard Worker spec = util.spec_from_file_location(name, pathname, loader=loader) 169*cda5da8dSAndroid Build Coastguard Worker if name in sys.modules: 170*cda5da8dSAndroid Build Coastguard Worker module = _exec(spec, sys.modules[name]) 171*cda5da8dSAndroid Build Coastguard Worker else: 172*cda5da8dSAndroid Build Coastguard Worker module = _load(spec) 173*cda5da8dSAndroid Build Coastguard Worker # To allow reloading to potentially work, use a non-hacked loader which 174*cda5da8dSAndroid Build Coastguard Worker # won't rely on a now-closed file object. 175*cda5da8dSAndroid Build Coastguard Worker module.__loader__ = machinery.SourceFileLoader(name, pathname) 176*cda5da8dSAndroid Build Coastguard Worker module.__spec__.loader = module.__loader__ 177*cda5da8dSAndroid Build Coastguard Worker return module 178*cda5da8dSAndroid Build Coastguard Worker 179*cda5da8dSAndroid Build Coastguard Worker 180*cda5da8dSAndroid Build Coastguard Workerclass _LoadCompiledCompatibility(_HackedGetData, SourcelessFileLoader): 181*cda5da8dSAndroid Build Coastguard Worker 182*cda5da8dSAndroid Build Coastguard Worker """Compatibility support for implementing load_compiled().""" 183*cda5da8dSAndroid Build Coastguard Worker 184*cda5da8dSAndroid Build Coastguard Worker 185*cda5da8dSAndroid Build Coastguard Workerdef load_compiled(name, pathname, file=None): 186*cda5da8dSAndroid Build Coastguard Worker """**DEPRECATED**""" 187*cda5da8dSAndroid Build Coastguard Worker loader = _LoadCompiledCompatibility(name, pathname, file) 188*cda5da8dSAndroid Build Coastguard Worker spec = util.spec_from_file_location(name, pathname, loader=loader) 189*cda5da8dSAndroid Build Coastguard Worker if name in sys.modules: 190*cda5da8dSAndroid Build Coastguard Worker module = _exec(spec, sys.modules[name]) 191*cda5da8dSAndroid Build Coastguard Worker else: 192*cda5da8dSAndroid Build Coastguard Worker module = _load(spec) 193*cda5da8dSAndroid Build Coastguard Worker # To allow reloading to potentially work, use a non-hacked loader which 194*cda5da8dSAndroid Build Coastguard Worker # won't rely on a now-closed file object. 195*cda5da8dSAndroid Build Coastguard Worker module.__loader__ = SourcelessFileLoader(name, pathname) 196*cda5da8dSAndroid Build Coastguard Worker module.__spec__.loader = module.__loader__ 197*cda5da8dSAndroid Build Coastguard Worker return module 198*cda5da8dSAndroid Build Coastguard Worker 199*cda5da8dSAndroid Build Coastguard Worker 200*cda5da8dSAndroid Build Coastguard Workerdef load_package(name, path): 201*cda5da8dSAndroid Build Coastguard Worker """**DEPRECATED**""" 202*cda5da8dSAndroid Build Coastguard Worker if os.path.isdir(path): 203*cda5da8dSAndroid Build Coastguard Worker extensions = (machinery.SOURCE_SUFFIXES[:] + 204*cda5da8dSAndroid Build Coastguard Worker machinery.BYTECODE_SUFFIXES[:]) 205*cda5da8dSAndroid Build Coastguard Worker for extension in extensions: 206*cda5da8dSAndroid Build Coastguard Worker init_path = os.path.join(path, '__init__' + extension) 207*cda5da8dSAndroid Build Coastguard Worker if os.path.exists(init_path): 208*cda5da8dSAndroid Build Coastguard Worker path = init_path 209*cda5da8dSAndroid Build Coastguard Worker break 210*cda5da8dSAndroid Build Coastguard Worker else: 211*cda5da8dSAndroid Build Coastguard Worker raise ValueError('{!r} is not a package'.format(path)) 212*cda5da8dSAndroid Build Coastguard Worker spec = util.spec_from_file_location(name, path, 213*cda5da8dSAndroid Build Coastguard Worker submodule_search_locations=[]) 214*cda5da8dSAndroid Build Coastguard Worker if name in sys.modules: 215*cda5da8dSAndroid Build Coastguard Worker return _exec(spec, sys.modules[name]) 216*cda5da8dSAndroid Build Coastguard Worker else: 217*cda5da8dSAndroid Build Coastguard Worker return _load(spec) 218*cda5da8dSAndroid Build Coastguard Worker 219*cda5da8dSAndroid Build Coastguard Worker 220*cda5da8dSAndroid Build Coastguard Workerdef load_module(name, file, filename, details): 221*cda5da8dSAndroid Build Coastguard Worker """**DEPRECATED** 222*cda5da8dSAndroid Build Coastguard Worker 223*cda5da8dSAndroid Build Coastguard Worker Load a module, given information returned by find_module(). 224*cda5da8dSAndroid Build Coastguard Worker 225*cda5da8dSAndroid Build Coastguard Worker The module name must include the full package name, if any. 226*cda5da8dSAndroid Build Coastguard Worker 227*cda5da8dSAndroid Build Coastguard Worker """ 228*cda5da8dSAndroid Build Coastguard Worker suffix, mode, type_ = details 229*cda5da8dSAndroid Build Coastguard Worker if mode and (not mode.startswith('r') or '+' in mode): 230*cda5da8dSAndroid Build Coastguard Worker raise ValueError('invalid file open mode {!r}'.format(mode)) 231*cda5da8dSAndroid Build Coastguard Worker elif file is None and type_ in {PY_SOURCE, PY_COMPILED}: 232*cda5da8dSAndroid Build Coastguard Worker msg = 'file object required for import (type code {})'.format(type_) 233*cda5da8dSAndroid Build Coastguard Worker raise ValueError(msg) 234*cda5da8dSAndroid Build Coastguard Worker elif type_ == PY_SOURCE: 235*cda5da8dSAndroid Build Coastguard Worker return load_source(name, filename, file) 236*cda5da8dSAndroid Build Coastguard Worker elif type_ == PY_COMPILED: 237*cda5da8dSAndroid Build Coastguard Worker return load_compiled(name, filename, file) 238*cda5da8dSAndroid Build Coastguard Worker elif type_ == C_EXTENSION and load_dynamic is not None: 239*cda5da8dSAndroid Build Coastguard Worker if file is None: 240*cda5da8dSAndroid Build Coastguard Worker with open(filename, 'rb') as opened_file: 241*cda5da8dSAndroid Build Coastguard Worker return load_dynamic(name, filename, opened_file) 242*cda5da8dSAndroid Build Coastguard Worker else: 243*cda5da8dSAndroid Build Coastguard Worker return load_dynamic(name, filename, file) 244*cda5da8dSAndroid Build Coastguard Worker elif type_ == PKG_DIRECTORY: 245*cda5da8dSAndroid Build Coastguard Worker return load_package(name, filename) 246*cda5da8dSAndroid Build Coastguard Worker elif type_ == C_BUILTIN: 247*cda5da8dSAndroid Build Coastguard Worker return init_builtin(name) 248*cda5da8dSAndroid Build Coastguard Worker elif type_ == PY_FROZEN: 249*cda5da8dSAndroid Build Coastguard Worker return init_frozen(name) 250*cda5da8dSAndroid Build Coastguard Worker else: 251*cda5da8dSAndroid Build Coastguard Worker msg = "Don't know how to import {} (type code {})".format(name, type_) 252*cda5da8dSAndroid Build Coastguard Worker raise ImportError(msg, name=name) 253*cda5da8dSAndroid Build Coastguard Worker 254*cda5da8dSAndroid Build Coastguard Worker 255*cda5da8dSAndroid Build Coastguard Workerdef find_module(name, path=None): 256*cda5da8dSAndroid Build Coastguard Worker """**DEPRECATED** 257*cda5da8dSAndroid Build Coastguard Worker 258*cda5da8dSAndroid Build Coastguard Worker Search for a module. 259*cda5da8dSAndroid Build Coastguard Worker 260*cda5da8dSAndroid Build Coastguard Worker If path is omitted or None, search for a built-in, frozen or special 261*cda5da8dSAndroid Build Coastguard Worker module and continue search in sys.path. The module name cannot 262*cda5da8dSAndroid Build Coastguard Worker contain '.'; to search for a submodule of a package, pass the 263*cda5da8dSAndroid Build Coastguard Worker submodule name and the package's __path__. 264*cda5da8dSAndroid Build Coastguard Worker 265*cda5da8dSAndroid Build Coastguard Worker """ 266*cda5da8dSAndroid Build Coastguard Worker if not isinstance(name, str): 267*cda5da8dSAndroid Build Coastguard Worker raise TypeError("'name' must be a str, not {}".format(type(name))) 268*cda5da8dSAndroid Build Coastguard Worker elif not isinstance(path, (type(None), list)): 269*cda5da8dSAndroid Build Coastguard Worker # Backwards-compatibility 270*cda5da8dSAndroid Build Coastguard Worker raise RuntimeError("'path' must be None or a list, " 271*cda5da8dSAndroid Build Coastguard Worker "not {}".format(type(path))) 272*cda5da8dSAndroid Build Coastguard Worker 273*cda5da8dSAndroid Build Coastguard Worker if path is None: 274*cda5da8dSAndroid Build Coastguard Worker if is_builtin(name): 275*cda5da8dSAndroid Build Coastguard Worker return None, None, ('', '', C_BUILTIN) 276*cda5da8dSAndroid Build Coastguard Worker elif is_frozen(name): 277*cda5da8dSAndroid Build Coastguard Worker return None, None, ('', '', PY_FROZEN) 278*cda5da8dSAndroid Build Coastguard Worker else: 279*cda5da8dSAndroid Build Coastguard Worker path = sys.path 280*cda5da8dSAndroid Build Coastguard Worker 281*cda5da8dSAndroid Build Coastguard Worker for entry in path: 282*cda5da8dSAndroid Build Coastguard Worker package_directory = os.path.join(entry, name) 283*cda5da8dSAndroid Build Coastguard Worker for suffix in ['.py', machinery.BYTECODE_SUFFIXES[0]]: 284*cda5da8dSAndroid Build Coastguard Worker package_file_name = '__init__' + suffix 285*cda5da8dSAndroid Build Coastguard Worker file_path = os.path.join(package_directory, package_file_name) 286*cda5da8dSAndroid Build Coastguard Worker if os.path.isfile(file_path): 287*cda5da8dSAndroid Build Coastguard Worker return None, package_directory, ('', '', PKG_DIRECTORY) 288*cda5da8dSAndroid Build Coastguard Worker for suffix, mode, type_ in get_suffixes(): 289*cda5da8dSAndroid Build Coastguard Worker file_name = name + suffix 290*cda5da8dSAndroid Build Coastguard Worker file_path = os.path.join(entry, file_name) 291*cda5da8dSAndroid Build Coastguard Worker if os.path.isfile(file_path): 292*cda5da8dSAndroid Build Coastguard Worker break 293*cda5da8dSAndroid Build Coastguard Worker else: 294*cda5da8dSAndroid Build Coastguard Worker continue 295*cda5da8dSAndroid Build Coastguard Worker break # Break out of outer loop when breaking out of inner loop. 296*cda5da8dSAndroid Build Coastguard Worker else: 297*cda5da8dSAndroid Build Coastguard Worker raise ImportError(_ERR_MSG.format(name), name=name) 298*cda5da8dSAndroid Build Coastguard Worker 299*cda5da8dSAndroid Build Coastguard Worker encoding = None 300*cda5da8dSAndroid Build Coastguard Worker if 'b' not in mode: 301*cda5da8dSAndroid Build Coastguard Worker with open(file_path, 'rb') as file: 302*cda5da8dSAndroid Build Coastguard Worker encoding = tokenize.detect_encoding(file.readline)[0] 303*cda5da8dSAndroid Build Coastguard Worker file = open(file_path, mode, encoding=encoding) 304*cda5da8dSAndroid Build Coastguard Worker return file, file_path, (suffix, mode, type_) 305*cda5da8dSAndroid Build Coastguard Worker 306*cda5da8dSAndroid Build Coastguard Worker 307*cda5da8dSAndroid Build Coastguard Workerdef reload(module): 308*cda5da8dSAndroid Build Coastguard Worker """**DEPRECATED** 309*cda5da8dSAndroid Build Coastguard Worker 310*cda5da8dSAndroid Build Coastguard Worker Reload the module and return it. 311*cda5da8dSAndroid Build Coastguard Worker 312*cda5da8dSAndroid Build Coastguard Worker The module must have been successfully imported before. 313*cda5da8dSAndroid Build Coastguard Worker 314*cda5da8dSAndroid Build Coastguard Worker """ 315*cda5da8dSAndroid Build Coastguard Worker return importlib.reload(module) 316*cda5da8dSAndroid Build Coastguard Worker 317*cda5da8dSAndroid Build Coastguard Worker 318*cda5da8dSAndroid Build Coastguard Workerdef init_builtin(name): 319*cda5da8dSAndroid Build Coastguard Worker """**DEPRECATED** 320*cda5da8dSAndroid Build Coastguard Worker 321*cda5da8dSAndroid Build Coastguard Worker Load and return a built-in module by name, or None is such module doesn't 322*cda5da8dSAndroid Build Coastguard Worker exist 323*cda5da8dSAndroid Build Coastguard Worker """ 324*cda5da8dSAndroid Build Coastguard Worker try: 325*cda5da8dSAndroid Build Coastguard Worker return _builtin_from_name(name) 326*cda5da8dSAndroid Build Coastguard Worker except ImportError: 327*cda5da8dSAndroid Build Coastguard Worker return None 328*cda5da8dSAndroid Build Coastguard Worker 329*cda5da8dSAndroid Build Coastguard Worker 330*cda5da8dSAndroid Build Coastguard Workerif create_dynamic: 331*cda5da8dSAndroid Build Coastguard Worker def load_dynamic(name, path, file=None): 332*cda5da8dSAndroid Build Coastguard Worker """**DEPRECATED** 333*cda5da8dSAndroid Build Coastguard Worker 334*cda5da8dSAndroid Build Coastguard Worker Load an extension module. 335*cda5da8dSAndroid Build Coastguard Worker """ 336*cda5da8dSAndroid Build Coastguard Worker import importlib.machinery 337*cda5da8dSAndroid Build Coastguard Worker loader = importlib.machinery.ExtensionFileLoader(name, path) 338*cda5da8dSAndroid Build Coastguard Worker 339*cda5da8dSAndroid Build Coastguard Worker # Issue #24748: Skip the sys.modules check in _load_module_shim; 340*cda5da8dSAndroid Build Coastguard Worker # always load new extension 341*cda5da8dSAndroid Build Coastguard Worker spec = importlib.machinery.ModuleSpec( 342*cda5da8dSAndroid Build Coastguard Worker name=name, loader=loader, origin=path) 343*cda5da8dSAndroid Build Coastguard Worker return _load(spec) 344*cda5da8dSAndroid Build Coastguard Worker 345*cda5da8dSAndroid Build Coastguard Workerelse: 346*cda5da8dSAndroid Build Coastguard Worker load_dynamic = None 347