Linux離線環境安裝Pyhive包及通用方式
一、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所有需要的依賴包,逐個安裝,從第三方開源軟體管理庫可以下載到:
http://www.rpmfind.net/linux/rpm2html/search.php
根據安裝順序下載所需的包,並且按照順序進行安裝。
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-ppl 3 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-headers 6 rpm -ivh glibc-headers-2.12-1.192.el6.x86_64.rpm #glibc-headers 7 rpm -ivh glibc-devel-2.12-1.192.el6.x86_64.rpm #glibc-devel 8 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/cdrom 3 #掛載光碟機 4 mount /dev/cdrom /Application/cdrom 這個是掛載後文件地址,你也可以自己選著路徑 5 #備份原yum源 6 cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak 7 #把光碟機設為yum源 8 echo "[base]" > /etc/yum.repos.d/CentOS-Base.repo 9 echo "name=CentOS-$releasever - Base" >> /etc/yum.repos.d/CentOS-Base.repo 10 echo "baseurl=file:///Application/cdrom/" >> /etc/yum.repos.d/CentOS-Base.repo 11 echo "gpgcheck=0" >> /etc/yum.repos.d/CentOS-Base.repo 12 #安裝GCC 13 yum install gcc -y 14 #恢復原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版本
https://www.cnblogs.com/dybk/p/8085685.html
否則就要根據rpm二進位制包進行GCC安裝,但是要解決的lib包依賴問題非常複雜:
4、 問題:
根目錄下的/lib64缺少libc-2.12.so檔案解決方案,預載入庫然後解決動態連線問題
https://blog.csdn.net/quantum7/article/details/80064002
如果你是在root使用者下進行的操作,那麼你是幸運的,畢竟/lib(lib64)下的屬組屬主都是root,所以儘管libc.so.6丟失,mv、cp、ln等命令都還是可以正常使用的,普通使用者誤操作libc.so.6的解決辦法如下,只能通過系統急救盤來進行
https://blog.csdn.net/Scirhh/article/details/84937858
二、安裝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包解決,官方地址為國外地址,並不可用,所以用第三方地址,下載並且按照官網提示的安裝方法進行編譯安裝即可,原始碼見官網地址:
http://www.linuxfromscratch.org/blfs/view/svn/postlfs/cyrus-sasl.html
按照官方網站的編譯流程安裝完該元件以後,就可以進行Pyhive的安裝了
如果還存在sasl.h標頭檔案問題,可以通過pip離線安裝libsasl2-dev包
可以參考以下文件:
https://blog.csdn.net/wulantian/article/details/74330590
2、 安裝thrift、thrift-sasl
採用pip/conda下載離線安裝包的方式,將離線安裝包傳到離線環境,通過pip/conda命令進行安裝,直接通過二進位制檔案進行安裝可以解決離線環境編譯缺少各種開發用的庫等問題,本身生產環境不適合做開發環境
3、 安裝Pyhive包
採用pip/conda方式安裝pyhive包
然後按照教程裡面的程式碼進行測試即可,教程地址如下:
https://github.com/dropbox/PyHive
4、 瞭解hive的配置及工作機制
Hive相當於hdfs分散式系統,只是一個不同於普通的sql的查詢工具hql,指令都是一樣的,所以採用hive查詢資料庫,在python裡面只需要進行操作就行了,需要有資料庫地址
https://www.cnblogs.com/dxxblog/p/8193967.html
二、離線安裝包的幾種方式
python包離線安裝的幾種方法(經過摸索,推薦用這個方法解決離線環境的依賴問題)
儘量少的採用原始碼編譯的形式進行安裝,非常容易出問題,因為生產環境和開發環境不一樣,庫的差異性非常大,所以編譯起來問題比較多,建議在本地採用同樣的配置(一般採用conda進行管理即可)將原始碼包進行編譯,生成二進位制檔案,再上傳到伺服器進行安裝:
1、通過pip安裝
通過pip進行離線安裝,此方法可以直接分析依賴下載wheel,比較方便,需要本地環境與伺服器環境相同
第一種方法:
通過批量安裝依賴,首先,在專案中分析出所有依賴的庫
1 pip freeze > requirements.txt 2 將所有包下載到DIR這個目錄中 3 pip download -d DIR -r requirements.txt 4 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即使線上安裝依賴也是會先去搜尋離線快取,然後才會去線上查詢
安裝完成以後去呼叫就可以了。