在Python3.X中动态导入模块
我想从函数内部导入一个模块。例如:在Python3.X中动态导入模块,python,python-import,Python,Python Import,我想从函数内部导入一个模块。例如: from directory.folder.module import module def import(): app.register_blueprint(module) 为此: def import(): from directory.folder.module import module 但是,没有硬编码。例如: def import(): m = "module" from dir
from directory.folder.module import module
def import():
app.register_blueprint(module)
为此:
def import():
from directory.folder.module import module
但是,没有硬编码。例如:
def import():
m = "module"
from directory.folder.m import m
可能吗?提前感谢否,python
import
不能以这种方式工作
例如,您尝试导入名为mod
的模块,因此运行import mod
。现在,解释器将在从以下来源收集的目录列表中搜索mod.py:
- 运行输入脚本的目录或当前目录(如果以交互方式运行解释器)
- PYTHONPATH环境变量(如果已设置)中包含的目录列表。(PYTHONPATH的格式取决于操作系统,但应模拟PATH环境变量。)
- 安装Python时配置的目录的安装相关列表
m='mod'
的变量并运行import m
,它将搜索m.py
而不是mod.py
但是一个非常危险的解决方法是使用exec()
(恶意输入警告)
如果您不介意外部模块,请尝试导入模块
下面是使用此模块最简单的方法。将模块调用的结果编织到环境中有很多不同的方法:
import importlib
math = importlib.import_module("math")
print(math.cos(math.pi))
结果:
-1.0
我经常使用这个图书馆。我用它构建了一个完整的插件部署系统。所有各种部署的脚本都被放到目录中,只有在配置文件中提到它们时才导入,而不是必须立即导入所有内容
我觉得这个模块很酷的一点是它文档顶部的内容:
importlib包的用途有两个。一个是在Python源代码中提供import语句的实现(因此,通过扩展,import()函数)
2.7文档中的简介也很有趣:
版本2.7中的新功能
这个模块是Python3.1中功能更全面的同名软件包中的一个子集,该软件包提供了导入的完整实现。这里提供的内容有助于简化从2.7到3.1的转换
您可以使用importlib模块以编程方式导入模块
import importlib
full_name = "package." + "module"
m = importlib.import_module(full_name)
我想知道这个用例是什么。你想要这个模块。@Vighneshurt我想用Flask注册蓝图,而不是每次都写下引用到蓝图模块的导入。嗯,我一直这么想。但这不是一个“非法”的答案吗?所以,我想你的答案是最安全的,但出于某种原因,它似乎不适用于我的具体情况。也许我做错了什么,可能是。我用瓦西夫的答案解决了这个问题。非常感谢你,我感谢你的努力,我希望你的答案仍然在顶部@BigMeister关于
m=getattr(importlib.import_module('directory.folder.m'),'m')如何?@superbrain super!这正是我想看到的。工作起来很有魅力D@BigMeister顺便说一句,这是Python2的旧答案,但显然仍然正确。
import importlib
full_name = "package." + "module"
m = importlib.import_module(full_name)