Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python3.X中动态导入模块_Python_Python Import - Fatal编程技术网

在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)