1. 程式人生 > >在Linux下安裝python package到指定目錄

在Linux下安裝python package到指定目錄

最近在伺服器上需要用到一個新版本的python包,由於伺服器是公用的,所以先將其安裝到自己的工作目錄下。

更新:
可以直接用pip install scikit-image==0.12.3 -t DIR安裝指定版本的scikit-image到指定DIR目錄(期間如果DIR中沒有相應的依賴包,這些依賴包也會被安裝。),-t引數指定的目錄就是該python包直接所在的目錄,而不像–prefix所指定的那樣。至於網路和包匯入路徑請自行設定,可以參考下面的內容,也可以留言詢問。(用–prefix指定的是環境路徑,即一個python環境的父目錄,官方文件的解釋就就是Installation prefix where lib, bin and other top-level folders are placed. python包通常最終會被安裝到lib目錄下的site-packages下,期間如果需要依賴一些庫的話就會在–prefix指定的環境下檢查是否存在一些庫。如果不存在就會下載、編譯這些庫,放到這個環境下的相應位置。如果直接用-t指定包的安裝位置而不用–prefix的話,我估計檢查其它庫的依賴等操作會以預設的目錄環境進行檢查和更新,只是變了python包的最終安裝目錄而已。)
下面的內容是我以前用的一種方法,是pip的本地原始碼安裝方式。

本次安裝以scikit-image的v0.12.x版本為例。
(注意:在後面的命令中,兩個短橫(長這樣 – )和一個短橫(長這樣 - )很像,但是會比短橫稍微長一點。千萬不要混淆0.0…)

  1. 先到scikit-image的github上將分支選為v0.12.x(master是正在開發的分支,不推薦使用),然後點右邊的download ZIP按鈕獲得壓縮包。(也可以直接wget)

  2. 將壓縮包解壓到合適的目錄,比如我的就是~/workingdir也就是$HOME/workingdir

  3. 進入源目錄(如:~/workingdir/scikit-image-v0.12.x),在裡面執行命令:(如果伺服器上原來就在其它目錄安裝過這個包,那就加上–ignore-installed)
    pip install . –install-option=”–prefix=YourAddress” –ignore-installed
    (e.g. pip install . –install-option=”–prefix=$HOME/workingdir” –ignore-installed)

  4. 這個過程需要聯網下載一些東西,像我所在的伺服器是不能直接上外網的,這時需要配置代理伺服器(這個代理伺服器的IP可以問問自己的伺服器管理員)來聯網。配置方法網上有很多,我推薦一個只針對單個登入使用者的方法http://easwy.com/blog/archives/proxy-setting-on-linux-console/(注意,有時你還需要設定https_proxy)

  5. 安裝完之後會在你所指定的目錄下產生一個lib資料夾,一般python的包都會安裝在lib/python2.7/site-packages/目錄下,將這個目錄新增到PYTHONPATH中。推薦參考
    http://blog.csdn.net/shmilyringpull/article/details/8560606

  6. 如果伺服器上在其它目錄下安裝過這個包,那需要確保python直譯器先找到的lib是你的現在這個lib而不是原來那個lib。這隻需要知道python直譯器搜尋路徑的順序就行了,先是搜尋當前工作目錄,然後是環境變數PYTHONPATH,再是sys.path指定的目錄。

ps: 如果有許可權在預設路徑改動的話,直接pip install scikit-image即可
或者只是更新 pip install scikit-image –upgrade

注意了!!,由於前面要是用了–ignore-installed的話,它就會不管你伺服器上原來有什麼包,把scikit-image以及它的依賴包統統安裝一遍,這其中就有numpy包,這個包貌似還需要配置一下和MKL的連結,比較麻煩,我是沒時間去學,我的做法是刪掉這個新安裝的numpy包,讓python直譯器去找原來已經配置好的那個numpy包。