为什么不能使用别名导入?例如:`from tf import keras`

问题描述 投票:0回答:1

我只是想理解为什么在下面的代码中对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

谢谢!

python alias
1个回答
3
投票

这是因为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也很可能满足要求,但在例如该条目已被删除。

© www.soinside.com 2019 - 2024. All rights reserved.