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

2021-09-22 01:52:50 字數 4027 閱讀 8507

在這裡,我們將介紹使用這些工具的三種不同工具,以及何時需要每種工具。讓我們**以下用例:

如果您使用單個版本的python如3.3+版本,並且想要管理不同的虛擬環境,那麼venv就是您所需要的。

如果你想使用多個3.3+版本的python,不管是否有虛擬環境,那麼請使用pyenv。

如果您還想使用python 2,那麼這pyenv-virtualenv是乙個不錯的選擇。

venv

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

直到python 3.6,乙個被呼叫的指令碼pyvenv也作為包裝器被包含在內venv,但是這已被棄用。它將在python 3.8中被完全刪除。當使用venv時,可以使用完全相同的功能,並且應更新所有現有的文件。

venv用於通過終端命令建立乙個新的環境:

$ python3 -m venv directory-name-to-create
啟用:

$ source name-given/bin/activate
通過以下方式停用:

$ deactivate
如果您在停用環境後需要完全刪除環境,則可以執行:

$ 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,優先順序如下:

pyenv_version環境變數(如果指定)。您可以使用該pyenv shell命令在當前shell會話中設定此環境變數。

當前目錄中的特定於應用程式的.python版本檔案(如果存在)。您可以使用pyenv local命令修改當前目錄的.python版本檔案。

通過搜尋每個父目錄找到(如果有的話)第乙個.python版本的檔案,直到找到檔案系統的根目錄。

全域性版本檔案。您可以使用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 。這意味著即使協作者沒有使用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 // for example

$ pyenv virtualenv 2.7.10 my-virtual-env-2.7.10

可以列出現有環境:

$ pyenv virtualenvs
啟用/停用:

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

安裝要求的工作原理如下所述venv。不像在venv乙個rm -r命令不需要刪除乙個環境,乙個uninstall命令存在。

多個Python版本的管理

最近需要用到locust 一套ython編寫的測試框架 來進行測試工作,發現新的版本只支援3.x版本的python,而我們使用的centos7只安裝了python2.7版本,直接對python版本進行公升級比較麻煩,於是使用pyenv來實現python的多版本管理,在此簡單記錄。什麼是pyenv p...

Conda下python多個版本管理

windows conda下python環境檢視 conda info econda建立,啟用,登出,移除虛擬環境 1 建立虛擬環境,同時指定python版本 conda create n py27 python 2.7 2 啟用環境 activate py27 3 登出or退出當前環境 deact...

如何優雅的管理APP多個介面版本

直接在controllers資料夾下增加對應版本號的資料夾,然後將controller檔案放到對應的資料夾下。訪問形式 http com v1 mobile controller v1 mobilecontroller.php showcontroller.php controller v2 mob...