importlib
大约 1 分钟
importlib
是的,importlib
是 Python 内置的标准库,提供了一系列函数用于动态导入模块,以及操作 Python 的导入系统。它允许你在运行时加载模块、重新加载模块或根据字符串路径导入模块。
常用功能
方法 | 作用 |
---|---|
importlib.import_module(name) | 以字符串的形式动态导入模块,相当于 import name |
importlib.reload(module) | 重新加载已导入的模块 |
importlib.util.find_spec(name) | 查找模块的 ModuleSpec ,获取模块的信息 |
importlib.util.module_from_spec(spec) | 通过 ModuleSpec 创建模块 |
importlib.util.spec_from_file_location(name, path) | 从指定文件路径创建 ModuleSpec |
importlib.machinery.SourceFileLoader(name, path).load_module() | 通过文件路径加载模块(Python 3.5+ 之后不推荐使用) |
示例
import_module()
动态导入模块
1. 使用 import importlib
# 动态导入 os 模块
os_module = importlib.import_module("os")
print(os_module.name) # 输出: os
print(os_module.getcwd()) # 调用 os.getcwd() 获取当前目录
相当于:
import os
print(os.getcwd())
reload()
重新加载模块
2. 使用 如果你在运行时修改了一个模块,可以使用 reload()
让 Python 重新加载该模块,而不必重启解释器:
import importlib
import mymodule # 假设你有一个 mymodule.py
# 修改 mymodule.py 代码后,重新加载
importlib.reload(mymodule)
find_spec()
查找模块
3. 通过 import importlib.util
spec = importlib.util.find_spec("json")
print(spec) # 输出 <ModuleSpec(name='json', loader=...)>
spec_from_file_location()
加载外部文件
4. 通过 import importlib.util
module_name = "custom_module"
module_path = "/path/to/custom_module.py"
spec = importlib.util.spec_from_file_location(module_name, module_path)
module = importlib.util.module_from_spec(spec)
spec.loader.exec_module(module)
print(module.some_function()) # 调用 custom_module.py 中的函数
总结
importlib
主要用于 动态导入 模块,可以根据字符串或路径加载模块。import_module()
是最常用的方法,相当于import
语句。reload()
允许你在运行时重新加载模块,适用于开发调试。find_spec()
、module_from_spec()
等方法可以用于更高级的模块操作,如加载外部 Python 文件。
你想在实际项目中使用 importlib
做什么?