在 Python 3.X 中动态导入模块

Big*_*ter 2 python python-import

我想从函数内部导入一个模块。例如从这个:

from directory.folder.module import module

def import():   
    app.register_blueprint(module)
Run Code Online (Sandbox Code Playgroud)

对此:

def import():   
    from directory.folder.module import module
Run Code Online (Sandbox Code Playgroud)

但是,没有对其进行硬编码。例如:

def import():
    m = "module"
    from directory.folder.m import m
Run Code Online (Sandbox Code Playgroud)

是否可以?提前致谢

Ste*_*eve 6

你想要importlib模块。

这是使用此模块的最简单方法。有很多不同的方法可以将模块调用的结果编织到环境中:

import importlib

math = importlib.import_module("math")

print(math.cos(math.pi))
Run Code Online (Sandbox Code Playgroud)

结果:

-1.0
Run Code Online (Sandbox Code Playgroud)

我经常使用这个库。我用它构建了一个完整的插件部署系统。所有各种部署的脚本都放在目录中,只有在配置文件中提到它们时才导入,而不是必须立即导入所有内容。

我觉得这个模块很酷的地方是它的文档最顶部的说明:

importlib 包的目的有两个。一种是在 Python 源代码中提供 import 语句(因此,通过扩展,import () 函数)的实现。

2.7 文档中的介绍也很有趣:

2.7 版中的新功能。

该模块是 Python 3.1 中功能更齐全的同名包中的一个小子集,该包提供了完整的导入实现。此处提供的内容有助于轻松从 2.7 过渡到 3.1。