Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何替换不推荐的imp.load\u dynamic的用法?_Python_Python 3.x_Python Importlib - Fatal编程技术网

Python 如何替换不推荐的imp.load\u dynamic的用法?

Python 如何替换不推荐的imp.load\u dynamic的用法?,python,python-3.x,python-importlib,Python,Python 3.x,Python Importlib,imp模块自3.4版起就已弃用,但基础架构的某些部分(例如)仍在使用,这导致较新Python版本出现弃用警告 在内部,imp.load\u动态使用: 但是,复制这段代码感觉很愚蠢,因为它必须为所有类型的项目进行改进 importlib的文件包括以下内容: import importlib.util import sys def alternative_load_dynamic(name, path, file=None): spec = importlib.util.spec_from_

imp模块自3.4版起就已弃用,但基础架构的某些部分(例如)仍在使用,这导致较新Python版本出现弃用警告

在内部,imp.load\u动态使用:

但是,复制这段代码感觉很愚蠢,因为它必须为所有类型的项目进行改进

importlib的文件包括以下内容:

import importlib.util
import sys
def alternative_load_dynamic(name, path, file=None):
    spec = importlib.util.spec_from_file_location(name, path)
    module = importlib.util.module_from_spec(spec)
    sys.modules[name] = module
    spec.loader.exec_module(module)
    return sys.modules[name]
虽然与第一个实现(即加载)相比,它具有不使用私有API的优势,并且获得了正确的核心行为,但它并不是imp.load\u dynamic的替代品:

这个替代方案可以提供更多功能:它还可以加载纯python模块*.py或*.pyc。 这种替代方法可以减少:它只能在Windows上加载以*.so或*.pyd结尾的动态模块,但不能加载以foo.my_结尾的动态模块。 还有哪些选项可以替代imp.load\u dynamic?

导入lib.import\u模块如何

它还注意到:

如果要动态导入在解释器开始执行后创建的模块(例如,创建了Python源文件),则可能需要调用invalidate_缓存,以便导入系统注意到新模块

导入lib.import\u模块怎么样

它还注意到:

如果要动态导入在解释器开始执行后创建的模块(例如,创建了Python源文件),则可能需要调用invalidate_缓存,以便导入系统注意到新模块

导入模块正在执行一些不同的操作。load_dynamic的一个重要部分是它绕过了sys.path,文件是显式给出的,还有其他区别,因此load_dynamic不能被import_module替代。import_module正在做一些不同的事情。load_dynamic的一个重要部分是它绕过了sys.path,文件是显式给出的,还有其他区别,因此load_dynamic不能被import_模块替代
import importlib.util
import sys
def alternative_load_dynamic(name, path, file=None):
    spec = importlib.util.spec_from_file_location(name, path)
    module = importlib.util.module_from_spec(spec)
    sys.modules[name] = module
    spec.loader.exec_module(module)
    return sys.modules[name]