在工作站上使用自己的 Python 並安裝自訂套件

作者: Yong-Siang Shih / Sun 22 June 2014 / 分類: Notes

linux, Python, pyvenv, virtualenv

使用工作站時常會遇到想要自行安裝 Python 套件,結果卻沒有管理權限的問題。雖然可以自行在 local 安裝套件,或者是乾脆自行安裝 local 版的 Python,但設置的程序稍微有點麻煩,而且遇到想要同時使用多種版本的 Python 時,設置就更複雜了。

遇到這種情形的時候,建立 Python 的 virtual environment 就可以方便的使用多個不同版本與環境的 Python。

pyvenv

pyvenv 是在 Python 3.3 後新加入官方 Python 發行版的一個 module,可以讓使用者建立自己的 virtual environment。雖然很可惜的,Debian 系的 OS 因為 bug 732703 所以暫時無法使用。不過還是介紹一下他的用法:

  1. 在 ENV_DIR 建立 virtual environment,--system-site-packages 參數則是讓系統安裝的套件也能被這個環境使用,3.4 則可選擇不同版本:

    pyvenv-3.4 [--system-site-packages] ENV_DIR
  2. 啟用特定的 virtual environment:

    source ENV_DIR/bin/activate

    這時你就會發現在 prompt 前多了個名字,然後直接用 pip 安裝套件就會裝到這個 local 的 environment 了:

    (name)$
    

    以後要啟用某個 environment 時都要重新用 2 提到的方法啟用。

virtualenv

如果工作站上有安裝 virtualenv 的話,也可以用這個套件達到相同功能,好處是 Python 2 也可以用。

  1. 在 ENV_DIR 建立 virtual environment,--system-site-packages 參數則是讓系統安裝的套件也能被這個環境使用,python3.4 則可選擇不同版本(包含 python2):

    virtualenv [--system-site-packages] -p python3.4 ENV_DIR
    
  2. 啟用特定的 virtual environment:

    source ENV_DIR/bin/activate
    

    這時你就會發現在 prompt 前多了個名字,然後直接用 pip 安裝套件就會裝到這個 local 的 environment 了:

    (name)$
    

    使用 which 可以看到 python 路徑:

    which python
    ENV_DIR/bin/python
    
    which pip
    ENV_DIR/bin/pip
    

    注意到如果當初指定用 python3.4 的話,這裡雖然下的是 python,其實也是 3.4 版。以後要啟用某個 environment 時都要重新用 2 提到的方法啟用。

如果有裝 virtualenvwrapper 的話其實還有更方便的方法,可以自行參考文件。

Local Packages

如果實在是無法建立 virtual environment 的話,只能使用舊方法來安裝 local 套件了,首先在 .bashrc 加入對應的參數,使得執行 Python 時會載入 local 套件:

alias python3="PYTHONPATH=$PYTHONPATH:$HOME/.local/lib/python3.4/site-packages python3"
alias python="PYTHONPATH=$PYTHONPATH:$HOME/.local/lib/python2.7/site-packages python"

其中各版本的路徑可自行調整。

接下來安裝套件時都加上 –user 參數即可,例如:

pip3 install --user flask
python3.4 setup.py install --user

pip2 install --user flask
python2 setup.py install --user
Notebook
Yong-Siang Shih

作者

Yong-Siang Shih

軟體工程師,機器學習科學家,開放原始碼愛好者。曾在 Appier 從事機器學習系統開發,也曾在 Google, IBM, Microsoft 擔任軟體實習生。喜好探索學習新科技。* 在 GitHub 上追蹤我

載入 Disqus 評論