繁体   English   中英

如何在 Python 中使用 importlib 使用 from x import y

[英]How to use from x import y using importlib in Python

我想从脚本安装和导入一个包。 然后我想在该脚本中添加from x import yfrom x import * (我实际上是在做一些功能)

我成功地安装和使用进口的subprocessimportlib 但是我在from x import yfrom x import *不知所措。 尝试了这些代码和其他一些代码。

globals()[package] = importlib.import_module('package','class')
globals()[package] = importlib.import_module('class','package')
globals()[package] = importlib.import_module('package','*')
globals()[package] = importlib.import_module('*','package')
importlib.import_module('gtts','gTTS')
importlib.import_module('gtts','*')

但他们没有工作。 节目:

NameError: name 'gTTS' is not defined
ModuleNotFoundError: No module named 'gTTS'

等等。

我不认为你可以直接加载方法,因为这个方法只是加载模块。 一个模块加载了import module ,我定义为“模块是一个包含 Python 定义和语句的文件。文件名是后缀 .py 的模块名称。”(检查文档)。 from x import y也执行import module但设置了另一个命名空间(请参阅此处的讨论)。 你可以做的是加载你的模块,然后手动设置你的命名空间,这就是from x import y syntax所做的。 您可以使用路径加载模块(在本例中,我想从read_csv加载read_csv ):

importlib.import_module(".io.parsers", "pandas")

(用print(inspect.getmodule(read_csv).__name__)检查路径)

评论中提到的jottbe 等解决方案也是可能的

与 mischva11 的答案相对应的确切语法如下:

tempmod = importlib.import_module("x_mymodule")
y = x_mymodule.y
del tempmod  # optionally delete the reference to the parent module

仅导入属性y从模块x_mymod ,类似于from x_mymodule import y 您可以通过在第二行代码中将其分配给您想要的任何名称来获得... as z功能。

我发现从命名空间中删除父模块很有用,当在子模块中使用它时,可以防止命名空间混乱。

我认为要获得import *函数,您必须遍历模块的属性并将它们分配给命名属性。 这里有两个提示可以帮助您实现目标:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM