【发布时间】:2017-12-11 11:53:27
【问题描述】:
我正在尝试从另一个 python 文件中导入变量。
a.py - 待导入
text="Hello, world"
print("imported")
b.py - 有效,但我不能有静态名称 a
from a import *
print(text)
c.py - 不工作
import importlib
X = "a"
try:
text = ""
i = importlib.import_module(X)
print(i)
print(text)
except ImportError as err:
print('Error:', err)
try:
text = ""
i = importlib.__import__(X , globals=True, locals=True, fromlist=[], level=0)
print(i)
print(text)
except ImportError as err:
print('Error:', err)
try:
text = ""
i = importlib.__import__(X , globals=True, locals=True, fromlist=[text], level=0)
print(i)
print(text)
except ImportError as err:
print('Error:', err)
输出是:
imported
<module 'a' from '/tmp/a.py'>
<module 'a' from '/tmp/a.py'>
<module 'a' from '/tmp/a.py'>
但是text 变量不起作用。
d.py - 不工作
X = "a"
from X import *
print(text)
是否可以将importlib 用作from MODULE import *?
【问题讨论】:
-
您实际上根本不应该使用星型导入 - 星型导入会污染您的命名空间,使您的代码无法维护(您不知道从哪个模块导入名称)并闯入意想不到的方式(当您在导入的模块中定义一个新名称时,恰好隐藏了另一个先前导入的名称)。
标签: python module python-importlib import-libraries