最近在工作中遇到一個(gè)問(wèn)題,就是有一個(gè)功能希望在各種服務(wù)器上實(shí)現(xiàn),而服務(wù)器上的系統(tǒng)版本可能都不一樣,有的是 CentOS 6.x,有的是 CentOS 7.x 。
需要說(shuō)明的一點(diǎn)是,CentOS 6.x 上的 Python 版本是 2.6.x 的,而 CentOS 7.x 上的 Python 版本是 2.7.x 的,這意味著我要實(shí)現(xiàn)的功能要適配這兩種版本的系統(tǒng)。
你可能會(huì)說(shuō),這有什么的,自己寫的時(shí)候,注意一下就好了。
事情其實(shí)沒(méi)有那么容易,我要實(shí)現(xiàn)的功能是基于一個(gè)框架進(jìn)行定制,需要修改不少的框架代碼。這個(gè)框架在不同的 Linux 版本上,是有不同的版本的,而且差異巨大,曾經(jīng)想過(guò)在 CentOS 6.x 和 CentOS 7.x 將這個(gè)框架安裝成同一個(gè)版本,最后還是失敗了,無(wú)法安裝,原因就是高版本需要 Python2.7,而 CentOS 6.x 上只有 Python2.6。
這個(gè)歷史問(wèn)題一直遺留到現(xiàn)在,由于這次的功能影響到的代碼較多,如果要對(duì)兩個(gè)版本的框架分別進(jìn)行定制的話,需要花不少的時(shí)間,為了不維護(hù)兩套版本,避免浪費(fèi)多余的精力去做適配,我決定將 CentOS 6.x 上默認(rèn)的 Python2.6 升級(jí)成 Python2.7。
下面是整個(gè)升級(jí)過(guò)程,別看步驟簡(jiǎn)單,這些精簡(jiǎn)步驟的背后可是有不少的坑,被我踩過(guò)后,你可以直接使用了。
- 首先確認(rèn)下你機(jī)器上的默認(rèn)的 Python 版本
$ 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
- 由于我們將使用編譯安裝的方式,所以要安裝下 gcc,及一些工具包。
注意一定要全部安裝,不然后面會(huì)發(fā)現(xiàn)有不少 python 的工具用不了。
比如不安裝 zlib 會(huì)無(wú)法安裝 setuptools,不裝 openssl 和 openssl-devel,會(huì)無(wú)法使用 pip 工具等
$ yum install gcc -y
$ yum groupinstall "Development tools"
$ yum install zlib-devel bzip2-devel openssl openssl-devel ncurses-devel sqlite-devel -y
如果你這里未按照我的步驟來(lái)安裝,你后面使用的時(shí)候出現(xiàn)了各種各樣的問(wèn)題,不要慌,只要再回來(lái)這里,把沒(méi)安裝的包裝上,安裝完成后,你需要進(jìn)入第四步重新編譯安裝Python。
- 下載最新的 Python2.7.x 安裝包,解壓并進(jìn)入指定目錄
$ 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
命令執(zhí)行完畢之后創(chuàng)建一個(gè)文件creating Makefile,供下面的make命令使用 執(zhí)行
make install
之后就會(huì)把程序安裝到我們指定的目錄中去。
Configure是一個(gè)可執(zhí)行腳本,它有很多選項(xiàng),在待安裝的源碼路徑下使用命令./configure –help輸出詳細(xì)的選項(xiàng)列表。其中
--prefix
選項(xiàng)是配置安裝的路徑,如果不配置該選項(xiàng),安裝后可執(zhí)行文件默認(rèn)放在/usr /local/bin,庫(kù)文件默認(rèn)放在
/usr/local/lib
,配置文件默認(rèn)放在
/usr/local/etc
,其它的資源文件放在
/usr /local/share
。如果配置
--prefix
,如:
./configure --prefix=/usr/local/test
可以把所有資源文件放在/usr/local/test的路徑中,不會(huì)雜亂。
用了
--prefix
選項(xiàng)的另一個(gè)好處是卸載軟件或移植軟件。當(dāng)某個(gè)安裝的軟件不再需要時(shí),只須簡(jiǎn)單的刪除該安裝目錄,就可以把軟件卸載得干干凈凈;移植軟件只需拷貝整個(gè)目錄到另外一個(gè)機(jī)器即可(相同的操作系統(tǒng))。當(dāng)然要卸載程序,也可以在原來(lái)的make目錄下用一次
make uninstall
,但前提是make文件指定過(guò)uninstall。
- 查看系統(tǒng)的 Python 版本
$ python -V
Python 2.6.6
如果你查看還是 Python 2.6.6 版本,請(qǐng)繼續(xù)看第六步。
- 修改系統(tǒng)默認(rèn)的 Python 版本
查看新安裝的Python版本,當(dāng)前系統(tǒng)的Python版本,并將系統(tǒng)指向的Python從2.6.x修改為2.7.x,再次查看當(dāng)前系統(tǒng)的Python版本,已經(jīng)變更為2.7.x
# 這是我們剛安裝的 Python
$/usr/local/bin/python2.7 -V
Python 2.7.14
# 這是系統(tǒng)默認(rèn) Python
$ /usr/bin/python -V
Python 2.6.6
# 備份原來(lái)的 Python 文件
$ mv /usr/bin/python /usr/bin/python.bak
# 建立軟鏈接,將我們剛安裝的 python2.7 做為系統(tǒng)默認(rèn)版本
ln -s /usr/local/bin/python2.7 /usr/bin/python
# 再次查看 Python 版本,已經(jīng)成功切換過(guò)來(lái)
$ python -V
Python 2.7.14
- 重新指定 yum 的Python版本
上面我們改了系統(tǒng)的默認(rèn) Python 版本,由于CentOS 6.x 的 yum 是基于Python2.6 的,為了不影響 yum 的使用,需單獨(dú)將yum指向python2.6版本。
編輯: vim /usr/bin/yum ,將
/usr/bin/python
改成
/usr/bin/python2.6
#!/usr/bin/python2.6
- 安裝 setuptools 及 pip
pip是python的安裝工具,很多python的常用工具,都可以通過(guò)pip進(jìn)行安裝。要安裝pip,首先要安裝setuptools。從這個(gè)鏈接,你可以得到相關(guān)信息:https://pypi.python.org/pypi/...
# 下載 setuptools
$ wget https://pypi.python.org/packages/ff/d4/209f4939c49e31f5524fa0027bf1c8ec3107abaf7c61fdaad704a648c281/setuptools-21.0.0.tar.gz#md5=81964fdb89534118707742e6d1a1ddb4
同樣的,進(jìn)行安裝:
$ tar vxf setuptools-21.0.0.tar.gz
$ cd setuptools-21.0.0
$ python setup.py install
安裝完成后,下載pip。其信息在如下網(wǎng)站:https://pypi.python.org/pypi/pip
# 下載 pip
wget https://pypi.python.org/packages/41/27/9a8d24e1b55bd8c85e4d022da2922cb206f183e2d18fee4e320c9547e751/pip-8.1.1.tar.gz#md5=6b86f11841e89c8241d689956ba99ed7
同樣的,進(jìn)行安裝
$ tar vxf pip-8.1.1.tar.gz
$ cd pip-8.1.1
$ python setup.py install
安裝完成后,執(zhí)行
pip list
查看一下安裝的包,若無(wú)異常,則一切順利。或者你也可以試著安裝一下第三方包
pip install requests
。
參考文章
- https://www.cnblogs.com/stone...
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
