一、Linux离线安装GCC编译环境
安装之前要查看离线环境的Linux版本,因为下载文档需要Linux的版本对应
1 uname -a显示全部信息
显示版本号,该机版本为centos 6.6,属于6系的Linux系统
1、手动对RPM包进行安装(方法1)
RPM是Red-Hat Package Manager(RPM软件包管理器)的缩写,其原始设计理念是开放式的,现在包括OpenLinux、S.u.S.E.以及Turbo Linux等Linux的分发版本都有采用,可以算是公认的行业标准了。
下载GCC所有需要的依赖包,逐个安装,从第三方开源软件管理库可以下载到:
根据安装顺序下载所需的包,并且按照顺序进行安装。
1 Rpm -ivh ppl-0.10.2-11.el6.x86_64.rpm #ppl(libppl.so.7、libppl_c.so.2)2 rpm -ivh cloog-ppl-0.15.7-1.2.el6.x86_64.rpm #cloog-ppl3 rpm -ivh mpfr-2.4.1-6.el6.x86_64.rpm #libmpcfr.so.1
4 rpm -ivh cpp-4.4.7-17.el6.x86_64.rpm #cpp
5 rpm -ivh kernel-headers-2.6.32-642.el6.x86_64.rpm #kernel-headers6 rpm -ivh glibc-headers-2.12-1.192.el6.x86_64.rpm #glibc-headers7 rpm -ivh glibc-devel-2.12-1.192.el6.x86_64.rpm #glibc-devel8 rpm -ivhlibgomp-4.4.7-17.el6.x86_64.rpm #libgomp(libgomp、libgomp.so.1)9 rpm -ivh gcc-4.4.7-17.el6.x86_64.rpm #gcc
至此安装成功,用gcc -v命令可以检验,如果版本号提示正确,那么安装成功。
2、挂载光盘镜像进行安装(方法2)
将centos的镜像进行挂载,不过需要centos的yum方法支持,此种方法不需要考虑包和动态库之间的依赖,yum包管理器会自动分析本机的依赖。(依赖是一个难度不大,但是非常琐碎的事情)
1 #设置光驱挂载点2 mkdir -p /Application/cdrom3 #挂载光驱4 mount /dev/cdrom /Application/cdrom 这个是挂载后文件地址,你也可以自己选着路径5 #备份原yum源6 cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak7 #把光驱设为yum源8 echo "[base]" > /etc/yum.repos.d/CentOS-Base.repo9 echo "name=CentOS-$releasever - Base" >> /etc/yum.repos.d/CentOS-Base.repo10 echo "baseurl=file:///Application/cdrom/" >> /etc/yum.repos.d/CentOS-Base.repo11 echo "gpgcheck=0" >> /etc/yum.repos.d/CentOS-Base.repo12 #安装GCC13 yum install gcc -y14 #恢复原yum源15 cp –f /etc/yum.repos.d/CentOS-Base.repo.bak /etc/yum.repos.d/CentOS-Base.repo
至此安装成功,用gcc -v命令可以检验,如果版本号提示正确,那么安装成功。
3、离线更新或者替换GCC版本
编译GCC源码进行安装,必须已经安装了可用的GCC,主要用于更新GCC版本
否则就要根据rpm二进制包进行GCC安装,但是要解决的lib包依赖问题非常复杂:
4、问题:
根目录下的/lib64缺少libc-2.12.so文件解决方案,预加载库然后解决动态连接问题
如果你是在root用户下进行的操作,那么你是幸运的,毕竟/lib(lib64)下的属组属主都是root,所以尽管libc.so.6丢失,mv、cp、ln等命令都还是可以正常使用的,普通用户误操作libc.so.6的解决办法如下,只能通过系统急救盘来进行
二、安装Pyhive包
Pyhive依赖:sasl,thrift,thrift-sasl, PyHive
1、安装Pyhive依赖-sasl
第一种方法:
通过GCC编译python源文件进行安装,python源代码官方地址:https://pypi.org/
很多python的包是有编译好的文件,但是sasl包并没有,必须根据具体环境进行编译
GCC安装好以后,进入sasl源码包,用python setup.py install指令安装sasl源码包文件。
第二种方法:
通过conda/pip进行离线安装sasl包,在本地通过conda配置好相同的环境版本,通过本文中介绍的离线安装方法安装sasl包
问题:
在源代码编译的过程中,可能会出现sasl.h头文件丢失问题,原因是sasl的源码已经许久没有维护了,代码结构与现有的代码结构不一样,采用新版工具包,安装cyrus-sasl包解决,官方地址为国外地址,并不可用,所以用第三方地址,下载并且按照官网提示的安装方法进行编译安装即可,源码见官网地址:
按照官方网站的编译流程安装完该组件以后,就可以进行Pyhive的安装了
如果还存在sasl.h头文件问题,可以通过pip离线安装libsasl2-dev包
可以参考以下文档:
2、安装thrift、thrift-sasl
采用pip/conda下载离线安装包的方式,将离线安装包传到离线环境,通过pip/conda命令进行安装,直接通过二进制文件进行安装可以解决离线环境编译缺少各种开发用的库等问题,本身生产环境不适合做开发环境
3、安装Pyhive包
采用pip/conda方式安装pyhive包
然后按照教程里面的代码进行测试即可,教程地址如下:
4、了解hive的配置及工作机制
Hive相当于hdfs分布式系统,只是一个不同于普通的sql的查询工具hql,指令都是一样的,所以采用hive查询数据库,在python里面只需要进行操作就行了,需要有数据库地址
二、离线安装包的几种方式
python包离线安装的几种方法(经过摸索,推荐用这个方法解决离线环境的依赖问题)
尽量少的采用源码编译的形式进行安装,非常容易出问题,因为生产环境和开发环境不一样,库的差异性非常大,所以编译起来问题比较多,建议在本地采用同样的配置(一般采用conda进行管理即可)将源码包进行编译,生成二进制文件,再上传到服务器进行安装:
1、通过pip安装
通过pip进行离线安装,此方法可以直接分析依赖下载wheel,比较方便,需要本地环境与服务器环境相同
第一种方法:
通过批量安装依赖,首先,在项目中分析出所有依赖的库
1 pip freeze >requirements.txt2 将所有包下载到DIR这个目录中3 pip download -d DIR -r requirements.txt4 pip wheel -w DIR -r requirements.txt
问题:
切记,不要在 windows 下载包,然后放到 Linux 上进行安装,这样八成装不上
1、 这两条命令的区别在于wheel 方式下载会将下载的包放入wheel 缓存,但缺点是wheel 不可以下载源码包
2、 download 命令会查看wheel缓存,然后再去PyPI下载库,但download命令下载的包不会进入wheel缓存,download 的优点是可以下载源码包
3、 需要注意,使用wheel 方式安装可能会报错,因为有些包是源码包,不能被打包成wheel 格式
4、 download 方法下载的包,不会对依赖性进行检查,这意味着,如果下载 Flask-PyMongo 这个包,只会下载该包,而不会下载 pymongo,经试验发现,download 适合补充wheel不可下载的包,两者搭配使用,才能将requirements文件的库完整的下载。
将下载的wheel文件和requirement.txt文件放到离线环境中用教程中的命令进行安装
pip install --no-index --find-links=DIR -r requirements.txt
到此包就安装好了。
第二种方法:
如果在批量安装过程中,发现离线环境某些包缺少依赖,是因为在到处本地requirements.txt的时候只是导出了新装的依赖名称,可能最基本的依赖两个环境不一样,这时候就要单个依赖进行下载,然后到离线环境进行安装,单个文件的下载安装方式跟批量下载一样。
先根据包名称下载
1 pip wheel -w DIR pandas(包名称)
然后通过pip指令安装
1 pip install path/pandas(下载包的位置)
到此单个pip包就安装完了
2、通过conda安装
通过conda安装的方法与pip进行安装的方法比较类似,conda安装包的时候都会将包下载到缓存,默认的缓存地址是anaconda/pkgs/下面的tar.bz2格式的包
首先要在本地安装好所需的包,所需的包自动会存在缓存位置
然后到缓存位置找到所需的包,将需要的依赖包拷贝转移到离线环境中,随便放在哪个位置都行,最好是拷贝到离线环境的相同conda的缓存位置
再运行:conda install --use-local path/file.gz(如果将包放在了相同位置,直接conda install XX就行,因为conda install 命令最默认搜索缓存位置,并分析依赖进行安装,此种方式比较高效)
其中path为放包的地方,最好放到conda默认的目录里面,因为conda即使在线安装依赖也是会先去搜寻离线缓存,然后才会去在线查找
安装完成以后去调用就可以了。