我只是想理解为什么在下面的代码中对keras
之类的from tf import keras
的调用为什么不起作用,而我已经在第一行中将tensorflow
作为tf
导入了?
import tensorflow as tf
from tf import keras
错误:
ModuleNotFoundError:没有名为“ tf”的模块
但是,以下方法会起作用-
import tensorflow as tf
from tensorflow import keras
谢谢!
这是因为import
statement首先负责查找您的模块。它不会在当前名称空间中查找变量绑定,而别名绑定import
则存储在该空间中。也可以认为这是您的别名从不重命名目标模块:
tf
如果>>> import sys as s
>>> s.__name__
'sys'
已经是可用名称(就像任何代码已完成keras
),您仍然可以在导入的模块中找到该名称,因此可以执行类似import tensorflow.keras
的操作。
您可以将keras = tf.keras
视为import foo as bar
的组合,但它从未在本地名称空间中实际使用名称import foo ; bar = foo ; del foo
。
也有可能,但也很尴尬,也使用给定的别名查找子模块:
foo
方法1搜索所有当前导入的模块以找到import importlib
import sys
import http as h
# Module name lookup method 1:
name = [k for (k,v) in sys.modules.items() if v is h][0]
# Module name lookup method 2:
name = h.__name__
c = importlib.import_module('.client', name)
的模块,该模块会产生其导入的(不仅是本地的)名称,并从中使用相对导入。方法2也很可能满足要求,但在例如该条目已被删除。