Ubuntu16.04从源码安装TensorFlow(CPU only, python3.5)

好大一个坑!赶快跑!我们跳过去!

TensorFlow源码下载https://github.com/tensorflow/tensorflow
顺便小手一戳到安装指引的link:https://www.tensorflow.org/install/
选择对应的系统,这里用Ubuntu16.04:https://www.tensorflow.org/install/install_linux
鉴于之前用三维重建的软件选择GPU加速老是卡死,本次选择仅CPU安装,且从源码安装,下面就正式开始吧!

  • 源码下载
  • 依赖库安装
  • 环境配置
  • TensorFlow编译安装

- 1.源码下载

请直接在https://github.com/tensorflow/tensorflow下载截面download,不要用git clone命令,因为git clone到本地的文件有的没有更新。
下载完毕后,提取文件夹,并放置到home目录,键入以下命令:

cd tensorflow
git checkout r1.0

- 2.依赖库安装

  • bazel
  • python相关

- 2.1 bazel库安装

按照此网站的说明进行https://docs.bazel.build/versions/master/install-compile-source.html
仍然从源码安装bazel。

1.下载bazel:https://github.com/bazelbuild/bazel/releases
选择如下版本(目前最新):
bazel版本
下载非常慢,建议选择合适的时间下载(比如清晨)

2.bazel各种依赖库

sudo apt-get install build-essential openjdk-8-jdk python zip unzip

3.编译bazel
打开终端,进入bazel的目录,键入bash ./compile.sh
完成之后,有一个贴心的小提示告诉你得到的二进制Bazel文件在哪里(哇,安装过最暖的库了!)
二进制文件在Bazel目录下的output文件夹里,我们要把它移动到 /usr/local/bin目录下
用root权限才可实现。

su root
mv output/bazel /usr/local/bin

- 2.2 python相关库安装

sudo apt-get install python3-numpy python3-dev python3-pip python3-wheel

这里注意一点,由于我的系统里有Python2和Python3两个版本,默认的python2,安装pip之后不能正常使用(即使我在2、3下都装好了pip)
报错显示ImportError: cannot import name ‘main’巴拉巴拉
看网上给了很多别的复杂的解决方案,对我没有什么作用。
我这里直接把系统默认的python版本改为3.5,然后只安装python3-pip
修改默认python版本的方法也很多,我选择直接在系统级修改:
P了个S:python --version查看默认Python版本

su root
update-alternatives --list python

出现错误提示:update-alternatives: error: no alternatives for python
这是因为Python的替代版本尚未被update-alternatives命令识别,我们可以更新替代列表,将python2和python3放进去

update-alternatives --install /usr/bin/python python /usr/bin/python2.7 1 

update-alternatives --install /usr/bin/python python /usr/bin/python3.5 2

每键入一次命令,都会提示:update-alternatives: using /usr/bin/python2.7 to provide /usr/bin/python (python) in auto mode

优先级为2更高,所以默认版本就改成了python3.5
再退出root,python --version查看一下默认版本, 发现已经切换成3.5了~

- 3. TensorFlow环境配置

cd tensorflow  
$ ./configure

然后会有很多问题,让你选择Yes or No
我这里不安装GPU模块,也不要各种复杂的云平台啊什么的,就只有第一个Yes,后面都选了No
大概如下吧,错了可以退出重新配置,所以不要慌!
要用到默认值就直接回车。

Please specify the location of python. [Default is /usr/bin/python]: /usr/bin/python3.5
Found possible Python library paths:
  /usr/local/lib/python3.5/dist-packages
  /usr/lib/python3.5/dist-packages
Please input the desired Python library path to use.  Default is [/usr/lib/python3.5/dist-packages]

Using python library path: /usr/local/lib/python3.5/dist-packages
Please specify optimization flags to use during compilation when bazel option "--config=opt" is specified [Default is -march=native]:
Do you wish to use jemalloc as the malloc implementation? [Y/n]
jemalloc enabled
Do you wish to build TensorFlow with Google Cloud Platform support? [y/N]

Do you wish to build TensorFlow with Hadoop File System support? [y/N]

Do you wish to build TensorFlow with the XLA just-in-time compiler (experimental)? [y/N]

Do you wish to build TensorFlow with VERBS support? [y/N]

Do you wish to build TensorFlow with OpenCL support? [y/N]

Do you wish to build TensorFlow with CUDA support? [y/N] Y

Configuration finished

- 4。 TensorFlow编译安装

4.1 编译

bazel build -c opt //tensorflow/tools/pip_package:build_pip_package 

这个过程比较慢,我的编译了几个小时。可以键入就去吃饭了。

吃完饭回来发现编译完毕,也没有报错(盗一张图)
这里写图片描述

4.2 生成可执行文件

bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg 

这里写图片描述

4.3 安装TensorFlow

cd /tmp/tensorflow_pkg
sudo pip install tensorflow-1.9.0rc0-cp35-cp35m-linux_x86_64.whl 

注意这里输入tensorflow-之后按一下TAB键,就会出现你对应tensorflow的版本,不会出错。

然而安装过程并没有那么顺利,出错如下(这个安装过程不知道持续了多久,我反正睡了一觉,睡着的过程中还错过一个心仪的男生发来的微信消息,等我再回过去,对方就说没事了。哼!大猪蹄子!你再主动点早就不用单身了!)

安装未完成

不得不说,我已经成为一个搜Bug小能手了。(虽然我看不懂那些红色的错误TAT)
在google搜:response.py”, line 226, in _error_catcher yield
就找到了解决方法。(https://www.cnblogs.com/xianhan/p/9084838.html
估计是源的问题,我们使用镜像来安装就好
将上面的命令改为:

 sudo pip install tensorflow-1.9.0rc0-cp35-cp35m-linux_x86_64.whl  -i https://pypi.douban.com/simple

安装结果
至此,TensorFlow安装完毕。
测试一下:

$ python

Python 3.5.2 (default, Nov 23 2017, 16:37:01) 
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import tensorflow as tf
>>> hello = tf.constant('Hello, TensorFlow!')
>>> sess = tf.Session()
>>> sess.run(hello)
'Hello, TensorFlow!'
>>> a = tf.constant(10)
>>> b = tf.constant(32)
>>> sess.run(a + b)
42
>>> sess.close()

References:
https://github.com/tensorflow/tensorflow
https://www.tensorflow.org/install/
https://blog.csdn.net/Linux1s1s/article/details/77720846
https://www.cnblogs.com/xianhan/p/9084838.html

猜你喜欢

转载自blog.csdn.net/sinat_28752257/article/details/80785057