Python 从另一个文件导入变量(importlib)?
我正在尝试从另一个python文件导入变量Python 从另一个文件导入变量(importlib)?,python,module,python-importlib,import-libraries,Python,Module,Python Importlib,Import Libraries,我正在尝试从另一个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 Imp
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)
X = "a"
from X import *
print(text)
乌普图特是:
imported
<module 'a' from '/tmp/a.py'>
<module 'a' from '/tmp/a.py'>
<module 'a' from '/tmp/a.py'>
可以使用importlib
作为从模块导入*
?星导入(“从xxx导入*”)是不好的做法(pep08积极反对),并且只能作为Python shell中方便的快捷方式,用于快速检查/实验/调试
因此,您的b.py
代码应该导入a
模块并使用限定路径ie:
# b.py
import a
print(a.text)
或者(最坏情况下)从a
明确导入所需名称:
# b.py
from a import text
print(text)
请注意,第二个解决方案将不会像预期的那样工作,因为在这种情况下,text
将成为b
中的模块本地名称,因此如果a.text
在其他地方反弹(重新分配),b.text
将不会受到影响。但可变的全局变量无论如何都是邪恶的
现在假设您做了正确的事情并选择了第一个解决方案(模块导入+限定路径),那么使用importlib
的“翻译”将是:
import importlib
module_name = "a"
module = importlib.import_module(module_name)
print(module.text)
FWIW,您尝试使用
importlib.\uu import\uu()
的所有尝试都是错误的-globals
应该是一个dict
,而fromlist
应该是一个名称(字符串)列表。但是使用importlib的理由很少。实际上,用importlib.import\u()
代替importlib.import\u module
。实际上你根本不应该使用星型导入-星型导入污染了你的命名空间,使你的代码无法维护(你不知道名称是从哪个模块导入的)并以意外的方式中断(当您在导入的模块中定义一个新名称时,该名称恰好与以前导入的另一个名称相关联)。