导入 TensorFlow 失败并出现语法错误,抱怨名为“async”的参数

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

我检查了我的 pip3 和 python3 版本:

  (tensorflow) MacBook-Pro-de-Hector-2:tensorflow hectoresteban$ pip3 -V
    pip 10.0.1 from /Users/hectoresteban/.virtualenvs/tensorflow/lib/python3.7/site-packages/pip-10.0.1-py3.7.egg/pip (python 3.7)

(tensorflow) MacBook-Pro-de-Hector-2:tensorflow hectoresteban$ python3 -V
Python 3.7.0

在我当前使用的虚拟环境中我做了:

pip3 install --upgrade https://storage.googleapis.com/tensorflow/mac/cpu/tensorflow-1.9.0-py3-none-any.whl

作为标准方式

pip3 install tensorflow
输出以下消息:

could not find a version that satisfies the requirement tensorflow (from versions: )

使用第一种方法安装后解释:

(tensorflow) MacBook-Pro-de-Hector-2:tensorflow hectoresteban$ python3
>>> import tensorflow
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Users/hectoresteban/.virtualenvs/tensorflow/lib/python3.7/site-packages/tensorflow/__init__.py", line 22, in <module>
    from tensorflow.python import pywrap_tensorflow  # pylint: disable=unused-import
  File "/Users/hectoresteban/.virtualenvs/tensorflow/lib/python3.7/site-packages/tensorflow/python/__init__.py", line 49, in <module>
    from tensorflow.python import pywrap_tensorflow
  File "/Users/hectoresteban/.virtualenvs/tensorflow/lib/python3.7/site-packages/tensorflow/python/pywrap_tensorflow.py", line 58, in <module>
    from tensorflow.python.pywrap_tensorflow_internal import *
  File "/Users/hectoresteban/.virtualenvs/tensorflow/lib/python3.7/site-packages/tensorflow/python/pywrap_tensorflow_internal.py", line 114
    def TFE_ContextOptionsSetAsync(arg1, async):
                                             ^
SyntaxError: invalid syntax

问题是什么?我可以下载其他软件包,例如 numpy,但不能下载 Tensorflow。 (MacOS 10.13.4)

python macos tensorflow pip python-3.7
3个回答
12
投票

更新:1.13版本引入了Python 3.7支持

1.13 版本的最新候选版本带来了 Python 3.7 支持,特别是预编译的 CPU 轮也可用于 MacOS 10.11 及更高版本(链接到 1.13.1)。像往常一样安装:

$ pip install tensorflow>=1.13

原始答案(已过时)

tensorflow
目前不支持Python 3.7。原因是:

  • tensorflow
    使用
    async
    作为函数参数名称,并且
    async
    await
    成为 Python 3.7 中的保留关键字(正如 @phd 在 this comment 中指出的那样) - 这就是为什么你要导入错误;

  • Python 3.7 更改了 PyUnicode_AsUTF8AndSize

     使用的 C API 中 
    tensorflow
     函数的返回类型:

    3.7 版更改:返回类型现在是

    const char *
    而不是
    char *

这意味着必须先解决这两个问题,然后才能为 Python 3.7 和 Linux/MacOS 构建和发布

tensorflow
。您可以在此处跟踪当前状态:issue #20517

因此,如果您需要继续使用

tensorflow
,解决方案是避免使用 Python 3.7。暂时坚持使用 Python 3.6。

如果您愿意从源代码构建

tensorflow
建议使用一个补丁来解决这两个问题。如果您想尝试一下,请按照官方文档中的从源安装 TensorFlow 教程,唯一的区别在于开头:

  1. 克隆存储库

    $ git clone https://github.com/tensorflow/tensorflow
    
  2. 将补丁内容复制到文件中,例如

    tf.patch

  3. 应用补丁:

    $ git apply tf.patch
    
  4. 继续本教程的其余部分。

另请注意,您必须构建最新的

protobuf
,因为最近添加了对 Python 3.7 的支持,但不包含在任何已发布的版本中。编辑
tensorflow/contrib/cmake/external/protobuf.cmake
以指向
HEAD
存储库的当前
protobuf


0
投票

我在 macOS Catalina (Python 3.6) 上尝试了这个命令,它运行正常:

$ python3 -m pip install --upgrade https://storage.googleapis.com/tensorflow/mac/cpu/tensorflow-1.12.0-py3-none-any.whl


0
投票

尝试一下,认为它有效

pip 安装tensorflow-macos

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