Python 从另一个文件导入变量(importlib)?

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

我正在尝试从另一个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)
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

实际上你根本不应该使用星型导入-星型导入污染了你的命名空间,使你的代码无法维护(你不知道名称是从哪个模块导入的)并以意外的方式中断(当您在导入的模块中定义一个新名称时,该名称恰好与以前导入的另一个名称相关联)。