Python 如何替换不推荐的imp.load\u dynamic的用法?
imp模块自3.4版起就已弃用,但基础架构的某些部分(例如)仍在使用,这导致较新Python版本出现弃用警告 在内部,imp.load\u动态使用: 但是,复制这段代码感觉很愚蠢,因为它必须为所有类型的项目进行改进 importlib的文件包括以下内容: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_
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]