python - 为什么我不能使用别名导入?例如:`from tf import keras`
问题描述
我只是想了解为什么在下面的代码中调用keras
likefrom tf import keras
不起作用,而我已经tensorflow
在tf
第一行导入?
import tensorflow as tf
from tf import keras
错误:
ModuleNotFoundError:没有名为“tf”的模块
但是,以下将起作用 -
import tensorflow as tf
from tensorflow import keras
谢谢!
解决方案
这是因为该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
本地命名空间中的名称。
也可以使用给定的别名找到子模块,但非常尴尬:
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
生成其导入(不仅仅是本地)名称的 that ,并使用该模块的相对导入。很可能方法 2 也足够了,但在例如该条目已被删除的情况下可能就不行了。
推荐阅读
- google-sheets - 在顶部插入行时复制公式的脚本 - Google 表格
- eclipse - Eclipse CDT。从构建中排除总是灰色的(我当然不能包括它)
- python - 在python中,我怎样才能看到即将被垃圾收集的对象来自哪里?
- javascript - Javascript ES6 国际版。日期/时间格式
- html - 使列的高度调整为图像的响应高度(Flexbox)
- javascript - 如果javascript条件为真,如何调用php函数
- django - AbstractBaseUser 和 AbstractUser 之间的自定义用户模型有什么区别
- machine-learning - 不平衡数据的特征工程
- vba - 用于重置插入 Word 文档中的文本框的计数器的代码
- kubernetes - 具有惰性序列和 SSE 的有状态服务——如何通过容错进行分发?