用Pyenv 和 Virtualenv 搭建單機(jī)多版本 Python 虛擬開發(fā)環(huán)境
作為主流開發(fā)語言, 用Python 開發(fā)的程序越來越多。 方便的是大多Linux系統(tǒng)里面都默認(rèn)集成了Python, 開發(fā)可以隨時(shí)隨地開始。 但有時(shí)候這也成為了一個(gè)短板, 比如說有時(shí)候我們需要開發(fā)和調(diào)試一些需要安裝在默認(rèn)Python路徑里的程序, 反復(fù)地修改和安裝會(huì)使系統(tǒng)目錄越來越亂,這對于一些有潔癖的程序員來說是不可接受的。 還有時(shí)候我們需要在不同的Python版本上開發(fā), 而系統(tǒng)一般只會(huì)自帶一到兩種Python版本, 切換起來更是麻煩。
本文將介紹如何利用pyenv 和virtualenv 在單機(jī)上搭建多版本Python 虛擬開發(fā)環(huán)境。
首先我們搞清楚pyenv 和virtualenv分別是干什么的。
pyenv可以幫助你在一臺(tái)開發(fā)機(jī)上建立多個(gè)版本的Python環(huán)境, 并提供方便的切換方法。
virtualenv則提供了一種功能, 就是將一個(gè)目錄建立為一個(gè)虛擬的Python環(huán)境, 這樣的話, 用戶可以建立多個(gè)虛擬環(huán)境, 每個(gè)環(huán)境里面的Python版本可以是不同的, 也可以是相同的, 而且環(huán)境之間相互獨(dú)立。
如果解釋得還不是很清楚的話,我們舉例說明。
首先我們可以用pyenv 安裝多個(gè)Python 版本, 比如安裝了2.5, 2.6, 3.3 三個(gè)版本。 用戶可以隨意切換當(dāng)前默認(rèn)的Python版本。 但這時(shí)候, 每個(gè)版本的環(huán)境仍是唯一的, 如果我們想在環(huán)境中安裝一些庫的話, 還是會(huì)導(dǎo)致這個(gè)版本的環(huán)境被修改。 這個(gè)時(shí)候, 如果我們用virtual env去建立虛擬環(huán)境, 就可以完全保證系統(tǒng)路徑的干凈。無論你在虛擬環(huán)境中安裝了什么程序, 都不會(huì)影響已安裝版本的系統(tǒng)環(huán)境。
說了這么多, 還是動(dòng)手實(shí)踐一下來得實(shí)在。本文的例子是在一臺(tái)干凈的Ubuntu機(jī)器上進(jìn)行的
1. 首先我們安裝pyenv
因?yàn)槲业腢buntu是干凈的, 所以還需要先安裝curl 和 git
sudo apt-get install curl git-core
接下來安裝pyenv
curl -L https://raw.github.com/yyuu/pyenv-installer/master/bin/pyenv-installer | bash
這個(gè)命令會(huì)把pyenv安裝到當(dāng)前用戶的 ~/.pyenv目錄下.
同時(shí), 我們還需要把下面代碼存到~/.bashrc文件中:
export PYENV_ROOT="${HOME}/.pyenv" if [ -d "${PYENV_ROOT}" ]; then export PATH="${PYENV_ROOT}/bin:${PATH}" eval "$(pyenv init -)" fi
這段代碼的作用主要是指明pyenv的位置, 以便以后可以直接在命令行里面運(yùn)行pyenv命令。 保存在~/.bashrc 文件中是為了每次用戶登陸后自動(dòng)生效。
所以如果你是第一次運(yùn)行命令并且沒有注銷的話, 這一段是不會(huì)生效的, 我們還需要運(yùn)行下面的命令令其生效
source ~/.bashrc
然后就可以直接在命令行里面敲pyenv了。
2. 安裝一些必須的包
sudo apt-get build-dep Python2.7
后面安裝其他版本Python的時(shí)候會(huì)需要這些包
3. 安裝某個(gè)版本的Python
首先我們可以查看一下有哪些版本的Python 可以安裝
pyenv install --list
結(jié)果如下:
2.4 2.4.1 2.4.2 2.4.3 2.4.4 2.4.5 2.4.6 2.5 ...
接下來, 作為例子我們安裝兩個(gè)版本 (2.7.1 和 3.3.5)
pyenv install 2.7.1
pyenv install 3.3.5
安裝完畢后, 我們可以查看安裝的情況
pyenv versions
輸出結(jié)果如下:
* system (set by /home/tony/.pyenv/version) 2.7.1 3.3.5
簡單來說我們已經(jīng)在這臺(tái)機(jī)器上安裝了三個(gè)版本的Python
system 代表當(dāng)前系統(tǒng)的Python 版本
2.7.1 和 3.3.5是我們用pyenv安裝的
*表示當(dāng)前的Python版本, 可以看到, 我們還在使用的是默認(rèn)的system 自帶的Python版本
4. 切換Python版本做一下測試
既然已經(jīng)安裝了兩個(gè)其他版本的Python, 我們來做一下測試
pyenv global 2.7.1
這條命令就是將當(dāng)前Python 版本切換到2.7.1
再次運(yùn)行 pyenv versions, 結(jié)果如下:
system * 2.7.1 (set by /home/tony/.pyenv/version) 3.3.5
可以看到當(dāng)前的Python 版本已經(jīng)切換到2.7.1了, 如果還不放心, 直接運(yùn)行 ‘Python’ 命令進(jìn)行驗(yàn)證:
tony@ubuntu:~$ Python Python 2.7.1 (r271:86832, May 9 2014, 01:07:17) [GCC 4.8.2] on Linux3 Type "help", "copyright", "credits" or "license" for more information. >>>
這里可以清楚看到, 當(dāng)前版本確實(shí)是2.7.1
同理, 我們可以繼續(xù)用Python global在各個(gè)版本之間進(jìn)行切換, 如果要切換回系統(tǒng)版本, 請用:
pyenv global system
如果要卸載某個(gè)版本的Python, 可以這樣:
pyenv uninstall x.x.x
5. 利用virtualenv 創(chuàng)建虛擬Python環(huán)境
現(xiàn)在我們已經(jīng)安裝了多個(gè)Python版本,但是這還不夠, 某些有潔癖的程序員是一定要系統(tǒng)環(huán)境足夠干凈的,這時(shí)候我們可以使用virtualenv來創(chuàng)建虛擬Python環(huán)境
virtualenv本是一個(gè)獨(dú)立的工具,官網(wǎng)在這里:https://pypi.Python.org/pypi/virtualenv
幸運(yùn)的是,如果你是安裝我們前面的方式安裝pyenv的,那它已經(jīng)幫我們以plugin的形式安裝好了virtualenv, 我們只要使用就好了
首先我們創(chuàng)建一個(gè)2.7.1的虛擬環(huán)境
pyenv virtualenv 2.7.1 env271
這條命令在本機(jī)上創(chuàng)建了一個(gè)名為env271的Python虛擬環(huán)境,這個(gè)環(huán)境的真實(shí)目錄位于:~/.pyenv/versions/
注意,命令中的 ‘2.7.1’ 必須是一個(gè)安裝前面步驟已經(jīng)安裝好的Python版本, 否則會(huì)出錯(cuò)。
然后我們可以繼續(xù)通過 ‘pyenv versions’ 命令來查看當(dāng)前的虛擬環(huán)境, 結(jié)果如下:
* system (set by /home/tony/.pyenv/version) 2.7.1 3.3.5 env271
這里我們可以看到, 除了已經(jīng)安裝的Python版本, 我們多出了一個(gè)env271的Python虛擬環(huán)境
6. 切換和使用新的Python虛擬環(huán)境
切換到新的虛擬環(huán)境的命令為
pyenv activate env271
接下來我們的Python環(huán)境就已經(jīng)切換到2.7.1的虛擬環(huán)境了, 運(yùn)行 ‘Python’ 命令認(rèn)證
(env271)tony@ubuntu:~$ Python Python 2.7.1 (r271:86832, May 9 2014, 01:07:17) [GCC 4.8.2] on Linux3 Type "help", "copyright", "credits" or "license" for more information. >>>
可以看到, Python版本已經(jīng)是2.7.1, 而且是在虛擬環(huán)境之中 (env271)
下面基本上你就可以在這個(gè)虛擬環(huán)境里面為所欲為了 :) 再也不用擔(dān)心系統(tǒng)路徑被搞亂的問題了。
如果要切換回系統(tǒng)環(huán)境, 運(yùn)行這個(gè)命令即可
pyenv deactivate
那如果要?jiǎng)h除這個(gè)虛擬環(huán)境呢? 答案簡單而且粗暴,只要直接刪除它所在的目錄就好:
rm -rf ~/.pyenv/versions/env271/
至此大功告成!
本文簡單介紹了如何利用pyenv 和virtualenv來單機(jī)多版本Python虛擬開發(fā)環(huán)境的方法,
這兩個(gè)工具還有很多功能, 無法一一詳述,具體可以參考他們的官方文檔。
————
本文完,如果你想繼續(xù)學(xué)習(xí),可以點(diǎn)擊下面的鏈接,繼續(xù)看: