如果我們要同時開發多個應用程序,每個應用可能需要各自擁有一套“獨立”的Python運行環境,我們可以使用virtualenv解決這個問題,它可以為一個應用創建一套“隔離”的Python運行環境。
一. 安裝virtualenv
sudo apt-get install python-virtualenv or sudo easy_install virtualenv
二. 創建環境
創建python2環境:
virtualenv myenv
創建python3環境
virtualenv -p /usr/bin/python3 myenv3
如果你的虛擬環境安裝庫的時候出問題,比如python3環境
需要安裝pip3
sudo apt-get install python3-pip
創建完全隔離的Python環境,實質是創建了一個文件夾,我們的操作都是在這個目錄里面進行的。
創建的虛擬環境文件夾的位置在家目錄下,名為myenv
默認情況下,virtualenv會引用系統python環境中 site-packages 中的庫,並將其復制到虛擬python環境的庫中。我們可以設置 --no-site-packages 參數取消對系統Python庫的引用,以此來創建一個完全純凈的python環境。
virtualenv --no-site-packages myenv
myenv的lib/目錄下,便是我們創建的python虛擬環境,這個默認的python版本由我們的系統python環境決定,比如我本機的python環境為python2.7,virtualenv便默認創建python2.7的環境。當然,我們也可以創建自定義版本的python虛擬環境,這在后文有介紹。
三. 激活虛擬環境
cd ~/myenv/bin && source ./activate
我們可以看到在命令行的前面已經加上了我們虛擬環境的名字“myenv”,表示當前環境是一個名為myenv的Python虛擬環境。
此時我們便可以在這個虛擬環境中,進行相關操作了,比如安裝第三方庫。
我們用pip安裝第三方庫shodan,然后在虛擬環境的myenv/lib/python2.7/site-packages目錄下,我們可以找到安裝好的庫。
四.使用Pyenv管理python版本
1.安裝 pyenv
git clone https://github.com/yyuu/pyenv.git ~/.pyenv echo 'export PYENV_ROOT="$HOME/.pyenv"' >> /etc/profile echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> /etc/profile echo 'eval "$(pyenv init -)"' >> /etc/profile
安裝完成以后,需要重新載入配置文件,或者退出以后重新登錄,以使/etc/profile中的配置生效。
我們可以通過下面的命令驗證pyenv是否正確安裝以及獲取pyenv的幫助信息:
1.使用 pyenv
pyenv install
安裝一個 Python 版本,到 $PYENV_ROOT/versions 路徑下。
pyenv install -v 2.7.3
卸載
pyenv uninstall 2.7.3
安裝python時會報錯,比如:
WARNING: The Python bz2 extension was not compiled. Missing the bzip2 lib? WARNING: The Python sqlite3 extension was not compiled. Missing the SQLite3 lib? ERROR: The Python ssl extension was not compiled. Missing the OpenSSL lib? WARNING: The Python readline extension was not compiled. Missing the GNU readline lib?
安裝相關依賴即可
apt-get install bzip2-devel bzip2-libs -y
apt-get install sqlite-devel -y
apt-get install openssl openssl-devel openssl-static -y apt-get install readline readline-devel readline-static -y
pyenv versions
# 查看當前 pyenv 可檢測到的所有版本,處於激活狀態的版本前以 * 標示。
$ pyenv versions
system
* 3.5.1 (set by /root/.pyenv/version) 3.5.1/envs/flask_py351 3.5.1/envs/pelican flask_py351 pelican
創建新的python環境,位於 ~/.pyenv/versions/
pyenv virtualenv 2.7.1 env271
切換到新的環境:$ pyenv activate env271
退回到系統環境:$ pyenv deactivate
刪除新創建的環境:$ rm -rf ~/.pyenv/versions/env271/
pyenv rehash
為所有已安裝的可執行文件 (如:~/.pyenv/versions/*/bin/*) 創建 shims
每當你增刪了 Python 版本或帶有可執行文件的包(如 pip)以后,都應該執行該命令
pyenv install 2.7.3 pyenv rehash
pyenv global
設置全局的 Python 版本,通過將版本號寫入 ~/.pyenv/version 文件的方式。
pyenv global 3.4.0
設置面向程序的本地版本,通過將版本號寫入當前目錄下的 .python-version 文件的方式。
通過這種方式設置的 Python 版本優先級較 global 高。pyenv 會從當前目錄開始向上逐級查找 .python-version 文件,直到根目錄為止。若找不到,就用 global 版本。
pyenv local 2.7.3
設置面向 shell 的 Python 版本,通過設置當前 shell 的 PYENV_VERSION 環境變量的方式。
這個版本的優先級比 local 和 global 都要高。--unset 參數可以用於取消當前 shell 設定的版本。
pyenv shell pypy-2.2.1 pyenv shell --unset
參考:https://my.oschina.net/lionets/blog/267469