[英]How to use from x import y using importlib in Python
我想从脚本安装和导入一个包。 然后我想在该脚本中添加from x import y
和from x import *
。 (我实际上是在做一些功能) 。
我成功地安装和使用进口的subprocess
和importlib
。 但是我在from x import y
和from 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.