1. 程式人生 > >記錄一次在內網Linux環境安裝Python的經歷

記錄一次在內網Linux環境安裝Python的經歷

目標

因工作需要,希望在內網的一臺Linux Server上安裝Python及相關工具包。但在實際安裝過程中,遇到了缺少依賴包等問題。

安裝時問題

缺少依賴軟體包或模組

$ ./configure --prefix=/usr/local/python-2.7
$ make
running build
running build_ext
INFO: Can't locate Tcl/Tk libs and/or headers

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               imageop         
readline           sunaudiodev                        
To find the necessary bits, look in setup.py in detect_modules() for the module'
s name. running build_scripts ##編譯時,提示缺失部分模組

zlib模組找不到

#修改Python安裝原始檔中Modules/Setup.py,去掉#
zlib zlibmodule.c -I$(prefix)/include -L$(exec_prefix)/lib -lz
$ ./configue --prefix=...
$ make
#提示:
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               imageop         
readline           sunaudiodev                        
To find the necessary bits, look in
setup.py in detect_modules() for the module's name. running build_scripts

此處,雖然python2.7.9安裝成功,但缺少很多模組。

升級系統原有2.4版python

$ python -V #檢測系統原有python版本,發現為2.4版。
$ cd /usr/bin
$ mv python /usr/bin/python_v24bak.bak #重新命名原python
$ ln -s /usr/local/python-2.7/bin/python ./python #建立軟連結到python2.7
$ python -V #檢測目前的python版本,發現已變更為2.7.9
#注意:因為yum依賴系統自帶的原python2.4版本,為保證yum正常執行,還需要編輯yum, #修改第一行#!/usr/bin/python 為:#!/usr/bin/python2.4

此處的升級過程中,又不可避免地變更了系統原有的python。

安裝setuptools

若想安裝python某些模組,需要首先安裝好setuptools。

#上傳setuptools-15.2.tar.gz並解壓:setuptools
$ cd setuptools-15.2
$ python setup.py install
# 安裝成功,提示:
...
Processing setuptools-15.2-py2.7.egg
Copying setuptools-15.2-py2.7.egg to /usr/local/lib/python2.7/site-packages
Adding setuptools 15.2 to easy-install.pth file
Installing easy_install script to /usr/local/bin
Installing easy_install-2.7 script to /usr/local/bin

Installed /usr/local/lib/python2.7/site-packages/setuptools-15.2-py2.7.egg
Processing dependencies for setuptools==15.2
Finished processing dependencies for setuptools==15.2

此處,雖然安裝好了setuptools,但因無法直接聯網,導致很多軟體仍然無法自主安裝。

安裝soaplib工具包

安裝soaplib提示依賴lxml;安裝lxml時,發生報錯:

...
src/lxml/lxml.etree.c:201156: 錯誤:‘xsltDocLoaderFunc’ 未宣告 (在此函式內第一次使用)
src/lxml/lxml.etree.c:201156: 錯誤:expected ‘)’ before ‘__pyx_f_4lxml_5etree__xslt_doc_loader’
error: command 'gcc' failed with exit status 1

此處需要先安裝依賴: libxml2-devel, libxslt-devel;而按照libxml2-devel時,則提示需要依賴zlib-devel

#  rpm -ivh libxml2-devel-2.6.26-2.1.21.el5_9.3.i386.rpm 
warning: libxml2-devel-2.6.26-2.1.21.el5_9.3.i386.rpm: Header V3 DSA signature: NOKEY, key ID e8562897
error: Failed dependencies:
        zlib-devel is needed by libxml2-devel-2.6.26-2.1.21.el5_9.3.i386

以上,依賴包太難找,短期內無解!

最終的解決辦法

經過此問題,可以看到,我們需要的是一個獨立的python安裝包,能儘量做到不依賴外部環境。通過查詢,發現Anaconda可以滿足要求。

什麼是Anaconda

Anaconda Python 是完全免費的企業級的Python整合軟體包。主要用於大規模資料處理、預測分析和科學計算。它自帶的科學計算包注意包括:numpy, sicpy, matplotlib, spyder等。
更多資料,請參考Anaconda官網

為什麼選擇Anaconda

主要理由:1、在Linux系統裡面,Anaconda只依賴一個bash命令即可安裝,且所有的東西都只安裝在一個目錄中。這意味著它不需要過多依賴linux本地環境。2、它通過conda命令進行自動安裝、更新和刪除,這說明它對包的管理比較規範。當然,筆者對該工具的使用嘗試也是剛剛開始,不排除將來觸碰到其侷限性。本文僅做參考。

安裝及使用

首先,在官網下載相關軟體包。
然後,在伺服器上安裝。安裝命令非常簡單:

$ bash Anaconda-2.2.0-Linux-x86.sh
#開始安裝,安裝時可自主指定安裝目錄。安裝成功後,檢視:
$ which conda
/home/anaconda/bin/conda

Anaconda自帶了很多非常有用的包,但若希望繼續安裝自己需要的包,可通過conda命令進行安裝。這是因為conda與pip關聯得很好,可以很方便地自主安裝、升級工具包。比如,若希望安裝cx_Oracle,則:

$ conda install cx_Oracle #使用conda命令安裝cx_Oracle
Fetching package metadata: ....
Solving package specifications: .
Package plan for installation in environment /home/anaconda:

The following packages will be downloaded:

    package                    |            build
    ---------------------------|-----------------
    oracle-instantclient-11.2.0.4.0|                0        54.0 MB
    conda-env-2.1.4            |           py27_0          15 KB
    cx_oracle-5.1.2            |           py27_0         151 KB
    python-2.7.9               |                3        13.4 MB
    requests-2.7.0             |           py27_0         594 KB
    setuptools-15.2            |           py27_0         435 KB
    conda-3.12.0               |           py27_0         167 KB
    pip-6.1.1                  |           py27_0         1.4 MB
    ------------------------------------------------------------
                                           Total:        70.1 MB

The following NEW packages will be INSTALLED:

    cx_oracle:            5.1.2-py27_0 
    oracle-instantclient: 11.2.0.4.0-0 

The following packages will be UPDATED:

    conda:                3.10.0-py27_0 --> 3.12.0-py27_0
    conda-env:            2.1.3-py27_0  --> 2.1.4-py27_0 
    pip:                  6.0.8-py27_0  --> 6.1.1-py27_0 
    python:               2.7.9-2       --> 2.7.9-3      
    requests:             2.6.0-py27_0  --> 2.7.0-py27_0 
    setuptools:           14.3-py27_0   --> 15.2-py27_0  

Proceed ([y]/n)? y
Fetching packages ...
oracle-instant 100% |######################################################################| Time: 0:13:16  71.05 kB/s
conda-env-2.1. 100% |######################################################################| Time: 0:00:00  32.06 kB/s
cx_oracle-5.1. 100% |######################################################################| Time: 0:00:02  69.64 kB/s
python-2.7.9-3 100% |######################################################################| Time: 0:03:33  65.52 kB/s
requests-2.7.0 100% |#############################################################################| Time: 0:00:14  41.45 kB/s
setuptools-15. 100% |#############################################################################| Time: 0:00:08  50.05 kB/s
conda-3.12.0-p 100% |#############################################################################| Time: 0:00:02  62.71 kB/s
pip-6.1.1-py27 100% |#############################################################################| Time: 0:01:02  23.24 kB/s
Extracting packages ...
[      COMPLETE      ] |###############################################################################################| 100%
Unlinking packages ...
[      COMPLETE      ] |###############################################################################################| 100%
Linking packages ...
[      COMPLETE      ] |###############################################################################################| 100%

當然,一般情況下,也可以採用easy_install進行安裝。

最後,當在一臺機器上安裝完畢後,可以將下載的package或egg檔案平移到其他的目標伺服器上。