簡體   English   中英

virtualenv 和 pyenv 是什么關系?

[英]What is the relationship between virtualenv and pyenv?

我最近學習了如何在我的工作流程中使用 virtualenv 和 virtualenvwrapper,但我在一些指南中看到了 pyenv,但我似乎無法理解 pyenv 是什么以及它與 virtualenv 有何不同/相似之處。 pyenv 是 virtualenv 的更好/更新替代品還是免費工具? 如果后者有什么不同,兩者(和 virtualenvwrapper,如果適用)如何協同工作?

Pyenvvirtualenv是非常不同的工具,它們以不同的方式工作來做不同的事情:

  • Pyenv是一個 bash 擴展——不能在 Windows 上運行——它會攔截你對 python、pip 等的調用,將它們定向到幾個系統 python 工具鏈之一。 因此,您始終可以使用已安裝在所選 Python 版本中的所有庫——因此,這對於必須在不同版本的 Python 之間切換的用戶來說非常有用。

  • VirtualEnv是純 python,因此可以在任何地方使用,它會復制(可選)特定版本的python 和 pip 本地到激活環境,其中可能包含或不包含指向當前系統工具鏈的鏈接,如果沒有,您可以只將一個已知的庫子集安裝到該環境中。 因此,它幾乎肯定會更好地用於測試和部署,因為您確切地知道使用哪些庫、哪些版本,並且全局更改不會影響您的模塊。

venv python > 3.3

請注意,從 Python 3.3 開始,有一個名為 venv 的 VirtualEnv 內置實現(在某些安裝中,有一個名為 pyvenv 的包裝器 - 此包裝器在 Python 3.6 中已棄用),可能應該優先使用它。 為了避免包裝器可能出現的問題,通過使用/path/to/python3 -m venv desired/env/path直接使用它通常是一個好主意,或者您可以使用py -3 -m venv desired/env/path在 windows 上使用出色的py python 選擇器py -3 -m venv desired/env/path 它將創建使用desired/env/path配置指定的目錄並適當地填充它。 一般來說,它非常像使用 VirtualEnv。

附加工具

有許多工具值得一提和考慮,因為它們可以幫助使用上述一個或多個:

  • VirtualEnvWrapper管理和簡化 VirtualEnv- Cross Platform的使用和管理。
  • pyenv-virtualenvpyenv-installer 安裝,它提供了用於管理和連接 VirtualEnv 的 PyEnv 工具——這樣你就可以擁有一個包含多個 python 版本的基礎安裝,並在每個版本中創建隔離的環境——Linux/OS-十 由 Johann Visagie 推薦
  • PyInstaller可以獲取您的 Python 代碼,可能是在 VirtualEnv 下開發和測試的,並將其捆綁在一起,以便它可以運行一個沒有安裝您的Python版本的平台 - 請注意,它不是交叉編譯器,您將需要一個 Windows(虛擬-) 機器來構建 Windows 安裝等,但即使在您可以確定將安裝 python 但不能確定 python 的版本和所有庫是否與您的代碼兼容的情況下,它也很方便。

精簡版:

  • virtualenv允許您通過從現有的克隆來創建本地(每個目錄)獨立的 python 安裝
  • pyenv允許您一起安裝(從源代碼構建)不同版本的 Python; 然后您可以使用 virtualenv 克隆它們或使用 pyenv 選擇在任何給定時間運行哪個

更長的版本:

Virtualenv 允許您創建自定義 Python 安裝,例如在您的項目的子目錄中。 這是通過從系統上某處的現有 Python 安裝克隆來完成的(一些文件被復制,一些被重用/共享以節省空間)。 因此,您的每個項目都可以在各自的 virtualenv 下擁有自己的python (甚至幾個)。 對於某些/所有 virtualenv 來說,即使擁有相同版本的python (例如 3.8.5)也沒有沖突,這完全沒問題——它們分開生活,彼此不了解。 如果您想從 shell 使用這些python的任何一個,您必須activate它(通過運行一個腳本來臨時修改您的PATH以確保該 virtualenv 的bin/目錄首先出現)。 從那時起,調用python (或pip等)將調用該 virtualenv 的版本,直到您deactivate它(恢復PATH )。 也可以使用絕對路徑調用 virtualenv Python - 這在例如從腳本調用 Python 時很有用。

Pyenv 的運行范圍比 virtualenv 更廣泛。 它用於安裝(從源代碼構建)任意版本的 Python(它擁有可用版本的寄存器)。 默認情況下,它們都安裝在~/.pyenv ,因此它們比 virtualenv 更“全局”。 然后,它允許您在使用python命令(不帶 virtualenv)時配置要運行的 Python 版本。 這可以在全局級別完成,也可以單獨完成,每個目錄(通過將.python-version文件放在目錄中)。 它是通過將 pyenv 的 shim python腳本添加到您的PATH (永久地,與 virtualenv 不同)來完成的,然后決定調用哪個“真正的” python 您甚至可以配置 pyenv 以調用您的 virtualenv python 之一(通過使用pyenv-virtualenv插件)。 您還可以復制 Python 版本(通過給它們不同的名稱)並讓它們分開。

使用 pyenv 可以方便地安裝 Python 以供后續 virtualenv 使用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM