当来自终端的 运行 脚本时无法导入 tensorflow,即使 tensorflow 在 jupyter notebook 和终端中工作

Can't import tensorflow when run script from terminal, even though tensorflow works in jupyter notebook and terminal

TLDR:当我编写一个名为 toy_model.py 的小脚本并尝试使用

从命令行 运行 它时
py toy_model.py

我收到一条抱怨加载 tensorflow 的错误消息。

但是,我可以在许多其他设置中使用 import 和 use tensorflow 而没有任何问题,例如

我尝试了很多推荐的方案(在我使用的Anaconda Navigator虚拟环境下下载Spyder,从tensorflow 2.1.0切换到tensorflow 2.0.0,下载microsoftvisual studio),none已经成功了。

对于此问题的任何帮助或见解,我将不胜感激,我将在下面进行更详细的描述。


我使用 Anaconda Navigator 在 Python 中编写代码。在 Anaconda Navigator 中,我准备了一个名为 updated_tensorflow 的环境。我用Anaconda的包管理器下载了tensorflow 2.0.0和keras 2.3.1到这个环境中

我准备了一个名为test1.ipynb的jupyter笔记本,代码如下:

import numpy as np
import matplotlib.pyplot as plt
import tensorflow as tf
import keras
model = tf.keras.Sequential([
    tf.keras.layers.Dense(1, input_shape=(10,))])
model.compile(optimizer='adam',
          loss= 'sparse_categorical_crossentropy', #should be 'sparse_categorical_crossentropy' b/c one-hot encoded
          metrics=['accuracy'])
model.predict([[1,2,3,4,5,6,7,8,9,10], [-1,2,-3,4,-5,6,-7,8,-9,10]])

当我从环境updated_tensorflow运行test1.ipynb时,没有问题。

在终端中我进入环境 updated_tensorflow,然后在命令行中输入 python 开始使用 python。我输入了与 test1.ipynb 中相同的代码,没有遇到任何问题。

我创建了一个名为 toy_model.py 的文件,其中包含以下代码:

import numpy as np
import matplotlib.pyplot as plt
import tensorflow as tf
import keras
model = tf.keras.Sequential([
    tf.keras.layers.Dense(1, input_shape=(10,))])
model.compile(optimizer='adam',
          loss= 'sparse_categorical_crossentropy', #should be 'sparse_categorical_crossentropy' b/c one-hot encoded
          metrics=['accuracy'])

然后,我在与 toy_model1.py 相同的目录中创建了另一个 jupyter 笔记本,名称为 test2.ipynb,代码如下:

from toy_model1 import *
model.predict([[1,2,3,4,5,6,7,8,9,10], [-1,2,-3,4,-5,6,-7,8,-9,10]])

这个单元格运行没问题。

最后,在同一个目录中,我生成了一个名为 toy_model.py 的小文件,其中包含代码

import numpy as np
import matplotlib.pyplot as plt
import tensorflow as tf
import keras
model = tf.keras.Sequential([
    tf.keras.layers.Dense(1, input_shape=(10,))])
model.compile(optimizer='adam',
          loss= 'sparse_categorical_crossentropy', #should be 'sparse_categorical_crossentropy' b/c one-hot encoded
          metrics=['accuracy'])
model.predict([[1,2,3,4,5,6,7,8,9,10], [-1,2,-3,4,-5,6,-7,8,-9,10]])

然后在我的终端中,仍然在环境 updated_tensorflow 中,我移动到包含 toy_model.py 的目录并尝试 运行 它

py toy_model.py

我收到以下消息,表明我无法导入 tensorflow:

Traceback (most recent call last):
  File "C:\Users\me\Anaconda3\Anaconda3\lib\site-packages\tensorflow\python\pywrap_tensorflow.py", line 58, in <module>
    from tensorflow.python.pywrap_tensorflow_internal import *
  File "C:\Users\me\Anaconda3\Anaconda3\lib\site-packages\tensorflow\python\pywrap_tensorflow_internal.py", line 28, in <module>
    _pywrap_tensorflow_internal = swig_import_helper()
  File "C:\Users\me\Anaconda3\Anaconda3\lib\site-packages\tensorflow\python\pywrap_tensorflow_internal.py", line 24, in swig_import_helper
    _mod = imp.load_module('_pywrap_tensorflow_internal', fp, pathname, description)
  File "C:\Users\me\Anaconda3\Anaconda3\lib\imp.py", line 242, in load_module
    return load_dynamic(name, filename, file)
  File "C:\Users\me\Anaconda3\Anaconda3\lib\imp.py", line 342, in load_dynamic
    return _load(spec)
ImportError: DLL load failed: The specified module could not be found.

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "toy_model.py", line 3, in <module>
    import tensorflow as tf
  File "C:\Users\me\Anaconda3\Anaconda3\lib\site-packages\tensorflow\__init__.py", line 41, in <module>
    from tensorflow.python.tools import module_util as _module_util
  File "C:\Users\me\Anaconda3\Anaconda3\lib\site-packages\tensorflow\python\__init__.py", line 50, in <module>
    from tensorflow.python import pywrap_tensorflow
  File "C:\Users\me\Anaconda3\Anaconda3\lib\site-packages\tensorflow\python\pywrap_tensorflow.py", line 69, in <module>
    raise ImportError(msg)
ImportError: Traceback (most recent call last):
  File "C:\Users\me\Anaconda3\Anaconda3\lib\site-packages\tensorflow\python\pywrap_tensorflow.py", line 58, in <module>
    from tensorflow.python.pywrap_tensorflow_internal import *
  File "C:\Users\me\Anaconda3\Anaconda3\lib\site-packages\tensorflow\python\pywrap_tensorflow_internal.py", line 28, in <module>
    _pywrap_tensorflow_internal = swig_import_helper()
  File "C:\Users\me\Anaconda3\Anaconda3\lib\site-packages\tensorflow\python\pywrap_tensorflow_internal.py", line 24, in swig_import_helper
    _mod = imp.load_module('_pywrap_tensorflow_internal', fp, pathname, description)
  File "C:\Users\me\Anaconda3\Anaconda3\lib\imp.py", line 242, in load_module
    return load_dynamic(name, filename, file)
  File "C:\Users\me\Anaconda3\Anaconda3\lib\imp.py", line 342, in load_dynamic
    return _load(spec)
ImportError: DLL load failed: The specified module could not be found.


Failed to load the native TensorFlow runtime.

See https://www.tensorflow.org/install/errors

for some common reasons and solutions.  Include the entire stack trace
above this error message when asking for help.

我在尝试解决此问题时所遵循的一些建议包括:

如果能帮助我理解和修复我犯的任何错误,我将不胜感激。如果我可以从我的终端使用 运行 .py 文件而不是在 Jupyter 笔记本中专门使用 python 就好了!

即使提示错误消息的含义也会有所帮助:我什至没有正确理解 DLL 是什么。

尝试获取最新支持的 Microsoft Visual C++

听起来,通过调用 python,您没有获得具有 tensorflow 的特定 python 安装(或者该安装中的 tensorflow 已损坏)。默认情况下,调用 python 将为您提供系统默认值(它是环境路径中的第一个,因此是第一个命中)。

我建议您准确确定您的笔记本正在使用哪个 python 解释器,并通过说

来具体调用那个解释器
/path/to/notebook/interpreter/python toy_model.py