1. 程式人生 > >CentOS-6.x系統基於python-3.5安裝tensorflow-1.4

CentOS-6.x系統基於python-3.5安裝tensorflow-1.4

tensorflow安裝

簡介
tensorflow的安裝分cpu版本和gpu版本,
這裏只討論cpu版本。

google提供了很多種安裝方式,
主要分三種,
一種是pip安裝,非常簡單,重要的是它在各個平臺都是可以用的,包括windows,但是CentOS6需升級glibc和gcc(CXXABI_)版本

第二種是通過docker安裝,也差不多是一鍵安裝,內核版本低於3.10不能安裝docker,具體的介紹可以看https://github.com/tensorflow/tensorflow/tree/master/tensorflow/tools/docker

最後一種,就是源碼編譯安裝,最麻煩。
Linux系統官方推薦安裝在ubuntu-14及以上

本文采用pip安裝

編譯安裝python3.5(tensorflow要求python版本至少是2.7或者3.3)

Linux下默認系統自帶python2.6的版本,這個版本被系統很多程序所依賴,所以不建議刪除,
如果使用最新的Python3那麽我們知道編譯安裝源碼包和系統默認包之間是沒有任何影響的,所以可以安裝python3和python2共存

1.1 安裝編譯工具

$ yum install wget gcc automake autoconf libtool make xz

1.2 安裝依賴庫

$ yum install zlib-devel openssl-devel bzip2-devel

    依賴關系解決
    ===============================================================================================================================================================================================
    軟件包                                                架構                                     版本                                              倉庫                                    大小
    ===============================================================================================================================================================================================
    正在安裝:
    bzip2-devel                                           x86_64                                   1.0.5-7.el6_0                                     base                                   250 k
    openssl-devel                                         x86_64                                   1.0.1e-57.el6                                     base                                   1.2 M
    zlib-devel                                            x86_64                                   1.2.3-29.el6                                      base                                    44 k
    為依賴而安裝:
    keyutils-libs-devel                                   x86_64                                   1.4-5.el6                                         base                                    29 k
    krb5-devel                                            x86_64                                   1.10.3-65.el6                                     base                                   504 k
    libcom_err-devel                                      x86_64                                   1.41.12-23.el6                                    base                                    33 k
    libkadm5                                              x86_64                                   1.10.3-65.el6                                     base                                   143 k
    libselinux-devel                                      x86_64                                   2.0.94-7.el6                                      base                                   137 k
    libsepol-devel                                        x86_64                                   2.0.41-4.el6                                      base                                    64 k
    為依賴而更新:
    e2fsprogs                                             x86_64                                   1.41.12-23.el6                                    base                                   554 k
    e2fsprogs-libs                                        x86_64                                   1.41.12-23.el6                                    base                                   121 k
    krb5-libs                                             x86_64                                   1.10.3-65.el6                                     base                                   675 k
    libcom_err                                            x86_64                                   1.41.12-23.el6                                    base                                    38 k
    libss                                                 x86_64                                   1.41.12-23.el6                                    base                                    42 k
    openssl                                               x86_64                                   1.0.1e-57.el6                                     base                                   1.5 M

    事務概要
    ===============================================================================================================================================================================================

$ yum install -y tkinter tk-devel tk        # 在Linux中python默認是不安裝Tkinter模塊,matplotlib依賴Tkinter模塊
    依賴關系解決

    ===============================================================================================================================================================================================
     軟件包                                                 架構                                     版本                                             倉庫                                    大小
    ===============================================================================================================================================================================================
    正在安裝:
     tk                                                     x86_64                                   1:8.5.7-5.el6                                    base                                   1.4 M
     tk-devel                                               x86_64                                   1:8.5.7-5.el6                                    base                                   496 k
     tkinter                                                x86_64                                   2.6.6-66.el6_8                                   base                                   258 k
    為依賴而安裝:
     fontconfig-devel                                       x86_64                                   2.8.0-5.el6                                      base                                   209 k
     freetype-devel                                         x86_64                                   2.3.11-17.el6                                    base                                   365 k
     libX11-devel                                           x86_64                                   1.6.4-3.el6                                      base                                   983 k
     libXau-devel                                           x86_64                                   1.0.6-4.el6                                      base                                    14 k
     libXft-devel                                           x86_64                                   2.3.2-1.el6                                      base                                    19 k
     libXrender-devel                                       x86_64                                   0.9.10-1.el6                                     base                                    17 k
     libxcb-devel                                           x86_64                                   1.12-4.el6                                       base                                   1.1 M
     tcl                                                    x86_64                                   1:8.5.7-6.el6                                    base                                   1.9 M
     tcl-devel                                              x86_64                                   1:8.5.7-6.el6                                    base                                   162 k
     tix                                                    x86_64                                   1:8.4.3-5.el6                                    base                                   252 k
     xorg-x11-proto-devel                                   noarch                                   7.7-14.el6                                       base                                   288 k
    為依賴而更新:
     libX11                                                 x86_64                                   1.6.4-3.el6                                      base                                   587 k
     libX11-common                                          noarch                                   1.6.4-3.el6                                      base                                   171 k
     libXrender                                             x86_64                                   0.9.10-1.el6                                     base                                    24 k
     libxcb                                                 x86_64                                   1.12-4.el6                                       base                                   180 k
     python                                                 x86_64                                   2.6.6-66.el6_8                                   base                                    76 k
     python-libs                                            x86_64                                   2.6.6-66.el6_8                                   base                                   5.3 M

    事務概要
    ===============================================================================================================================================================================================
    Install      14 Package(s)
    Upgrade       6 Package(s)

$ yum install readline-devel.x86_64             #解決python3退格功能
    依賴關系解決

    ================================================================================================================================================================================================
     軟件包                                           架構                                     版本                                                    倉庫                                    大小
    ================================================================================================================================================================================================
    正在安裝:
     readline-devel                                   x86_64                                   6.0-4.el6                                               base                                   134 k
    為依賴而安裝:
     ncurses-devel                                    x86_64                                   5.7-4.20090207.el6                                      base                                   641 k

    事務概要
    ================================================================================================================================================================================================
    Install       2 Package(s)

1.3 編譯安裝

$ wget https://www.python.org/ftp/python/3.5.4/Python-3.5.4.tar.xz
$ tar xf Python-3.5.4.tar.xz
$ cd Python-3.5.4
$ ./configure --enable-unicode=ucs2 --enable-shared         // --enable-optimizations 
$echo $?
0
$ make && make install
    Collecting setuptools
    Collecting pip
    Installing collected packages: setuptools, pip
    Successfully installed pip-9.0.1 setuptools-28.8.0
$echo $?
0
如果提示:Ignoring ensurepip failure: pip 8.1.1 requires SSL/TLS;原因沒有安裝或升級oenssl:

$ echo -e "/usr/local/lib/\n/usr/local/lib64/" > /etc/ld.so.conf.d/local-lib-x86_64.conf
$ ldconfig  
$ python3 -V
Python 3.5.4
$ pip3 -V           #或:pip -V   強烈建議使用8.1或更高版本的pip或pip3
pip 9.0.1 from /usr/local/lib/python3.5/site-packages (python 3.5)
$ which pip3
/usr/local/bin/pip3
升級pip
$ python3 -m pip install -U pip
Requirement already up-to-date: pip in /usr/local/lib/python3.5/site-packages

如果發現沒有安裝pip,請單獨安裝pip:
$ wget https://link.jianshu.com/?t=https://bootstrap.pypa.io/get-pip.py
$ mv index.html\?t\=https\:%2F%2Fbootstrap.pypa.io%2Fget-pip.py get-pip.py
$ python3 get-pip.py

2 安裝tensorflow

2.1 安裝tensorflow

$ pip3 install tensorflow-gpu   #Python 3.n; GPU支持(須有英偉達顯卡)
$ pip3 install tensorflow       #Python 3.n; CPU支持(不支持GPU)
    Collecting tensorflow
      Downloading tensorflow-1.4.0-cp35-cp35m-manylinux1_x86_64.whl (40.7MB)
        100% |████████████████████████████████| 40.7MB 7.8kB/s
    Collecting numpy>=1.12.1 (from tensorflow)
      Downloading numpy-1.13.3-cp35-cp35m-manylinux1_x86_64.whl (16.9MB)
        100% |████████████████████████████████| 16.9MB 9.1kB/s
    Collecting six>=1.10.0 (from tensorflow)
      Downloading six-1.11.0-py2.py3-none-any.whl
    Collecting protobuf>=3.3.0 (from tensorflow)
      Downloading protobuf-3.5.0.post1-cp35-cp35m-manylinux1_x86_64.whl (6.4MB)
        100% |████████████████████████████████| 6.4MB 11kB/s
    Collecting wheel>=0.26 (from tensorflow)
      Downloading wheel-0.30.0-py2.py3-none-any.whl (49kB)
        100% |████████████████████████████████| 51kB 36kB/s
    Collecting tensorflow-tensorboard<0.5.0,>=0.4.0rc1 (from tensorflow)
      Downloading tensorflow_tensorboard-0.4.0rc3-py3-none-any.whl (1.7MB)
        100% |████████████████████████████████| 1.7MB 14kB/s
    Collecting enum34>=1.1.6 (from tensorflow)
      Downloading enum34-1.1.6-py3-none-any.whl
    Requirement already satisfied: setuptools in /usr/local/lib/python3.5/site-packages (from protobuf>=3.3.0->tensorflow)
    Collecting markdown>=2.6.8 (from tensorflow-tensorboard<0.5.0,>=0.4.0rc1->tensorflow)
      Downloading Markdown-2.6.9.tar.gz (271kB)
        100% |████████████████████████████████| 276kB 23kB/s
    Collecting bleach==1.5.0 (from tensorflow-tensorboard<0.5.0,>=0.4.0rc1->tensorflow)
      Downloading bleach-1.5.0-py2.py3-none-any.whl
    Collecting html5lib==0.9999999 (from tensorflow-tensorboard<0.5.0,>=0.4.0rc1->tensorflow)
      Downloading html5lib-0.9999999.tar.gz (889kB)
        100% |████████████████████████████████| 890kB 18kB/s
    Collecting werkzeug>=0.11.10 (from tensorflow-tensorboard<0.5.0,>=0.4.0rc1->tensorflow)
      Downloading Werkzeug-0.12.2-py2.py3-none-any.whl (312kB)
        100% |████████████████████████████████| 317kB 18kB/s
    Installing collected packages: numpy, six, protobuf, wheel, markdown, html5lib, bleach, werkzeug, tensorflow-tensorboard, enum34, tensorflow
      Running setup.py install for markdown ... done
      Running setup.py install for html5lib ... done
    Successfully installed bleach-1.5.0 enum34-1.1.6 html5lib-0.9999999 markdown-2.6.9 numpy-1.13.3 protobuf-3.5.0.post1 six-1.11.0 tensorflow-1.4.0 tensorflow-tensorboard-0.4.0rc3 werkzeug-0.12.2 wheel-0.30.0

2.2 卸載TensorFlow # 重裝時使用

$ pip3 uninstall tensorflow     # for Python 3.n

2.3 安裝附屬包

$ pip3 install matplotlib
    Collecting matplotlib
      Downloading matplotlib-2.1.0-cp35-cp35m-manylinux1_x86_64.whl (15.0MB)
        100% |████████████████████████████████| 15.0MB 13kB/s
    Collecting pytz (from matplotlib)
      Downloading pytz-2017.3-py2.py3-none-any.whl (511kB)
        100% |████████████████████████████████| 512kB 37kB/s
    Requirement already satisfied: six>=1.10 in /usr/local/lib/python3.5/site-packages (from matplotlib)
    Collecting python-dateutil>=2.0 (from matplotlib)
      Downloading python_dateutil-2.6.1-py2.py3-none-any.whl (194kB)
        100% |████████████████████████████████| 194kB 41kB/s
    Collecting pyparsing!=2.0.4,!=2.1.2,!=2.1.6,>=2.0.1 (from matplotlib)
      Downloading pyparsing-2.2.0-py2.py3-none-any.whl (56kB)
        100% |████████████████████████████████| 61kB 24kB/s
    Requirement already satisfied: numpy>=1.7.1 in /usr/local/lib/python3.5/site-packages (from matplotlib)
    Collecting cycler>=0.10 (from matplotlib)
      Downloading cycler-0.10.0-py2.py3-none-any.whl
    Installing collected packages: pytz, python-dateutil, pyparsing, cycler, matplotlib
    Successfully installed cycler-0.10.0 matplotlib-2.1.0 pyparsing-2.2.0 python-dateutil-2.6.1 pytz-2017.3

$ pip3  install Pillow
    Collecting Pillow
      Downloading Pillow-4.3.0-cp35-cp35m-manylinux1_x86_64.whl (5.8MB)
        100% |████████████████████████████████| 5.8MB 10kB/s
    Collecting olefile (from Pillow)
      Downloading olefile-0.44.zip (74kB)
        100% |████████████████████████████████| 81kB 15kB/s
    Building wheels for collected packages: olefile
      Running setup.py bdist_wheel for olefile ... done
      Stored in directory: /root/.cache/pip/wheels/20/58/49/cc7bd00345397059149a10b0259ef38b867935ea2ecff99a9b
    Successfully built olefile
    Installing collected packages: olefile, Pillow
    Successfully installed Pillow-4.3.0 olefile-0.44

2.4 需安裝的包

bleach-1.5.0 
enum34-1.1.6 
html5lib-0.9999999 
markdown-2.6.9 
numpy-1.13.3                        # TensorFlow要求的數字處理軟件包。
protobuf-3.5.0.post1 
six-1.11.0 
tensorflow-1.4.0 
tensorflow-tensorboard-0.4.0rc3 
werkzeug-0.12.2 
wheel-0.30.0                        # 管理(.whl)格式的Python壓縮包。

Pillow-4.3.0 
olefile-0.44

cycler-0.10.0 
matplotlib-2.1.0 
pyparsing-2.2.0 
python-dateutil-2.6.1 
pytz-2017.3

dev-0.4.0                           # 添加Python的擴展。
pip3-9.0.1                          # 安裝和管理某些Python包。
註:如果無法在線安裝,請到https://www.pypi-mirrors.org/上的網址下載,
例如http://pypi.pubyun.com/simple/    ;http://mirrors.163.com/pypi/simple等等

3 編譯升級GLIBC到2.17(glibc>=2.16)

由於centos6.x上glibc最多到2.12,而強行使用高版本的glibc會導致程序意外崩潰,因此,我們采用本機源碼編譯安裝。
$ strings /lib64/libc.so.6 |grep GLIBC      #查看當前glibc支持的版本
    GLIBC_2.2.5
    GLIBC_2.2.6
    GLIBC_2.3
    GLIBC_2.3.2
    GLIBC_2.3.3
    GLIBC_2.3.4
    GLIBC_2.4
    GLIBC_2.5
    GLIBC_2.6
    GLIBC_2.7
    GLIBC_2.8
    GLIBC_2.9
    GLIBC_2.10
    GLIBC_2.11
    GLIBC_2.12
    GLIBC_PRIVATE
$ wget http://ftp.gnu.org/gnu/libc/glibc-2.17.tar.gz
$ tar -zxvf glibc-2.17.tar.gz && cd glibc-2.17
$ mkdir build && cd build
$ ../configure  --prefix=/usr --with-headers=/usr/include --with-binutils=/usr/bin
$ make && make install
$ strings /lib64/libc.so.6 |grep GLIBC
    GLIBC_2.2.5
    GLIBC_2.2.6
    GLIBC_2.3
    GLIBC_2.3.2
    GLIBC_2.3.3
    GLIBC_2.3.4
    GLIBC_2.4
    GLIBC_2.5
    GLIBC_2.6
    GLIBC_2.7
    GLIBC_2.8
    GLIBC_2.9
    GLIBC_2.10
    GLIBC_2.11
    GLIBC_2.12
    GLIBC_2.13
    GLIBC_2.14
    GLIBC_2.15
    GLIBC_2.16
    GLIBC_2.17
    GLIBC_PRIVATE

4 編譯升級GCC到4.8.3(因為需要用到CXXABI_1.3.7,所以要求gcc版本大於4.8)

$ yum install bzip2 gcc-c++
$ wget http://ftp.gnu.org/gnu/gcc/gcc-4.8.3/gcc-4.8.3.tar.gz
$ tar -zxvf gcc-4.8.3.tar.gz
$ cd gcc-4.8.3
$ ./contrib/download_prerequisites  # 腳本文件會幫我們下載、配置、安裝依賴庫
    註:如果服務器無法連接外網,需單獨下載這三個包到當前目錄下,解壓,並做鏈接;
    $ wget ftp://gcc.gnu.org/pub/gcc/infrastructure/mpfr-2.4.2.tar.bz2
    $ wget ftp://gcc.gnu.org/pub/gcc/infrastructure/gmp-4.3.2.tar.bz2
    $ wget ftp://gcc.gnu.org/pub/gcc/infrastructure/mpc-0.8.1.tar.gz
    $ tar xf mpfr-2.4.2.tar.bz2
    $ tar xf gmp-4.3.2.tar.bz2
    $ tar xf mpc-0.8.1.tar.gz
    $ ln -s mpc-0.8.1 mpc
    $ ln -s mpfr-2.4.2 mpfr
    $ ln -s gmp-4.3.2 gmp

    $ll gmp*  mpc* mpfr* -d
        lrwxrwxrwx  1 root root     9 12月  7 15:23 gmp -> gmp-4.3.2
        drwxrwxrwx 15 1001 wheel 4096 1月   8 2010 gmp-4.3.2
        lrwxrwxrwx  1 root root     9 12月  7 15:23 mpc -> mpc-0.8.1
        drwxrwxrwx  5 1000  1000 4096 12月  8 2009 mpc-0.8.1
        lrwxrwxrwx  1 root root    10 12月  7 15:23 mpfr -> mpfr-2.4.2
        drwxrwxrwx  5 1114  1114 8192 11月 30 2009 mpfr-2.4.2

$ mkdir build && cd build
$ ../configure -enable-checking=release -enable-languages=c,c++ -disable-multilib
$ make && make install      # 測試時make相當慢,大概走了3個小時,一般服務器30分鐘
$ gcc -v                    # 不需要修改環境變量
    使用內建 specs。
    COLLECT_GCC=gcc
    COLLECT_LTO_WRAPPER=/usr/local/libexec/gcc/x86_64-unknown-linux-gnu/4.8.3/lto-wrapper
    目標:x86_64-unknown-linux-gnu
    配置為:../configure -enable-checking=release -enable-languages=c,c++ -disable-multilib
    線程模型:posix
    gcc 版本 4.8.3 (GCC)

$ echo -e "/usr/local/lib\n/usr/local/lib64"  >/etc/ld.so.conf.d/local_libs.conf
$ ldconfig
  如果報:ldconfig: /usr/local/lib64/libstdc++.so.6.0.19-gdb.py 不是 ELF 文件 - 它起始的魔數錯誤。
          ldconfig: /usr/local/lib64/libstdc++.so.6.0.19-gdb.py is not an ELF file - it has the wrong magic bytes at the start.
    $ mv /usr/local/lib64/{,bak_}libstdc++.so.6.0.19-gdb.py         #改名
    $ ldconfig

修改libstdc++.so.6的鏈接:
$ rm -f /usr/lib64/libstdc++.so.6
$ cp -a /usr/local/lib64/libstdc++.so.6.0.19 /usr/lib64/
$ ln -s /usr/lib64/libstdc++.so.6.0.19 /usr/lib64/libstdc++.so.6
$ strings /usr/lib64/libstdc++.so.6 |grep CXXABI_
CXXABI_1.3
CXXABI_1.3.1
CXXABI_1.3.2
CXXABI_1.3.3
CXXABI_1.3.4
CXXABI_1.3.5
CXXABI_1.3.6
CXXABI_1.3.7
CXXABI_TM_1

5 測試TensorFlow

$ python3                       #驗證
>>> import tensorflow as tf
>>> hello = tf.constant(‘Hello, TensorFlow!‘)
>>> sess = tf.Session()
>>> print(sess.run(hello))
Hello, TensorFlow!

$ python3
>>> import tensorflow as tf
>>> a = tf.constant(10)
>>> b = tf.constant(32)
>>> print(sess.run(a + b))
42

$ python3
>>> import tensorflow as tf
>>> import os
>>> import shutil
>>> import numpy as np
>>> from PIL import Image
>>> import matplotlib.pyplot as plt
>>>

6 參考

http://blog.csdn.net/numen27/article/details/75332833
http://www.jianshu.com/p/fdb7b54b616e
http://blog.csdn.net/lenbow/article/details/51203526#1
https://www.tensorflow.org/install/install_linux    #需×××

7 安裝bazel(源碼安裝時的編譯器)不做

7.1 安裝JDK1.8

google使用bazel構建tensorflow,因此我們需要編譯之。首先安裝64位jdk1.8,因為bazel需要java8來編譯,
上傳JDK1.8(jdk-8u66-linux-x64.tar.gz)安裝包到/data/tools、
$ tar xf jdk-8u66-linux-x64.tar.gz
$ vim /etc/profile.d/java.sh
    export JAVA_HOME=/data/tools/jdk1.8.0_66
    export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
    export CLASSPATH=$JAVA_HOME/lib:$JAVA_HOME/jre/lib
$ source /etc/profile.d/java_pwdx_grep.sh
$ java -version
java version "1.8.0_66"
java(TM) SE Runtime Environment (build 1.8.0_66-b17)
java HotSpot(TM) 64-Bit Server VM (build 25.66-b17, mixed mode)

7.2 編譯bazel

$ git clone https://github.com/bazelbuild/bazel.git
$ cd bazel
$ git checkout -b dev 0.8.0
$ ./compile.sh

8 報錯總結

8.1 找不到Glibc2.XX(ImportError: /lib64/tls/libc.so.6: version `GLIBC_2.14‘ not found)

glibc是GNU發布的libc庫,即c運行庫。 glibc是linux系統中最底層的api,幾乎其它任何運行庫都會依賴於glibc。 glibc除了封裝linux操作系統所提供的系統服務外,它本身也提供了許多其它一些必要功能服務的實現。
由此可見,問題的根源是系統不兼容,ubuntu上用的libc 版本較高,而 CentOS 上用的版本太低導致不能執行。。
解決這個問題有三種方法:
第一種:升級Glibc,這個風險非常大,很多時候升完了發現好多東西都不能用了;
第二種:外鏈Glibc,也就是在其他目錄建一個Glibc,然後添加一個環境變量,這個在網上看貌似是可行的,但我這麽做的時候依然報錯。
第三種:更換linux系統,這個問題很多時候是CentOS安裝tf環境時候造成的,可以嘗試更換容器

8.2 glibc: LD_LIBRARY_PATH shouldn‘t contain the current directory

LD_LIBRARY_PATH不能包含當前目錄,需要修改環境變量並重新執行configure
echo $LD_LIBRARY_PATH           # 查看
export LD_LIBRARY_PATH=         # 定義
echo $LD_LIBRARY_PATH           # 檢查
./glibc-2.14/configure 

8.3 直接升級glibc(風險比較大)

yum install gcc
wget http://ftp.gnu.org/pub/gnu/glibc/glibc-2.17.tar.xz
tar -xvf glibc-2.17.tar.xz
cd glibc-2.17
mkdir build
cd build
../configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin 
make && make install
需要等大概10分鐘

8.4 外鏈安裝glibc2

下載Glibc2.14:
http://ftp.gnu.org/gnu/glibc/或者http://www.gnu.org/software/libc/
安裝:
xz -d glibc-2.14.tar.xz
tar -xvf glibc-2.14.tar
進入源碼目錄 建立構建目錄,並cd進入構建目錄:
cd glibc-2.14
mkdir build 
配置:
../configure --prefix=/opt/glibc-2.14 
編譯安裝:
make -j4 
sudo make install 
臨時修改環境變量:
LD_LIBRARY_PATH=/opt/glibc-2.14/lib:$LD_LIBRARY_PATH

8.5 外鏈安裝導致的嚴重後果

安裝過程中,因為修改/etc/ld.so.conf文件,ldconfig後導致輸入命令後,連最基本的命令也會報錯:
ls
ls: error while loading shared libraries: __vdso_time: invalid mode for dlopen(): Invalid argument
解決方法:
千萬不要斷開ssh,不然就遠程不上去了
vi /etc/profile 加入
export LD_LIBRARY_PATH=/usr/lib:/usr/lib64:/lib:/lib64:/usr/local/lib:/usr/local/lib64
鏈接完了之後,Glibc2的問題是沒有了,但import tensorflow的時候出現 Segmentation fault (core dumped)

8.6 輸入所有命令後都沒反應了。。。

因為升級了Glibc,導致系統出問題了,把環境變量改回去就可以了。

8.7 glibc3找不到(version `GLIBCXX_3.4.21‘ not found)

參考http://blog.csdn.net/rznice/article/details/51090966
其實和找不到glibc2的性質差不多
strings /usr/lib64/libstdc++.so.6.0.13  |grep GLIBC

8.8 沒有git

yum install git-core
要是不能聯網有沒有git都一樣,所有包都需要手動下載

8.9 安**inutils

從以下目錄下載binutils:ftp.gnu.org/gnu/binutils/binutils-2.28.tar.bz2
tar jxvf binutils-2.28.tar.bz2
mkdir binutils-build
cd binutils-build
../binutils-2.28/configure
make -j4
make install

8.10 安**azel(大坑)

下載地址1:git clone https://github.com/bazelbuild/bazel(非常之慢)
下載地址2:git clone https://github.com/CStzdong/bazel
發現報錯:
INFO: You can skip this first step by providing a path to the bazel binary as second argument:
INFO: ./compile.sh compile /path/to/bazel
?? Building Bazel from scratch
ERROR: Must specify PROTOC if not bootstrapping from the distribution artifact

--------------------------------------------------------------------------------
NOTE: This failure is likely occuring if you are trying to bootstrap bazel from
a developer checkout. Those checkouts do not include the generated output of
the protoc compiler (as we prefer not to version generated files).

* To build a developer version of bazel, do

bazel build //src:bazel

* To bootstrap your first bazel binary, please download a dist archive from our
release page at https://github.com/bazelbuild/bazel/releases and run
compile.sh on the unpacked archive.

The full install instructions to install a release version of bazel can be found
at https://docs.bazel.build/install-compile-source.html
For a rationale, why the bootstrap process is organized in this way, see
https://bazel.build/designs/2016/10/11/distribution-artifact.html
進入錯誤信息中提到的https://github.com/bazelbuild/bazel/releases網站,選擇最近版本的鏈接,進去後發現有一堆安裝包。選擇其中的一個直接下載https://github.com/bazelbuild/bazel/releases/download/0.5.3/bazel-0.5.3-installer-linux-x86_64.sh運行安裝成功,執行時報錯:
/usr/local/bin/bazel: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.19‘ not found (required by /usr/local/bin/bazel)
這個錯誤會在下文提到
重新運行./compile.sh
運行到一半報錯
再執行一次,發現兩次運行./compile.sh出現的錯誤不一致!疑似安裝程序bug
嘗試低版本bazel0.5.2,仍出現錯誤
嘗試更低版本0.4.5,下載解壓縮運行./compile.sh後安裝成功!!!
下載地址:https://github.com/bazelbuild/bazel/releases/download/0.4.5/bazel-0.4.5-dist.zip
然後執行:
mkdir bazel-0.4.5-dist
cd bazel-0.4.5-dist
unzip ../bazel-0.4.5-dist.zip
./compile.sh
cp ./output/bazel /usr/local/bin(復制bazel的Binary文件至/usr/local/bin,使得全局都能找到該文件)

8.11 關於手動離線安**azel

不建議完全手動安**azel,全程有100多個包的依賴,。,,,,,,

8.12 手動安裝numpy和scipy

依賴的包:
scipy-0.11.0
numpy-1.6.2
nose-1.2.1
lapack-3.4.2
atlas-3.10.0
參考:http://blog.chinaunix.net/uid-22488454-id-3978860.html

8.13 pip

如果沒有pip,就到PIP官網下載get-pip.py。
參考鏈接:http://www.jianshu.com/p/81b648b1d572
最後從python官網下載p3安裝包就好了
如果公司有自己的鏡像,可以修改pip的配置文件:
cd ~/.pip/pip.conf(如果沒有,就自己建一個;如果不能保存,說明沒有.pip目錄,需要進入~目錄mkdir .pip)
然後加入下面的內容
[global]
index-url = XXX
trusted-host = pypi.douban.com 
disable-pip-version-check = true
timeout = 120
註:XXX為國內或企業內部鏡像,國內用https://pypi.douban.com/simple,公司內部就用自己的。

8.14 找不到readelf

依據鏈接http://www.jianshu.com/p/308a4e803c81的說法,先用readelf -s 文件路徑|grep GLIBC_2.14查看so裏到底哪部分依賴了glibc2.14,發現readelf: command not found,沒有readelf命令。。。
(readelf用來顯示一個或多個elf格式的目標文件信息)
依據鏈接http://pkgs.loginroot.com/errors/notFound/readelf,需要添加環境變量:export PATH="/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin"

8.15 Segmentation fault (core dumped)

直接強制退出Python了
根據鏈接https://github.com/tensorflow/tensorflow/issues/8197的解釋,原因是gcc的版本過低,更新gcc在前文已經提過了。
還有文章提到是scipy和tensorflow沖突
根據http://blog.csdn.net/shouwangzhelv/article/details/51851155提到的解決方案,重新手工編譯了scipy,依然不行。

8.16 安裝anaconda

參考:http://www.jianshu.com/p/03d757283339
如果機器不能聯網,anaconda基本就廢掉了。。。
如果不能用ananconda,只好自己下載包然後上傳了,單臺機器就rz和sz,多臺機器之間傳文件就scp xxx root@abc:url

8.17 在centos系統下,導入matplotlib時,出現ImportError: No module named ‘_tkinter‘的錯誤,

首先yum list installed | grep ^tk     ;查看是否存在相應模塊,通常原因是tkinter和tk-devel缺失。
通過yum install -y tkinter和yum install -y tk-devel下載相應模塊,再重新編譯Python即可。
或者編譯python的時候選擇添加參數--enable-unicode=ucs2
$ python3
>>> import matplotlib.pyplot as plt
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python3.5/site-packages/matplotlib/pyplot.py", line 113, in <module>
    _backend_mod, new_figure_manager, draw_if_interactive, _show = pylab_setup()
  File "/usr/local/lib/python3.5/site-packages/matplotlib/backends/__init__.py", line 60, in pylab_setup
    [backend_name], 0)
  File "/usr/local/lib/python3.5/site-packages/matplotlib/backends/backend_tkagg.py", line 6, in <module>
    from six.moves import tkinter as Tk
  File "/usr/local/lib/python3.5/site-packages/six.py", line 92, in __get__
    result = self._resolve()
  File "/usr/local/lib/python3.5/site-packages/six.py", line 115, in _resolve
    return _import_module(self.mod)
  File "/usr/local/lib/python3.5/site-packages/six.py", line 82, in _import_module
    __import__(name)
  File "/usr/local/lib/python3.5/tkinter/__init__.py", line 35, in <module>
    import _tkinter # If this fails your Python may not be configured for Tk
ImportError: No module named ‘_tkinter‘
或者參照:http://www.qttc.net/201304306.html
正確安裝新版Python(在Linux中python默認是不安裝Tkinter模塊,)
    1 首先修改Setup.dist文件
    $ cd Python-3.5.4
    $ cp Modules/Setup.dist{,_$(date +%F)}
    $ vim Modules/Setup.dist        # 把下面相應行的註釋去掉,修改具體版本
    _tkinter _tkinter.c tkappinit.c -DWITH_APPINIT     -L/usr/local/lib     -I/usr/local/include     -ltk8.5 -ltcl8.5     -lX11

    以上第四行-ltk8.5 -ltcl8.5 默認是 8.2 ,請你系統實際tcl/tk版本修改:我系統中裝的是8.5,所以這裏我改成了8.5
    $ rpm -qa | grep ^tk
    tk-8.5.7-5.el6.x86_64
    tk-devel-8.5.7-5.el6.x86_64
    tkinter-2.6.6-66.el6_8.x86_64

    $ rpm -qa | grep ^tcl
    tcl-8.5.7-6.el6.x86_64
    tcl-devel-8.5.7-6.el6.x86_64

    2 安裝tck-devel、tk-devel
    $ yum install tcl-devel tk-devel -y

    3 開始配置安裝python
    $ ldconfig
    $ ./configure
    $ make && make install 

    4 驗證
    新版Python是否可以使用tkinter模塊
    $ python3
    >>> import tkinter
    >>>

    舊版Python是否可以使用tkinter模塊 
    $ python
    >>> import Tkinter
    >>>

8.18 升級gcc完,把/usr/local/lib*添加到系統動態鏈接庫:echo -e "/usr/local/lib\n/usr/local/lib64" >/etc/ld.so.conf.d/local_lib.conf後,

    執行ldconfig報錯:ldconfig: /usr/local/lib64/libstdc++.so.6.0.19-gdb.py is not an ELF file - it has the wrong magic bytes at the start.
    不是 ELF 文件 - 它起始的魔數錯誤。

9 Pytesseract安裝

 File "<string>", line 1, in <module>
ImportError: No module named numpy.distutils
-- Found PythonInterp: /usr/local/bin/python3 (found suitable version "3.5.4", minimum required is "3.4") 
-- Found PythonLibs: /usr/local/lib/libpython3.5m.so (found suitable exact version "3.5.4") 
-- Found JNI: /usr/java/jdk1.8.0_66/jre/lib/amd64/libjawt.so  
-- Could NOT find Matlab (missing:  MATLAB_MEX_SCRIPT MATLAB_INCLUDE_DIRS MATLAB_ROOT_DIR MATLAB_LIBRARIES MATLAB_LIBRARY_DIRS MATLAB_MEXEXT MATLAB_ARCH MATLAB_BIN) 
-- VTK is not found. Please set -DVTK_DIR in CMake to VTK build directory, or to VTK install subdirectory with VTKConfig.cmake file

 pytesseract

    Collecting pytesseract
    Downloading pytesseract-0.1.7.tar.gz (150kB)
    100% |████████████████████████████████| 153kB 470kB/s 
    Collecting Pillow (from pytesseract)
    Downloading Pillow-4.3.0-cp35-cp35m-manylinux1_x86_64.whl (5.8MB)
    100% |████████████████████████████████| 5.8MB 73kB/s 
    Collecting olefile (from Pillow->pytesseract)
    Downloading olefile-0.44.zip (74kB)
    100% |████████████████████████████████| 81kB 95kB/s 
 安裝這三個依賴包
    tar -xvf pytesseract-0.1.7.tar.gz
    cd pytesseract-0.1.7.tar.gz
    python3 setup.py install

    pip3 install  Pillow-4.3.0-cp35-cp35m-manylinux1_x86_64.whl

    unzip olefile-0.44.zip
    cd  olefile-0.44.zip
    python3 setup.py install
參考:
    https://m.2cto.com/kf/201610/557136.html
    http://techieroop.com/install-opencv-in-centos/ 
    http://blog.csdn.net/zl18310999566/article/details/77880862

10 Tesseract-OCR 安裝

1、安裝編譯環境:

    yum install gcc gcc-c++ make
    yum groupinstall "Development Tools"
    yum install autoconf automake libtool
    yum install libjpeg-devel libpng-devel libtiff-devel zlib-devel

2、下載編譯依賴庫

    3.04
    版本tar -xvf leptonica-1.72.tar.gz
    cd leptonica-1.72
    ./configure && make && make install

3、下載編譯 tesseract-ocr (註意這裏下載下來的包要放在leptonica-1.72 下,否則編譯的時候會出問題)

    3.04版本
    mv 3.04.00.tar.gz Tesseract3.04.00.tar.gz
    tar -xvf Tesseract3.04.00.tar.gz
    cd tesseract-3.04.00/
    ./autogen.sh
    ./configure

    make && make install

4、下載識別字體的字體文件

     3.04版本
    wget --no-check-certificate https://github.com/tesseract-ocr/tessdata/raw/master/eng.traineddata

    wget --no-check-certificate https://github.com/tesseract-ocr/tessdata/raw/master/chi_sim.traineddata

    下載這兩個語言識別包eng.traineddata,chi_sim.traineddata

5、將tesseract-ocr的字體文件拷貝到/usr/local/share/tessdata/下

    cp *.traineddata /usr/local/share/tessdata/

6、配置字體文件的環境變量 vi /etc/profile (編譯完成後需要source/etc/profile )

    export TESSDATA_PREFIX=/usr/local/share/

7、拷貝.so文件

    cp /usr/local/lib/*.so.* /usr/lib64/    

END

CentOS-6.x系統基於python-3.5安裝tensorflow-1.4