如何管理多個Python版本和虛擬環境

  • 多個Python版本:在同一臺機器上安裝不一樣的Python,例如2.7和3.4。
  • 虛擬環境:獨立的環境,既能夠同時安裝特定版本的Python,也能夠安裝任何特定於項目的軟件包,而不會影響任何其餘項目。

在這裏,咱們將介紹使用這些工具的三種不一樣工具,以及什麼時候須要每種工具。讓咱們探討如下用例:python

  • venv / pyvenv
  • pyenv
  • pyenv-virtualenv

若是您使用單個版本的Python如3.3+版本,而且想要管理不一樣的虛擬環境,那麼venv就是您所須要的。shell

若是你想使用多個3.3+版本的Python,不論是否有虛擬環境,那麼請使用pyenv。bash

若是您還想使用Python 2,那麼這pyenv-virtualenv是一個不錯的選擇。工具

VENV


Python 3.3+版本中包含venv包。它是建立輕量級虛擬環境的理想選擇。ui

直到Python 3.6,一個被調用的腳本pyvenv也做爲包裝器被包含在內venv,可是這已被棄用。它將在Python 3.8中被徹底刪除。當使用venv時,可使用徹底相同的功能,而且應更新全部現有的文檔。spa

venv用於經過終端命令建立一個新的環境:code

$ python3 -m venv directory-name-to-create

激活:blog

$ source name-given/bin/activate

經過如下方式停用:three

$ deactivate

若是您在停用環境後須要徹底刪除環境,則能夠運行:ip

$ rm -r name-given

默認狀況下,它建立的環境是您當前正在使用的Python版本。若是您正在編寫文檔,並但願讀者使用正確版本的Python,則能夠在命令中指定主要版本號和次要版本號,以下所示:

$ python3.6 -m venv example-three-six

若是閱讀器使用3.6之外的版本,則該命令將不會成功,並將在其錯誤消息中指示。可是,任何補丁版本(例如3.6.4)均可以使用。

當環境處於活動狀態時,任何包均可以經過pip正常安裝到它。默認狀況下,新建立的環境包含計算機上已安裝的任何軟件包。由於pip它自己不必定會安裝在機器上。建議先使用,升級pip到最新版本pip install --upgrade pip。

項目一般會有一個requirements.txt指定其依賴項的文件。這容許使用shortcut命令pip install -r requirements.txt命令將全部包快速安裝到新建立的虛擬環境中。它們只存在於虛擬環境中。它在停用時將不可用,但在從新激活時將保持不變。

若是您不須要使用Python自己的其餘版本,那麼您只須要建立隔離的、特定於項目的虛擬環境。

pyenv


若是您但願在一臺計算機上使用多個版本的Python,那麼pyenv是在版本之間安裝和切換的經常使用工具。這不能與前面提到的貶值的pyenv腳本混淆。它不是與Python綁定的,必須單獨安裝。

pyenv文檔對它的工做原理進行了很好的描述,所以咱們將在這裏簡單介紹如何使用它。首先,咱們須要安裝它。若是使用Mac OS X,可使用Homebrew執行此操做,或者考慮其餘安裝選項。

$ brew update
$ brew install pyenv

接下來,在shell腳本的底部添加如下內容,以容許pyenv自動更改版本:

eval "$(pyenv init -)"

打開您在使用外殼腳本,經過$ ~/.zshrc,$ ~/.bashrc或$ ~/.bash_profile複製並粘貼在上面的行。

運行pyenv版本將顯示當前安裝了哪些Python版本,在當前使用的版本旁邊有一個*。pyenv version直接顯示了這一點,python——version能夠用來驗證這一點。

要安裝一個附加版本,好比3.4.0,只需使用pyenv install 3.4.0。

pyenv從四個方面來決定使用哪一個版本的Python,優先順序以下:

  1. PYENV_VERSION環境變量(若是指定)。您可使用該pyenv shell命令在當前shell會話中設置此環境變量。
  2. 當前目錄中的特定於應用程序的.python版本文件(若是存在)。您可使用pyenv local命令修改當前目錄的.python版本文件。
  3. 經過搜索每一個父目錄找到(若是有的話)第一個.python版本的文件,直到找到文件系統的根目錄。
  4. 全局版本文件。您可使用pyenv全局命令修改這個文件。若是不存在全局版本文件,pyenv假設您但願使用「system」Python。(換句話說,若是pyenv不在您的路徑中,則運行哪一個版本。)

當設置一個使用Python 3.6.4的新項目時,pyenv local 3.6.4將運行在它的根目錄中。這將設置版本,並建立一個.python-version文件,以便其餘貢獻者的機器可以接收它。

pyenv命令的完整描述能夠添加書籤。

pyenv和venv

使用Python 3.3+時,咱們如今知道如何在不一樣版本的Python之間安裝和切換,以及如何建立新的虛擬環境。

舉個例子,假設咱們正在創建一個使用Python 3.4的項目。

首先,咱們可使用設置本地版本pyenv local 3.4.0。

若是咱們而後運行python3 -m venv example-project新的虛擬環境將example-project使用咱們在本地啓用的Python 3.4.0進行設置。

咱們激活使用source example-project/bin/activate並能夠開始工做。

接下來,咱們能夠選擇記錄協做者應該使用的內容python3.4 -m venv <name>。這意味着即便協做者沒有使用pyenv該python3.4命令,若是他們的Python版本不是咱們想要的主要和次要版本(3和4),也會出錯。

若是咱們認爲任何大於3.4的版本都是能夠接受的,那麼咱們也能夠選擇使用python3而不是python3.4,就像合做者使用3.6同樣,不然他們也會收到一個錯誤。這是一個特定於項目的決策。

pyenv-virtualenv


pyenv可用於安裝Python 2和3版本。可是,正如咱們所看到的,venv僅限於大於3.3的Python版本。

pyenv-virtualenv是一個建立與pyenv集成的虛擬環境的工具,適用於全部Python版本。若是可能,仍然建議使用官方的Python venv。可是,例如,若是您正在建立一個基於2.7.13的虛擬環境,那麼這是對pyenv的讚美。

若是您已經使用它,它也適用於Anaconda和Miniconda conda環境。virtualenv還存在一個名爲的工具。這裏沒有涉及,但它最後是聯繫在一塊兒的。

安裝pyenv,接下來可使用Homebrew(或替代品)進行安裝,以下所示:

$ brew install pyenv-virtualenv

接下來在你的 .zshrc,, .bashrc或 .bash_profile(取決於你使用的shell)在底部添加如下內容:

eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"

這容許pyenv在移動目錄時自動激活和停用環境。

要建立新的虛擬環境,請使用:

$ pyenv virtualenv <version> <name-to-give-it>
// for example
$ pyenv virtualenv 2.7.10 my-virtual-env-2.7.10

能夠列出現有環境:

$ pyenv virtualenvs

激活/停用:

$ pyenv activate <name>
$ pyenv deactivate

在撰寫本文時activate,prompt changing will be removed from future release將顯示使用警告。這是預期的,僅指(env-name)在shell中顯示的內容,而不是activate命令自己的使用。

安裝要求的工做原理以下所述venv。不像在venv一個rm -r命令不須要刪除一個環境,一個uninstall命令存在。

相關文章
相關標籤/搜索