为什么我无法使用别名导入?例如:"从 tf 导入 keras"



我只是想理解为什么像from tf import keras这样对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生成其导入(而不仅仅是本地(名称的模块,并使用该模块的相对导入。很可能方法2也足够了,但在例如该条目已被删除的情况下可能不够。

相关内容

  • 没有找到相关文章

最新更新