用Pyenv 和 Virtualenv 搭建單機多版本 Python 虛擬開發環境

做爲主流開發語言, 用python 開發的程序愈來愈多。 方便的是大多linux系統裏面都默認集成了python, 開發能夠隨時隨地開始。 但有時候這也成爲了一個短板, 好比說有時候咱們須要開發和調試一些須要安裝在默認python路徑裏的程序, 反覆地修改和安裝會使系統目錄愈來愈亂,這對於一些有潔癖的程序員來講是不可接受的。 還有時候咱們須要在不一樣的python版本上開發, 而系統通常只會自帶一到兩種python版本, 切換起來更是麻煩。python

本文將介紹如何利用pyenv 和virtualenv 在單機上搭建多版本python 虛擬開發環境。linux

首先咱們搞清楚pyenv 和virtualenv分別是幹什麼的。git

pyenv能夠幫助你在一臺開發機上創建多個版本的python環境, 並提供方便的切換方法。程序員

virtualenv則提供了一種功能, 就是將一個目錄創建爲一個虛擬的python環境, 這樣的話, 用戶能夠創建多個虛擬環境, 每一個環境裏面的python版本能夠是不一樣的, 也能夠是相同的, 並且環境之間相互獨立。github

若是解釋得還不是很清楚的話,咱們舉例說明。ubuntu

首先咱們能夠用pyenv 安裝多個python 版本, 好比安裝了2.5, 2.6, 3.3 三個版本。 用戶能夠隨意切換當前默認的python版本。 但這時候, 每一個版本的環境還是惟一的, 若是咱們想在環境中安裝一些庫的話, 仍是會致使這個版本的環境被修改。 這個時候, 若是咱們用virtual env去創建虛擬環境, 就能夠徹底保證系統路徑的乾淨。不管你在虛擬環境中安裝了什麼程序, 都不會影響已安裝版本的系統環境。bash

說了這麼多, 仍是動手實踐一下來得實在。本文的例子是在一臺乾淨的Ubuntu機器上進行的python2.7

1. 首先咱們安裝pyenvcurl

由於個人Ubuntu是乾淨的, 因此還須要先安裝curl 和 git工具

sudo apt-get install curl git-core複製代碼

接下來安裝pyenv

curl -L https://raw.github.com/yyuu/pyenv-installer/master/bin/pyenv-installer | bash複製代碼

這個命令會把pyenv安裝到當前用戶的 ~/.pyenv目錄下.

同時, 咱們還須要把下面代碼存到~/.bashrc文件中:

export PYENV_ROOT="${HOME}/.pyenv"

if [ -d "${PYENV_ROOT}" ]; then
  export PATH="${PYENV_ROOT}/bin:${PATH}"
  eval "$(pyenv init -)"
fi複製代碼

這段代碼的做用主要是指明pyenv的位置, 以便之後能夠直接在命令行裏面運行pyenv命令。 保存在~/.bashrc 文件中是爲了每次用戶登錄後自動生效。

因此若是你是第一次運行命令而且沒有註銷的話, 這一段是不會生效的, 咱們還須要運行下面的命令令其生效

source ~/.bashrc複製代碼

而後就能夠直接在命令行裏面敲pyenv了。

2. 安裝一些必須的包

sudo apt-get build-dep python2.7複製代碼

後面安裝其餘版本python的時候會須要這些包

3. 安裝某個版本的python

首先咱們能夠查看一下有哪些版本的python 能夠安裝

pyenv install --list複製代碼

結果以下:

2.4
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
2.4.6
2.5
...複製代碼

接下來, 做爲例子咱們安裝兩個版本 (2.7.1 和 3.3.5)

pyenv install 2.7.1複製代碼
pyenv install 3.3.5複製代碼

安裝完畢後, 咱們能夠查看安裝的狀況

pyenv versions複製代碼

輸出結果以下:

* system (set by /home/tony/.pyenv/version)
  2.7.1
  3.3.5複製代碼

簡單來講咱們已經在這臺機器上安裝了三個版本的python

system 表明當前系統的python 版本

2.7.1 和 3.3.5是咱們用pyenv安裝的

*表示當前的python版本, 能夠看到, 咱們還在使用的是默認的system 自帶的python版本

4. 切換python版本作一下測試

既然已經安裝了兩個其餘版本的python, 咱們來作一下測試

pyenv global 2.7.1複製代碼

這條命令就是將當前python 版本切換到2.7.1

再次運行 pyenv versions, 結果以下:

system 
* 2.7.1 (set by /home/tony/.pyenv/version)
  3.3.5複製代碼

能夠看到當前的python 版本已經切換到2.7.1了, 若是還不放心, 直接運行 ‘python’ 命令進行驗證:

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.
>>>複製代碼

這裏能夠清楚看到, 當前版本確實是2.7.1

同理, 咱們能夠繼續用python global在各個版本之間進行切換, 若是要切換回系統版本, 請用:

pyenv global system複製代碼

若是要卸載某個版本的python, 能夠這樣:

pyenv uninstall x.x.x複製代碼

5. 利用virtualenv 建立虛擬python環境

如今咱們已經安裝了多個python版本,可是這還不夠, 某些有潔癖的程序員是必定要系統環境足夠乾淨的,這時候咱們可使用virtualenv來建立虛擬python環境

virtualenv本是一個獨立的工具,官網在這裏:https://pypi.python.org/pypi/virtualenv

幸運的是,若是你是安裝咱們前面的方式安裝pyenv的,那它已經幫咱們以plugin的形式安裝好了virtualenv, 咱們只要使用就行了

首先咱們建立一個2.7.1的虛擬環境

pyenv virtualenv 2.7.1 env271複製代碼

這條命令在本機上建立了一個名爲env271的python虛擬環境,這個環境的真實目錄位於:~/.pyenv/versions/

注意,命令中的 ‘2.7.1’ 必須是一個安裝前面步驟已經安裝好的python版本, 不然會出錯。

而後咱們能夠繼續經過 ‘pyenv versions’ 命令來查看當前的虛擬環境, 結果以下:

* system (set by /home/tony/.pyenv/version)
  2.7.1
  3.3.5
  env271複製代碼

這裏咱們能夠看到, 除了已經安裝的python版本, 咱們多出了一個env271的python虛擬環境

6. 切換和使用新的python虛擬環境

切換到新的虛擬環境的命令爲

pyenv activate env271複製代碼

接下來咱們的python環境就已經切換到2.7.1的虛擬環境了, 運行 ‘python’ 命令認證

(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版本已是2.7.1, 並且是在虛擬環境之中 (env271)

下面基本上你就能夠在這個虛擬環境裏面隨心所欲了 🙂 不再用擔憂系統路徑被搞亂的問題了。

若是要切換回系統環境, 運行這個命令便可

pyenv deactivate複製代碼

那若是要刪除這個虛擬環境呢? 答案簡單並且粗暴,只要直接刪除它所在的目錄就好:

rm -rf ~/.pyenv/versions/env271/複製代碼

至此大功告成!

本文簡單介紹瞭如何利用pyenv 和virtualenv來單機多版本python虛擬開發環境的方法,

這兩個工具還有不少功能, 沒法一一詳述,具體能夠參考

相關文章
相關標籤/搜索