Ubuntu系统python2.7安装tensorflow报错class DescriptorBase(......),SyntaxError: invalid syntax
文章目录
- 一、问题出现背景:Ubuntu16.04安装TensorFlow1.13.1(版本这里无所谓)
- 二、使用网上给的办法,无效
- 三、我的办法,成功解决
-
- 1.查看自己TensorFlow里的Pro版本
- 2.更换protobuf==3.17.0
- 3. 验证你的TensorFlow是否能用
- 四、总结
一、问题出现背景:Ubuntu16.04安装TensorFlow1.13.1(版本这里无所谓)
第一次使用Ubuntu,我先装了个anaconda3,所以系统中存在了Python3.7,系统Python默认是3.7,要调用python2.7,需要在终端使用Python2。但是项目要使用底层Python2,并且要求TensorFlow1.13.1,我就跟着网上的步骤安装了TensorFlow。
当用python2安装tensorflow的时候,安装完成后,进行测试:
import tensorflow as tf
结果出现错误:
二、使用网上给的办法,无效
别人方法链接
- 简单来说是因为安装时TensorFlow带的
protobuf==3.18.3
,需要卸载重装protobuf==3.17.3
; - 如果你的电脑里只有一个Python2(或者有Python2和Python3,但是默认Python版本为Python2),这个方法对你 有用;
- 如果你的系统里同时有Python2和Python3,并且默认Python是Python3,那你就参考我的办法。
- 如何知道自己的默认Python是哪个版本呢?
直接打开终端输入python
,显示出结果就是默认版本啦。例如我的就是默认是python3.7,输入python2才显示Python2.7。
三、我的办法,成功解决
一句话总结:在命令里要将所有的pip换为pip2
1.查看自己TensorFlow里的Pro版本
终端输入代码:
pip2 freeze#注意使用pip2,因为pip默认是python3.7是安装工具
如图显示我的protobuf==3.18.0,就是这里出了问题,我们要做的就是把protobuf换为3.17.0版本
2.更换protobuf==3.17.0
1. 首先卸载protobuf==3.18.0
但是直接在终端运行如下卸载代码会报错:
pip2 uninstall protobuf==3.18.0
报错的原因是权限不够,所以我们要先开启root
权限,在终端运行以下代码:
su root#然后输入你的root密码
忘记了自己的root密码,或者还没有设置root密码的,总之这一步看不明白的,参考大佬文章:
ubuntu 16.04 设置root用户初始密码
2. 终端运行以下代码进行卸载安装
pip2 uninstall protobuf==3.18.0
pip2 install protobuf==3.17.3
3. 验证你的TensorFlow是否能用
1. 依次在终端执行如下指令:
python2
import tensorflow as tfa=tf.constant([1.0,2.0,3.0],shape=[3],name='a')b=tf.constant([1.0,2.0,3.0],shape=[3],name='b')c=a+bsess=tf.Session(config=tf.ConfigProto(log_device_placement=True))print sess.run(c)
2. 结果展示:
四、总结
- 以上就是我花费一天找出来的方法,主要是系统里有两个python,
pip是对应python3
,pip2是 对应python2
,之前老采用pip去安装python2 的东西,出现了很多让我抓狂的问题。 - 之前一直看网上说的
pip对应python2
,pip3对应python3
,自己也这么理解的,但是结果在我这里是不一致的。我觉得是因为我没有把python2.7设置为系统默认python,而pip对应的应该是系统默认python版本。 - 期间我还遇到了
pip==20.0
,而20版自带bug
,导致pip无法使用也无法正常卸载更新,最后用源码手动安装了pip==18.1
版本。