最近在工做中遇到一個問題,就是有一個功能但願在各類服務器上實現,而服務器上的系統版本可能都不同,有的是 CentOS 6.x,有的是 CentOS 7.x 。html
須要說明的一點是,CentOS 6.x 上的 Python 版本是 2.6.x 的,而 CentOS 7.x 上的 Python 版本是 2.7.x 的,這意味着我要實現的功能要適配這兩種版本的系統。python
你可能會說,這有什麼的,本身寫的時候,注意一下就行了。sql
事情其實沒有那麼容易,我要實現的功能是基於一個框架進行定製,須要修改很多的框架代碼。這個框架在不一樣的 Linux 版本上,是有不一樣的版本的,並且差別巨大,曾經想過在 CentOS 6.x 和 CentOS 7.x 將這個框架安裝成同一個版本,最後仍是失敗了,沒法安裝,緣由就是高版本須要 Python2.7,而 CentOS 6.x 上只有 Python2.6。shell
這個歷史問題一直遺留到如今,因爲此次的功能影響到的代碼較多,若是要對兩個版本的框架分別進行定製的話,須要花很多的時間,爲了避免維護兩套版本,避免浪費多餘的精力去作適配,我決定將 CentOS 6.x 上默認的 Python2.6 升級成 Python2.7。vim
下面是整個升級過程,別看步驟簡單,這些精簡步驟的背後但是有很多的坑,被我踩事後,你能夠直接使用了。bash
$ python -V
Python 2.6.6
$ whereis python
python: /usr/bin/python /usr/bin/python2.6 /usr/lib/python2.6 /usr/lib64/python2.6 /usr/local/bin/python /usr/include/python2.6 /usr/share/man/man1/python.1.gz
複製代碼
注意必定要所有安裝,否則後面會發現有很多 python 的工具用不了。服務器
好比不安裝 zlib 會沒法安裝 setuptools,不裝 openssl 和 openssl-devel,會沒法使用 pip 工具等框架
$ yum install gcc -y
$ yum groupinstall "Development tools"
$ yum install zlib-devel bzip2-devel openssl openssl-devel ncurses-devel sqlite-devel -y
複製代碼
若是你這裏未按照個人步驟來安裝,你後面使用的時候出現了各類各樣的問題,不要慌,只要再回來這裏,把沒安裝的包裝上,安裝完成後,你須要進入第四步從新編譯安裝Python。python2.7
$ wget https://www.python.org/ftp/python/2.7.14/Python-2.7.14.tgz
$ tar zxvf Python-2.7.14.tgz
$ cd Python-2.7.14
複製代碼
# --prefix 指定 python 安裝的路徑
$ ./configure --prefix=/usr/local/python/python2.7
$ make
$ make install
複製代碼
./configure
命令執行完畢以後建立一個文件creating Makefile,供下面的make命令使用 執行 make install
以後就會把程序安裝到咱們指定的目錄中去。工具
Configure是一個可執行腳本,它有不少選項,在待安裝的源碼路徑下使用命令./configure –help輸出詳細的選項列表。其中 --prefix
選項是配置安裝的路徑,若是不配置該選項,安裝後可執行文件默認放在/usr /local/bin,庫文件默認放在 /usr/local/lib
,配置文件默認放在 /usr/local/etc
,其它的資源文件放在 /usr /local/share
。若是配置 --prefix
,如:./configure --prefix=/usr/local/test
能夠把全部資源文件放在/usr/local/test的路徑中,不會雜亂。
用了 --prefix
選項的另外一個好處是卸載軟件或移植軟件。當某個安裝的軟件再也不須要時,只須簡單的刪除該安裝目錄,就能夠把軟件卸載得乾乾淨淨;移植軟件只需拷貝整個目錄到另一個機器便可(相同的操做系統)。固然要卸載程序,也能夠在原來的make目錄下用一次 make uninstall
,但前提是make文件指定過uninstall。
$ python -V
Python 2.6.6
複製代碼
若是你查看仍是 Python 2.6.6 版本,請繼續看第六步。
查看新安裝的Python版本,當前系統的Python版本,並將系統指向的Python從2.6.x修改成2.7.x,再次查看當前系統的Python版本,已經變動爲2.7.x
# 這是咱們剛安裝的 Python
$/usr/local/bin/python2.7 -V
Python 2.7.14
# 這是系統默認 Python
$ /usr/bin/python -V
Python 2.6.6
# 備份原來的 Python 文件
$ mv /usr/bin/python /usr/bin/python.bak
# 創建軟連接,將咱們剛安裝的 python2.7 作爲系統默認版本
ln -s /usr/local/bin/python2.7 /usr/bin/python
# 再次查看 Python 版本,已經成功切換過來
$ python -V
Python 2.7.14
複製代碼
上面咱們改了系統的默認 Python 版本,因爲CentOS 6.x 的 yum 是基於Python2.6 的,爲了避免影響 yum 的使用,需單獨將yum指向python2.6版本。
編輯: vim /usr/bin/yum ,將/usr/bin/python
改爲 /usr/bin/python2.6
#!/usr/bin/python2.6
複製代碼
pip是python的安裝工具,不少python的經常使用工具,均可以經過pip進行安裝。要安裝pip,首先要安裝setuptools。從這個連接,你能夠獲得相關信息:pypi.python.org/pypi/setupt…
# 下載 setuptools
$ wget https://pypi.python.org/packages/ff/d4/209f4939c49e31f5524fa0027bf1c8ec3107abaf7c61fdaad704a648c281/setuptools-21.0.0.tar.gz#md5=81964fdb89534118707742e6d1a1ddb4
複製代碼
一樣的,進行安裝:
$ tar vxf setuptools-21.0.0.tar.gz
$ cd setuptools-21.0.0
$ python setup.py install
複製代碼
安裝完成後,下載pip。其信息在以下網站:pypi.python.org/pypi/pip
# 下載 pip
wget https://pypi.python.org/packages/41/27/9a8d24e1b55bd8c85e4d022da2922cb206f183e2d18fee4e320c9547e751/pip-8.1.1.tar.gz#md5=6b86f11841e89c8241d689956ba99ed7
複製代碼
一樣的,進行安裝
$ tar vxf pip-8.1.1.tar.gz
$ cd pip-8.1.1
$ python setup.py install
複製代碼
安裝完成後,執行 pip list
查看一下安裝的包,若無異常,則一切順利。或者你也能夠試着安裝一下第三方包 pip install requests
。
參考文章