Rat*_*san 5 python pip package python-import python-3.x
我想从脚本安装和导入一个包。然后我想在那个脚本中添加from x import y和from x import *。(我实际上是在做一些功能)。
我使用subprocessand成功安装和导入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','*')
Run Code Online (Sandbox Code Playgroud)
但他们没有工作。节目:
NameError: name 'gTTS' is not defined
ModuleNotFoundError: No module named 'gTTS'
Run Code Online (Sandbox Code Playgroud)
等等。
我不认为你可以直接加载方法,因为这个方法只是加载模块。加载模块并import module定义为“模块是包含Python定义和语句的文件。文件名是附加后缀.py的模块名称。”(检查文档)。from x import y也执行import module但设置另一个名称空间(请参阅此处的讨论)。您可以做的是加载模块,然后手动设置名称空间,这就是它的from x import y syntax作用。您可以使用路径加载模块(在本例中我想read_csv从 pandas 加载):
importlib.import_module(".io.parsers", "pandas")
Run Code Online (Sandbox Code Playgroud)
(用 检查路径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
Run Code Online (Sandbox Code Playgroud)
y仅从模块导入属性x_mymod,类似于from x_mymodule import y. ... as z您可以通过在第二行代码中将其分配给您想要的任何名称来获取该功能。
我发现在子模块中使用父模块时,从命名空间中删除父模块很有用,可以防止命名空间混乱。
我认为要获得该import *函数,您必须迭代模块的属性并将它们分配给命名属性。这里有两个提示可以帮助您实现这一目标:
| 归档时间: |
|
| 查看次数: |
1713 次 |
| 最近记录: |