如果我创建一个包含以下内容的test_folder.__init__
:
constant1 = 1
from test_folder import moduleVar1
然后从父目录中运行以下脚本:
import sys
from test_folder import constant1
print(constant1)
print(sys.modules)
sys.modules
告诉我test_folder.moduleVar1
已导入。sys.modules
的输出:'test_folder.moduleVar1': <module 'test_folder.moduleVar1' from 'C:...\test_folder\moduleVar1.py'>
我未指定要导入的模块为何显示为已导入?
最佳答案
您所看到的看起来正确。您不能仅导入一个变量。整个__init__
模块将与其他导入一起导入。请注意,sys.modules
并不表示已将某些内容导入当前名称空间,并且与当前名称空间无关。本质上,sys.modules
是Python使用的全局字典(或缓存),以确保如果您多次导入一个模块或引用其子模块,则不必重新加载该模块,并且不会从两个不同的地方加载相同的模块。
因此,如果将模块加载到您代码访问的任何模块或库中的任何位置,则此后它将保留在sys.modules
中。
因此,在您的主要例程中,当您说:
import sys
from test_folder import constant1
它正在加载您的
__init__
以访问constant1
,但是由于__init__
代码也导入了moduleVar1
,因此python会在sys.modules
中创建一个条目作为记录保持条目,即使它没有导入到您的计算机中也是如此。主模块,因此如果打印出sys.modules
,您将看到剩余条目。关于python - 访问导入到__init__的模块而无需直接引用它们,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34704132/