发布
社区首页 >问答首页 >在Python3.x中动态导入模块

在Python3.x中动态导入模块
EN

Stack Overflow用户
提问于 2020-11-19 16:52:18
回答 3查看 5.6K关注 0票数 4

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

代码语言:javascript
代码运行次数:0
复制
from directory.folder.module import module

def import():   
    app.register_blueprint(module)

对此:

代码语言:javascript
代码运行次数:0
复制
def import():   
    from directory.folder.module import module

但是,没有硬编码。例如:

代码语言:javascript
代码运行次数:0
复制
def import():
    m = "module"
    from directory.folder.m import m

有可能吗?提前感谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-11-19 16:57:04

您需要进口库模块。

下面是使用这个模块的最简单的方法。将调用模块的结果编织到环境中有许多不同的方法:

代码语言:javascript
代码运行次数:0
复制
import importlib

math = importlib.import_module("math")

print(math.cos(math.pi))

结果:

代码语言:javascript
代码运行次数:0
复制
-1.0

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

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

导入库包的用途是双重的。一种是在Python源代码中提供导入语句的实现(因此,扩展为导入()函数)。

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

新版本2.7。 这个模块是Python3.1中更完整的同名包中可用的一个小子集,它提供了一个完整的导入实现。这里所提供的帮助有助于从2.7过渡到3.1。

票数 8
EN

Stack Overflow用户

发布于 2020-11-19 16:55:54

不,python import不是这样工作的。

例如,您尝试导入一个名为mod的模块,以便运行import mod。现在,解释器将在从以下来源收集的目录列表中搜索mod.py

  • 从输入脚本运行的目录,如果解释器是交互式运行的,则为当前目录。
  • 如果设置了PYTHONPATH环境变量中包含的目录列表。( PYTHONPATH的格式依赖于操作系统,但应该模仿PATH环境变量。)
  • 安装Python时配置的依赖于安装的目录列表。

因此,如果您有一个名为m='mod'的变量并运行import m,它将搜索m.py而不是mod.py

但是,一个愚蠢的危险的解决方案就是使用exec() (恶意输入的警告)。

代码语言:javascript
代码运行次数:0
复制
m = "module"
exec(f'from directory.folder.m import {m}')

如果您不介意外部模块,请尝试importlib

票数 2
EN

Stack Overflow用户

发布于 2020-11-19 16:59:22

可以使用导入库模块以编程方式导入模块。

代码语言:javascript
代码运行次数:0
复制
import importlib

full_name = "package." + "module"

m = importlib.import_module(full_name)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64916281

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档