linux环境离线安装tensorflow,并解决libstdc++.so.6及libm.so.6版本问题

前提

由于内部Linux服务器不能连接互联网,而又需要tensorflow训练模型,故产生此需求。

安装

1. 下载tensorflow-1.13.1-cp37-cp37m-manylinux1_x86_64.whl,此为python3.7 linux版本。

2. 执行命令:

pip install tensorflow-1.13.1-cp37-cp37m-manylinux1_x86_64.whl

3. 按照提示信息,下载tensorflow所需的依赖,下载网站:https://pypi.org/

#我离线安装时按照提示安装的依赖如下
termcolor-1.1.0.tar.gz
protobuf
tensorflow_estimator
mock
absl-py
gast
astor
tensorboard
grpcio
Markdown
setuptools
keras-applications
keras-preprocessing

各依赖的版本号与联网条件下安装tensorflow成功时各依赖的版本号相同。

4. 有时按照提示操作会遇见版本不匹配问题,最简单的做法是:若本地win或者linux虚拟机上已经安装过tensorflow1.13.1,离线下载Tensorflow依赖的版本号与其保持一致即可。

BUG1:

 执行 2 命令安装成功tensorflow后,进入python环境 import tensorflow,提示错误如下:

ImportError: /lib64/libstdc++.so.6: version `CXXABI_1.3.8' not found (required by /root/anaconda3/lib/python3.7/site-packages/tensorflow/python/_pywrap_tensorflow_internal.so)
  • strings /usr/lib64/libstdc++.so.6|grep CXXABI      查看是否有“CXXABI_1.3.8”,没有说明需要安装

  • 进入python的安装路径下的lib文件夹(我这里python安装在/root/anaconda3)查看libstdc++.so.6的最高版本

    cd /root/anaconda3/lib
    ls | grep libstdc++.so.6

    #结果输出
    libstdc++.so.6
    libstdc++.so.6.0.25
  • 将libstdc++.so.6的最高版本复制到/usr/lib64/目录下(这里最高版本是libstdc++.so.6.0.25)

cp libstdc++.so.6.0.25 /usr/lib64/
  •  进入/usr/lib64/目录下,重命名libstdc++.so.6 ,然后重新构建动态库libstdc++.so.6
mv libstdc++.so.6 libstdc++.so.6.bak  #重命名,以防恢复时使用
ln -s libstdc++.so.6.0.25 libstdc++.so.6 #重新构建动态链接库
  • 执行strings /usr/lib64/libstdc++.so.6|grep CXXABI 查看有 CXXABI_1.3.8,成功!

BUG2: 

ImportError: /lib64/libm.so.6: version `GLIBC_2.23' not found (required by /root/anaconda3/lib/python3.7/site-packages/tensorflow/python/_pywrap_tensorflow_internal.so)

 此错误提示含义是:需要下载GLIBC_2.23源码,编译并安装,最后构建动态链接库libm.so.6即可。

tar -xzvf glibc-2.23.tar.gz
  •  进入解压后的文件夹glibc-2.23,建立临时目录
mkdir build #创建子文件夹
cd build
../configure --prefix=/usr/glibc-2.23  #/usr/glibc-2.23为解压目录
  •   编译并安装               
 make && make install 
  •  将编译好的libc-2.23.so 复制到/usr/lib64/下
cp /usr/glibc-2.23/lib/libm-2.23.so /usr/lib64/
  • 重命名(备份)libm.so.6
mv libm.so.6 libm.so.6.bak
  • 重新构建动态库libm.so.6
ln -s libm-2.23.so libm.so.6

进入python 交互环境,import tensorflow,导入成功

参考


 

终于在双十一这一天写出来啦,光棍节快乐~~  《蓝天》超级好听~~~


版权声明:本文为m0_38052384原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。