This commit is contained in:
lz_db
2026-10-16 22:48:30 +08:00
parent 190de72571
commit 0b36fd3383
3161 changed files with 12787 additions and 77274 deletions
@@ -3,11 +3,12 @@ Re-implementation of find_module and get_frozen_object
from the deprecated imp module.
"""
import importlib.machinery
import importlib.util
import os
import tokenize
from importlib.util import module_from_spec
import importlib.util
import importlib.machinery
from .py34compat import module_from_spec
PY_SOURCE = 1
PY_COMPILED = 2
@@ -19,8 +20,8 @@ PY_FROZEN = 7
def find_spec(module, paths):
finder = (
importlib.machinery.PathFinder().find_spec
if isinstance(paths, list)
else importlib.util.find_spec
if isinstance(paths, list) else
importlib.util.find_spec
)
return finder(module, paths)
@@ -29,26 +30,20 @@ def find_module(module, paths=None):
"""Just like 'imp.find_module()', but with package support"""
spec = find_spec(module, paths)
if spec is None:
raise ImportError(f"Can't find {module}")
raise ImportError("Can't find %s" % module)
if not spec.has_location and hasattr(spec, 'submodule_search_locations'):
spec = importlib.util.spec_from_loader('__init__.py', spec.loader)
kind = -1
file = None
static = isinstance(spec.loader, type)
if (
spec.origin == 'frozen'
or static
and issubclass(spec.loader, importlib.machinery.FrozenImporter)
):
if spec.origin == 'frozen' or static and issubclass(
spec.loader, importlib.machinery.FrozenImporter):
kind = PY_FROZEN
path = None # imp compabilty
suffix = mode = '' # imp compatibility
elif (
spec.origin == 'built-in'
or static
and issubclass(spec.loader, importlib.machinery.BuiltinImporter)
):
elif spec.origin == 'built-in' or static and issubclass(
spec.loader, importlib.machinery.BuiltinImporter):
kind = C_BUILTIN
path = None # imp compabilty
suffix = mode = '' # imp compatibility
@@ -59,13 +54,13 @@ def find_module(module, paths=None):
if suffix in importlib.machinery.SOURCE_SUFFIXES:
kind = PY_SOURCE
file = tokenize.open(path)
elif suffix in importlib.machinery.BYTECODE_SUFFIXES:
kind = PY_COMPILED
file = open(path, 'rb')
elif suffix in importlib.machinery.EXTENSION_SUFFIXES:
kind = C_EXTENSION
if kind in {PY_SOURCE, PY_COMPILED}:
file = open(path, mode)
else:
path = None
suffix = mode = ''
@@ -76,12 +71,12 @@ def find_module(module, paths=None):
def get_frozen_object(module, paths=None):
spec = find_spec(module, paths)
if not spec:
raise ImportError(f"Can't find {module}")
raise ImportError("Can't find %s" % module)
return spec.loader.get_code(module)
def get_module(module, paths, info):
spec = find_spec(module, paths)
if not spec:
raise ImportError(f"Can't find {module}")
raise ImportError("Can't find %s" % module)
return module_from_spec(spec)