模块未找到错误:没有名为'tensorflow.contrib'的模块;'tensorflow'不是一个包。

3

我正在尝试开始学习Tensorflow,但是遇到了一个错误。

我在谷歌和这个网站上搜索,但没有找到答案。

让我解释一下。我当前正在使用我的计算机上的anaconda3。我使用'Anaconda Prompt'通过 pip install -q --upgrade tensorflow 安装了tensorflow。

它可以工作,但是当我运行这段代码(来自这里)时:

from __future__ import absolute_import, division, print_function

import os
import matplotlib.pyplot as plt

import tensorflow as tf
import tensorflow.contrib.eager as tfe

tf.enable_eager_execution()

print("TensorFlow version: {}".format(tf.VERSION))
print("Eager execution : {}".format(tf.executing_eagerly()))

I get the following error:

Traceback (most recent call last):
File "<ipython-input-11-9a561e7b074b>", line 1, in <module>
runfile('C:/Users/emile/Desktop/tensorflow.py', wdir='C:/Users/emile/Desktop')

File "C:\Users\emile\Anaconda3\lib\site-packages\spyder\utils\site\sitecustomize.py", line 705, in runfile
execfile(filename, namespace)

File "C:\Users\emile\Anaconda3\lib\site-packages\spyder\utils\site\sitecustomize.py", line 102, in execfile
exec(compile(f.read(), filename, 'exec'), namespace)

File "C:/Users/emile/Desktop/tensorflow.py", line 6, in <module>
import tensorflow as tf

File "C:\Users\emile\Desktop\tensorflow.py", line 7, in <module>
import tensorflow.contrib.eager as tfe

ModuleNotFoundError: No module named 'tensorflow.contrib'; 'tensorflow' is not a package

也许问题是由Anaconda引起的吗?
非常感谢。

4
建议将您的 Python 文件名重新命名为除了“tensorflow.py”以外的其他名称。 - Leo K
@LeoK谢谢!它起作用了。这是一个愚蠢的错误。 - Emile
这并不是一个愚蠢的错误。事实上,我会进一步编辑您的问题并回答它。如果真的是因为您自己的文件命名为“tensorflow.py”,那么这是一件相当不明显且难以一眼看出的事情 - 在除了您的设置之外的其他设置中,将文件命名为模块名称实际上是可以的,所以人们可能认为它会总是有效 - 但实际上并非如此。请问更改程序文件名是否解决了问题? - Leo K
是的,当我更改了文件名后,问题得到解决。 非常感谢! - Emile
1个回答

1
一个有趣的发现,我希望这能帮助那些在Anaconda或类似的集成环境下开发程序的人,其中你的程序不是直接从命令行运行的,例如像“python myprogram.py”这样。
问题可能是由于程序本身被命名为tensorflow.py所引起的。它在一个环境中运行,在这个环境中它不是作为“主”模块启动的,而是被另一个Python程序(在这种情况下是anaconda)加载。
当以这种方式加载Python程序时,解释器将其读取为一个模块,并将其放入其模块列表中(与文件名相同),因此现在您有了sys.modules [“tensorflow”],它指向已加载的用户程序(而不是安装的tensorflow模块)。当遇到'import tensorflow as tf'行时,Python会看到“tensorflow”已经被导入,只需执行tf = sys.modules [“tensorflow”],这是对您自己的tensorflow.py的引用(已经是一个问题,但您还没有到达tf.enable_eager_execution() - 如果您这样做,它将失败,因为您自己的 tensorflow.py没有这样的函数)。
现在,有趣的部分:
import tensorflow.contrib.eager as tfe

Python已经导入了'tensorflow'(您的模块!),因此它期望在与加载的tensorflow.py相同的目录中找到任何子模块。特别是,它期望该目录是一个Python包(其中有__init__.py),但显然不是,因此出现“...不是包”错误消息。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接