为什么我不能使用别名导入?例如:`from tf import keras`
Why can't I import using alias? Ex: `from tf import keras`
我只是想了解为什么像 from tf import keras
这样的 keras
调用在下面的代码中不起作用,而我已经将 tensorflow
导入为 tf
在第一行?
import tensorflow as tf
from tf import keras
错误:
ModuleNotFoundError: No module named 'tf'
但是,以下方法可行 -
import tensorflow as tf
from tensorflow import keras
谢谢!
这是因为 import
statement 首先负责查找您的模块。它不会在您当前的名称 space 中查找变量绑定,这是存储别名 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
的组合,但它实际上从未在您的本地名称 space 中使用名称 foo
。
也可以使用给定的别名找到子模块,但很尴尬:
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)
方法 1 搜索所有当前导入的模块以找到 is h
的模块,它生成其导入的(不仅仅是本地的)名称,并使用该模块的相对导入。很可能方法 2 也足够了,但它可能不适用,例如该条目已被删除。
我只是想了解为什么像 from tf import keras
这样的 keras
调用在下面的代码中不起作用,而我已经将 tensorflow
导入为 tf
在第一行?
import tensorflow as tf
from tf import keras
错误:
ModuleNotFoundError: No module named 'tf'
但是,以下方法可行 -
import tensorflow as tf
from tensorflow import keras
谢谢!
这是因为 import
statement 首先负责查找您的模块。它不会在您当前的名称 space 中查找变量绑定,这是存储别名 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
的组合,但它实际上从未在您的本地名称 space 中使用名称 foo
。
也可以使用给定的别名找到子模块,但很尴尬:
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)
方法 1 搜索所有当前导入的模块以找到 is h
的模块,它生成其导入的(不仅仅是本地的)名称,并使用该模块的相对导入。很可能方法 2 也足够了,但它可能不适用,例如该条目已被删除。