VSCode 中的 Tensorflow 导入失败

Tensorflow import in VSCode fails

我在 python 应用程序中导入 TensorFlow 时遇到问题,但是 只有

我 运行正在 VSCode 使用 macOS Big Sur 版本 11.1(M1 芯片组)。 我在虚拟环境中安装了 python 3.8.2 和 TensorFlow。

这是重现错误的步骤。来自VSCode之外的终端我运行

  1. source env/bin/activate激活虚拟环境

  2. python 启动 python。输出到终端(如预期):Python 3.8.2(默认,2020 年 11 月 4 日,21:23:28)[...]

  3. import tensorflow as tf

  4. print(tf.__version__) 这会将“2.4.0-rc0”打印到终端(正如预期的那样)。

现在,如果我在内置 VSCode 终端中重复完全相同的步骤 1 和 2,我会在 2 中得到完全相同的输出。但是,如果我 运行 命令 3 并尝试导入tensorflow,出现以下错误信息:

Traceback (most recent call last):
  File "/Volumes/SSD/Jan/Documents/Github/TradingBot/env/lib/python3.8/site-packages/tensorflow/python/pywrap_tensorflow.py", line 64, in <module>
    from tensorflow.python._pywrap_tensorflow_internal import *
ImportError: dlopen(/Volumes/SSD/Jan/Documents/Github/TradingBot/env/lib/python3.8/site-packages/tensorflow/python/_pywrap_tensorflow_internal.so, 6): no suitable image found.  Did find:
        /Volumes/SSD/Jan/Documents/Github/TradingBot/env/lib/python3.8/site-packages/tensorflow/python/_pywrap_tensorflow_internal.so: mach-o, but wrong architecture
        /Volumes/SSD/Jan/Documents/Github/TradingBot/env/lib/python3.8/site-packages/tensorflow/python/_pywrap_tensorflow_internal.so: mach-o, but wrong architecture

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Volumes/SSD/Jan/Documents/Github/TradingBot/env/lib/python3.8/site-packages/tensorflow/__init__.py", line 41, in <module>
    from tensorflow.python.tools import module_util as _module_util
  File "/Volumes/SSD/Jan/Documents/Github/TradingBot/env/lib/python3.8/site-packages/tensorflow/python/__init__.py", line 39, in <module>
    from tensorflow.python import pywrap_tensorflow as _pywrap_tensorflow
  File "/Volumes/SSD/Jan/Documents/Github/TradingBot/env/lib/python3.8/site-packages/tensorflow/python/pywrap_tensorflow.py", line 83, in <module>
    raise ImportError(msg)
ImportError: Traceback (most recent call last):
  File "/Volumes/SSD/Jan/Documents/Github/TradingBot/env/lib/python3.8/site-packages/tensorflow/python/pywrap_tensorflow.py", line 64, in <module>
    from tensorflow.python._pywrap_tensorflow_internal import *
ImportError: dlopen(/Volumes/SSD/Jan/Documents/Github/TradingBot/env/lib/python3.8/site-packages/tensorflow/python/_pywrap_tensorflow_internal.so, 6): no suitable image found.  Did find:
        /Volumes/SSD/Jan/Documents/Github/TradingBot/env/lib/python3.8/site-packages/tensorflow/python/_pywrap_tensorflow_internal.so: mach-o, but wrong architecture
        /Volumes/SSD/Jan/Documents/Github/TradingBot/env/lib/python3.8/site-packages/tensorflow/python/_pywrap_tensorflow_internal.so: mach-o, but wrong architecture


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.

VSCode 内的终端似乎没有使用与 VSCode 外的终端相同的站点包,但是,运行ning print(sys.path) 给出了同样的结果。

如果我尝试在 VSCode 中 运行 我的应用程序,则会发生同样的问题,而如果我从终端 运行 运行它,它就会工作。

非常感谢任何建议。

尝试Python 3.7。许多人抱怨 tensorflow 不能在 3.8 上工作,但在 3.7 上工作。另外,尝试从 google tensorflow 网页下载它。

在上面的评论中借用了 Jay Mody。我会首先检查您在 VS 代码中使用的 shell 是否与您在非 VS 代码终端中使用的 shell 相同。

尝试以下 shell 命令:

echo $SHELL

如果您得到相同的输出,那么我建议确保使用完全相同的 python 可执行文件。尝试在 shell 中输入:

which python

在VS Code中,打开集成终端,激活环境后,运行

pip show tensorflow

检查模块是否存在于当前环境中。如果没有,请重新安装。

我仍然不知道为什么这个问题首先存在,但我现在通过 mini-conda 的 ARM 版本安装 python 3.8 解决了这个问题。

步骤如下。

  1. 从这里下载 mini-conda https://conda-forge.org/blog/posts/2020-10-29-macos-arm64/ 并安装它。
  2. 安装完成后,新建Conda环境conda create --name python38 python=3.8。这将安装 python 3.8
  3. 的 ARM 版本
  4. 激活新环境conda activate python38
  5. 为您的项目创建一个新的虚拟环境。 python -m venv myEnv
  6. 下载ARM版tensorflow并解压https://github.com/apple/tensorflow_macos/releases
  7. 运行 用于安装 tensorflow 的包含脚本。 /Volumes/SSD/Jan/Downloads/tensorflow_macos/install_venv.sh --prompt 并将其指向您在步骤 4 中新创建的虚拟环境。

通过这些步骤,可以正确导入tensorflow。

更多参考资料让我找到了这个解决方案: https://github.com/apple/tensorflow_macos/issues/8 https://github.com/apple/tensorflow_macos/issues/3