CentOS下編譯安裝Python2.7.6

CentOS下面Python在升級到2.7.6的時候,沒有找到安裝包直接安裝,只能通過源代碼編譯的方式來安裝Python 2.7.6版本。這篇是編譯和安裝Python2.7.6的過程記錄。

CentOS系統中安裝了development tools。要編譯安裝Python,執行下面代碼:

code
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出現了下面的提示信息:

code
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.

當然,每個機器上因爲不同的配置,編譯報錯信息也會不同,比如網上有人的報錯就是下面這樣的:

code
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.

無論報錯信息如何,意思很明確,我們編譯的時候,系統沒有辦法找到對應的模塊信息,爲了解決這些報錯,我們就需要提前安裝依賴包,這些依賴包對應列表如下(不一定完全):

模塊依賴說明
_bsddbbsddbInterface to Berkeley DB library。Berkeley數據庫的接口
_cursesncursesTerminal handling for character-cell displays。
_curses_panelncursesA panel stack extension for curses。
_sqlite3sqliteDB-API 2.0 interface for SQLite databases。SqlLite,CentOS可以安裝sqlite-devel
_sslopenssl-devel.i686TLS/SSL wrapper for socket objects。
_tkinterN/Aa thin object-oriented layer on top of Tcl/Tk。如果不使用桌面程序可以忽略TKinter
bsddb185old bsddb module老的bsddb模塊,可忽略。
bz2bzip2-devel.i686Compression compatible with bzip2。bzip2-devel
dbmbsddbSimple “database” interface。
dlN/ACall C functions in shared objects.Python2.6開始,已經棄用。
gdbmgdbm-devel.i686GNU’s reinterpretation of dbm
p_w_picpathopN/AManipulate raw p_w_picpath data。已經棄用。
readlinereadline-develGNU readline interface
sunaudiodevN/AAccess to Sun audio hardware。這個是針對Sun平臺的,CentOS下可以忽略
zlibZlibCompression 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是否正常安裝。

code
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中的文章,文中包含自動安裝的腳本文件。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章