CentOS下面Python在升級到2.7.6的時候,沒有找到安裝包直接安裝,只能通過源代碼編譯的方式來安裝Python 2.7.6版本。這篇是編譯和安裝Python2.7.6的過程記錄。
CentOS系統中安裝了development tools。要編譯安裝Python,執行下面代碼:
1 2 3 4 5 6 7 8 9 10 | $ pushd /usr/local/src $ sudo mkdir python $ sudo chown $USER python $ cd python $ wget https: //www .python.org /ftp/python/2 .7.6 /Python-2 .7.6.tgz $ tar zxvf Python-2.7.6.tgz $ cd Python-2.7.6 $ . /configure --prefix= /usr/local/python-2 .7.6 && make $ sudo make install |
代碼過程:
1. 在/usr/local/src
創建python文件夾,並將Python文件夾所有者設置爲當前用戶(非root)
2. 進入創建的python目錄下,從官方網站上下載python2.7.6源代碼包。
3. (非必須)如果要校驗包的一致性,可以在官方網站上下載sig文件,並通過PGP校驗文件,也可以通過官網提供的MD5校驗下載的壓縮包。更多關於校驗的信息請參考Linux下校驗文件的完整性(MD5,SHA1,PGP)。本代碼忽略了此過程。
4. 解壓壓縮包到當前目錄,並進入Python-2.7.6
目錄
5. 配置python並編譯。這步只是用了--prefix
參數指示安裝路徑。
6. 安裝Python [也可使用altinstall的安裝方式,這樣文件末尾會帶上版本號。updated: 2015-07-13]
上面是在Python編譯安裝順利的情況下的大體流程,但是我在編譯的時候,Python出現了下面的提示信息:
1 2 3 4 5 6 | Python build finished, but the necessary bits to build these modules were not found: _bsddb _sqlite3 _ssl _tkinter bsddb185 bz2 dbm gdbm readline sunaudiodev To find the necessary bits, look in setup.py in detect_modules() for the module's name. |
當然,每個機器上因爲不同的配置,編譯報錯信息也會不同,比如網上有人的報錯就是下面這樣的:
1 2 3 4 5 6 7 | Python build finished, but the necessary bits to build these modules were not found: _bsddb _curses _curses_panel _sqlite3 _ssl _tkinter bsddb185 bz2 dbm dl gdbm p_w_picpathop readline sunaudiodev zlib To find the necessary bits, look in setup.py in detect_modules() for the module's name. |
無論報錯信息如何,意思很明確,我們編譯的時候,系統沒有辦法找到對應的模塊信息,爲了解決這些報錯,我們就需要提前安裝依賴包,這些依賴包對應列表如下(不一定完全):
模塊 | 依賴 | 說明 |
_bsddb | bsddb | Interface to Berkeley DB library。Berkeley數據庫的接口 |
_curses | ncurses | Terminal handling for character-cell displays。 |
_curses_panel | ncurses | A panel stack extension for curses。 |
_sqlite3 | sqlite | DB-API 2.0 interface for SQLite databases。SqlLite,CentOS可以安裝sqlite-devel |
_ssl | openssl-devel.i686 | TLS/SSL wrapper for socket objects。 |
_tkinter | N/A | a thin object-oriented layer on top of Tcl/Tk。如果不使用桌面程序可以忽略TKinter |
bsddb185 | old bsddb module | 老的bsddb模塊,可忽略。 |
bz2 | bzip2-devel.i686 | Compression compatible with bzip2。bzip2-devel |
dbm | bsddb | Simple “database” interface。 |
dl | N/A | Call C functions in shared objects.Python2.6開始,已經棄用。 |
gdbm | gdbm-devel.i686 | GNU’s reinterpretation of dbm |
p_w_picpathop | N/A | Manipulate raw p_w_picpath data。已經棄用。 |
readline | readline-devel | GNU readline interface |
sunaudiodev | N/A | Access to Sun audio hardware。這個是針對Sun平臺的,CentOS下可以忽略 |
zlib | Zlib | Compression compatible with gzip |
在CentOS下,可以安裝這些依賴包:readline-devel,sqlite-devel,bzip2-devel.i686,openssl-devel.i686,gdbm-devel.i686,libdbi-devel.i686,ncurses-libs,zlib-devel.i686。完成這些安裝之後,可以再次編譯,上表中指定爲棄用或者忽略的模塊錯誤可以忽略。
在編譯完成之後,就可以接着上面的第六步安裝Python到指定目錄下。安裝完成之後,我們可以到安裝目錄下查看Python是否正常安裝。
1 2 3 4 5 6 7 | $ pushd /usr/local/python-2 .7.6 /bin $ python --version $ sudo mv /usr/bin/python /usr/bin/python .old $ sudo ln -s python /usr/bin/python $ popd $ python -V $ sudo sed -i "s/#\!\/usr\/bin\/python/#\!\/usr\/bin\/python.old/" /usr/bin/yum |
1. 我們進入到安裝路徑下的bin目錄, 並查看安裝的版本(版本是2.7.6)
2. 將現有的python版本重命名備份
3. 創建新版本Python到/usr/bin
目錄下替代原有python
4. 測試系統Python版本(應該是新的2.7.6)
5. 此時如果yum不能正常工作,可以簡單的通過sed將裏面的Python引用替換成原來的Python路徑即可。
至此,完成Python的更新編譯安裝工作。如果你想完成自動安裝,可以將前面的代碼保存爲Shell腳本文件——需要注意的是,你可能需要添加各個模塊的安裝腳本,本篇的是通過yum來安裝的。也可以通過參考2中的文章,文中包含自動安裝的腳本文件。