好大一个坑!赶快跑!我们跳过去!
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
选择如下版本(目前最新):
下载非常慢,建议选择合适的时间下载(比如清晨)
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