Linux(Red hat)无网离线安装TensorFlow

摘要:
在一系列下载之后,Tensorflow安装需要以下依赖文件。最后,Tensorflow可以成功安装。Python˃˃importtensorflowstf如果Linux系统上没有安装过高版本的gcc,将提示以下错误:ImportError:/lib/x86_64 linuxgnu/libc.so。6: 版本`GLIBC_2.17'未找到`GLIBC_2.17'未找到。使用以下命令查看当前系统支持的glibc版本[root@localhostglibc]#strings/lib64/libc.so。6 | grepGLIBCGLIBC_2.2.5GLIBC_2.2.6GLIBC_2.3GLIBC_2.3.3GLIBC_2.3.4GLIBC_2.4GLIBC_2.5GLIBC_2.6GLIBC_2.7GLIBC_2.8GLIBC_2.9GLIBC_2.10GLIBC_2.11GLIBC_2.12GLIBC_ PRIVATE更新glibc版本,下载地址:http://ftp.gnu.org/gnu/glibc/glibc-2.17.tar.gz执行以下步骤安装glibc[xxx]#tar xfglibc-2.17.tar。gz[xxx]#cdglibc 2.17[xxx]#mkdirbuild[xxx]#cdbuild[xxx]#../configure--prefix=/usr--disable profile--enable add-ons--with header=/usr/include--with binutils=/usr/bin[xxx]#make j8[xxx]*makeinstall[root@localhostglibc]#strings/lib64/libc.so。6 | grepGLIBCCGLIBC_2.2.5GLIBC_2.2.6GLBIBC_2.3GLIBC_2.3.3GLIBC_2.3.4GLIBC_2.4GLIBC_2.5GLIBC_2.6GLIBC_2.7GLIBC_2.8GLIBC_2.9GLIBC_2.10GLIBC_2.11GLIBC_2.12GLIBC_2.13GLIBC_2.14GLIBC_2.15GLIBC_2.16 GLIBC_2.17GLIBC_ PRIVATE视图映射:[root@localhostglibc]#Ll/lib64/libc.so.6lrwxrwxrwx1rootroot12月716:31/lib64/libc。所以6-˃libc-2.17.so此时,libc。所以6已映射到libc-2.17.so。[xxx]#rm/lib64/libc。所以6[xxx]#ln-s/lib64/libc-2.17.so/lib64/lbc。所以6注意,一旦文件/lib64/libc。所以6,则不能使用命令ll、ls和ln。

文件下载

首先,下载想要安装的版本,目前最新的是1.8.0 根据你的python版本下载对应的whl文件,下载连接:https://pypi.org/project/tensorflow/#files。也可以下载历史版本:https://pypi.org/project/tensorflow/#history

尝试安装

pip install xxxxxx.whl
会提示依赖的文件不存在。接着通过能上网的机子百度去下载对应版本号的文件继续安装。


 
Linux(Red hat)无网离线安装TensorFlow第1张
 

经过一系列的下载之后,tensorflow 安装需要以下依赖文件,通通装上。


 
Linux(Red hat)无网离线安装TensorFlow第2张
 

最终能够成功安装tensorflow 。
如果运行如下命令不报错的情况下,恭喜你,安装成功。

python
>>> import tensorflow as tf

如果linux 系统原先没有安装过高版本的gcc,一般都会提示如下错误

ImportError: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.17' not found 
(required by /usr/local/lib/python2.7/dist-
packages/tensorflow/python/_pywrap_tensorflow.so)

`GLIBC_2.17' 没找到。
采用如下命令查看当前系统支持的glibc版本

[root@localhost glibc]# 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_PRIVATE

更新glibc版本,下载地址:http://ftp.gnu.org/gnu/glibc/glibc-2.17.tar.gz
执行以下步骤安装glibc

[xxx]# tar -xf glibc-2.17.tar.gz
[xxx]# cd glibc-2.17
[xxx]# mkdir build
[xxx]# cd build
[xxx]# ../configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin
[xxx]# make -j 8
[xxx]# make  install

重新查看会发现,glibc的版本已经添加上去:

[root@localhost glibc]# 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

查看映射:

[root@localhost glibc]# ll /lib64/libc.so.6
lrwxrwxrwx 1 root root 12 May  7 16:31 /lib64/libc.so.6 -> libc-2.17.so

此时,libc.so.6已经映射到了libc-2.17.so。如果不是要删除映射重新建立映射。

[xxx]# rm /lib64/libc.so.6
[xxx]# ln -s /lib64/libc-2.17.so /lib64/libc.so.6

这里需要注意的是,一旦/lib64/libc.so.6文件被删除ll,ls,ln 这些命令将无法使用。报如下错误:

error while loading shared libraries: libc.so.6: cannot open shared object file: 
No such file or directory
采用以下命令进行急救:
[xxx]# ldconfig 

继续尝试

>>> import tensorflow as tf

会报如下错误

ImportError: /usr/lib64/libstdc++.so.6: version `CXXABI_1.3.9' not found

查看已有的版本

[xxx]# ll /usr/lib64/libstdc++.so.6
lrwxrwxrwx 1 root root 19 May  7 17:58 /usr/lib64/libstdc++.so.6 -> libstdc++.so.6.0.13
[xxx]# strings /usr/lib64/libstdc++.so.6 | grep GLIBCXX
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_TM_1
CXXABI_FLOAT128

一般安装anaconda3 会有高版本的libstdc++.so.6存在。磁盘搜索

[xxx]# find / -name "libstdc++.so.*"
/root/anaconda3/x86_64-conda_cos6-linux-gnu/sysroot/lib/libstdc++.so.6
/root/anaconda3/x86_64-conda_cos6-linux-gnu/sysroot/lib/libstdc++.so.6.0.24
/root/anaconda3/lib/libstdc++.so.6
/root/anaconda3/lib/libstdc++.so.6.0.24
/root/anaconda3/pkgs/libstdcxx-ng-7.2.0-h7a57d05_2/x86_64-conda_cos6-linux-gnu/sysroot/lib/libstdc++.so.6
/root/anaconda3/pkgs/libstdcxx-ng-7.2.0-h7a57d05_2/x86_64-conda_cos6-linux-gnu/sysroot/lib/libstdc++.so.6.0.24
/root/anaconda3/pkgs/libstdcxx-ng-7.2.0-h7a57d05_2/lib/libstdc++.so.6
/root/anaconda3/pkgs/libstdcxx-ng-7.2.0-h7a57d05_2/lib/libstdc++.so.6.0.24

复制对应的版本到/usr/lib64/目录下

cp /root/anaconda3/lib/libstdc++.so.6.0.24  /usr/lib64/

同样修改软连接关系

[xxx]# rm /usr/lib64/libstdc++.so.6
[xxx]# ln -s /usr/lib64/libstdc++.so.6.0.24 /usr/lib64/libstdc++.so.6

这个问题也解决了,那能够成功导入吗?不要高兴的太早,有些同学可能会遇到如下问题:

>>>import tensorflow as tf
illegal instruction (core dumped)

各种查阅资料后发现官网上的安装方式和自家的CPU不匹配,需要从source安装。泪崩...
需要简单处理的同学可以尝试降低tensorflow的版本,如安装1.5.0版本,1.5.1同样会报illegal instruction (core dumped) 亲测。

 
Linux(Red hat)无网离线安装TensorFlow第3张
 
参考资料:

glibc2.17安装: https://blog.csdn.net/wyl9527/article/details/78256066
linux文件删除急救:https://blog.csdn.net/xzx735/article/details/43227203
tensorflow 源码安装:https://blog.csdn.net/helei001/article/details/51285951
illegal instruction错误解决 https://blog.csdn.net/darklucky/article/details/79947048



作者:IT屌丝逆袭日记
链接:https://www.jianshu.com/p/36e547419c96
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

免责声明:文章转载自《Linux(Red hat)无网离线安装TensorFlow》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇全面聊聊JavaScript的浅拷贝和深拷贝超详细SVM(支持向量机)知识点下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

arm-linux的gdb移植

转载于:http://blog.chinaunix.net/uid-23381466-id-309369.html arm-linux的gdb移植分为两种情况.一种是交叉调试版。这一种模式是需要编译一个arm-linux版本gdbserver (GDB的stub模块).然后再编译一个X86版本交叉调试的gdb.为了与桌面版本身的gdb 区别开来,一般改名为...

Linux操作临时文件

使用临时文件要考虑几个问题: 保证临时文件间的文件名不互助冲突。 保证临时文件中内容不被其他用户或者黑客偷看、删除和修改。 Linux中提供了mkstemp 和 tmpfile 函数来处理临时文件。 mkstemp函数 int mkstemp(char *template); mkstemp函数在系统中以唯一的文件名创建一个文件并打开,而且只有当前用户...

FUSE简介

什么是FUSE 传统的文件系统是操作系统的一部分,放在操作系统内核里面实现。Fuse(Filesystem in Userspace), 一个用户空间文件系统框架,提供给我们一组用于实现一个文件系统的API,使我们可以在用户态实现自已的文件系统。 FUSE的优缺点 1)传统文件系统都是定义在操作系统内核层面上的,要操作系统识别一种新的文件系统,必需重写内核...

Linux音频编程

虽然目前Linux的优势主要体现在网络服务方面,但事实上同样也有着非常丰富的媒体功能,本文就是以多媒体应用中最基本的声音为对象,介绍如何在Linux平台下开发实际的音频应用程序,同时还给出了一些常用的音频编程框架。 一、数字音频 音频信号是一种连续变化的模拟信号,但计算机只能处理和记录二进制的数字信号,由自然音源得到的音频信号必须经过一定的变换,成为数字音...

linux系统修改系统时间与时区

  有装过Linux系统的人,可能都会有这样的经历,就是该机器安装windows系统时,时间正确,但是安装了linux系统后,尽管时区选择正确,也会发现系统时间不对。这是由于安装系统时采用了UTC,那么什么是UTC呢,简单的说UTC就是0时区的时间,是国际标准,而中国处于UTC+8时区。   另外还有一种时间是当地时间,而windows采用的就是当地时间...

Linux date 命令

date命令用于打印或设置系统日期和时间,常见用法如下: [root@localhost ~]# date //查看当前时间 [root@localhost ~]# date +"%Y-%m-%d" //格式化输出 [root@localhost ~]# d...