為了測試 mesos,搞了一個 centos7.1,使用最小化安裝,然後自己安裝了 net-tools,“開發工具”集。後來想裝一下 DCOS Cli工具,結果發現 python 的 pip 不可用。
搜了一下,發現 Centos7自動的 python 版本為2.7.5,不帶 openssl 加密,而要下載的東西都是 https 的,找了好久,希望能讓 pip 忽略 https 的驗證無果。查到一個資訊,說是2.7.9以上版本自帶了 openssl 外掛。好吧,試試這個吧!
1、安裝一堆需要的軟體包,之所以搞了兩天,完全是被這些坑的,一步一個坑啊!
yum -y install openssl openssl-devel ncurses-devel.x86_64 bzip2-devel sqlite-devel python-devel zlib
2、下載 python2.7.10原始碼包,解壓到一個臨時目錄中,我就放在/tmp 下了
wget https://www.python.org/ftp/python/2.7.10/Python-2.7.10.tgz tar zxvf Python-2.7.10.tgz
3、編譯
編譯前,注意一下,configure時候要使用"--enable-shared",表示生成動態連結庫。(不然後面編譯mod_wsgi會出錯)僅使用這一項也不夠,開始僅使用--enable-shared選項,發現編譯完成後,進入Python2.7.10目錄,執行python、python2、python2.7在終端都是返回python2.7.5的提示符。所以,在執行configure命令的時候,還要加上"-rpath"選項,這個代表是否將生成的庫安裝在軟體的安裝目錄,預設是在安裝目錄,否則自己指定路徑。
先建立一個目錄,不然後面configure的時候會出錯:
mkdir -p /usr/local/python/2.7.10/lib ./configure --enable-shared --prefix=/usr/local/python/2.7.10 LDFLAGS="-Wl,-rpath /usr/local/python/2.7.10/lib" make && make install && make clean
4、切換新版本
此處一定要把原來的 python2.7.5保留,我開始是直接覆蓋了老版本,結果發現 yum 不能用了,費了無數勁,也沒搞定,只好重灌了系統,反正是測試的虛擬機器(不過第二天找到修復的辦法了)
mv /usr/bin/python /usr/bin/python2.7.5 ln -fs /usr/local/python/2.7.10/bin/python2.7 /usr/bin/python
5、解決 yum 的問題
因為yum需要使用Python2.7.5的版本,現在 yum 應該不能幹活了,還有設定一下yum相關的檔案,這樣執行yum相關的命令時才不會出錯。vi /usr/bin/yum,修改第一句,替換成保留的2.7.5的版本:
!/usr/bin/python2.7.5
看了很多人說改完上面的就萬事大吉了,我修改了上面的之後,yum還是出問題,然後又根據出問題的部分修改了"/usr/libexec/urlgrabber-ext-down"下的第一句:
!/usr/bin/python2.7.5
果然熟悉的 yum 介面出來了!
5、安裝 setuptools、pip
老版本的這些,都不能生效了,得重新裝過,我在這遇到很多坑,菊花殘,滿身傷啊!
下載ez_setup.py檔案,安裝setuptools:
wget https://bootstrap.pypa.io/ez_setup.py
執行以下命令安裝,因為之前沒裝 zlib-devel 模組,下面的命令執行不成功,沒辦法,yum install zlib-devel ,然後理新編譯 python。
python ez_setup.py
下載pip原始碼,進入原始碼目錄進行安裝,這一步也因為第一步驟的相關元件沒裝,坑了半天
wget https://pypi.python.org/packages/source/p/pip/pip-7.1.2.tar.gz#md5=3823d2343d9f3aaab21cf9c917710196 tar zxvf Python-2.7.10.tgz cd Python-2.7.10 python setup.py install
增加一個軟連結,這一步好象不是很必要:
ln -fs /usr/local/python/2.7.10/bin/pip /usr/bin/pip
本以為這樣就萬事大吉了,結果執行 pip,直接報錯,又是因為依賴的元件沒裝。
最後再說一下,最好把新的 python 的路徑加到 PATH 環境變數中,否則還會有其他元件執行不正常。