使用 virtualenvwrapper 構建 Python 虛擬環境
Python 對管理虛擬環境的支持,已經提供了一段時間了。Python 3.3 甚至增加了內置的 venv
模塊,用於創建沒有第三方庫的環境。Python 程序員可以使用幾種不同的工具來管理他們的環境,我使用的工具叫做 virtualenvwrapper。
虛擬環境是將你的 Python 項目及其依賴關係與你的系統安裝的 Python 分離的一種方式。如果你使用的是基於 macOS 或 Linux 的操作系統,它很可能在安裝中附帶了一個 Python 版本,事實上,它很可能依賴於那個特定版本的 Python 才能正常運行。但這是你的計算機,你可能想用它來達到自己的目的。你可能需要安裝另一個版本的 Python,而不是操作系統提供的版本。你可能還需要安裝一些額外的庫。儘管你可以升級你的系統 Python,但不推薦這樣做。你也可以安裝其他庫,但你必須注意不要干擾系統所依賴的任何東西。
虛擬環境是創建隔離的關鍵,你需要安全地修改不同版本的 Python 和不同組合的包。它們還允許你為不同的項目安裝同一庫的不同版本,這解決了在相同環境滿足所有項目需求這個不可能的問題。
為什麼選擇 virtualenvwrapper
而不是其他工具?簡而言之:
- 與
venv
需要在項目目錄內或旁邊有一個venv
目錄不同,virtualenvwrapper
將所有環境保存在一個地方:默認在~/.virtualenvs
中。 - 它提供了用於創建和激活環境的命令,而且激活環境不依賴於找到正確的
activate
腳本。它只需要(從任何地方)workon projectname
而不需要source ~/Projects/flashylights-env/bin/activate
。
開始使用
首先,花點時間了解一下你的系統 Python 是如何配置的,以及 pip
工具是如何工作的。
以樹莓派系統為例,該系統同時安裝了 Python 2.7 和 3.7。它還提供了單獨的 pip
實例,每個版本一個:
- 命令
python
運行 Python 2.7,位於/usr/bin/python
。 - 命令
python3
運行 Python 3.7,位於/usr/bin/python3
。 - 命令
pip
安裝 Python 2.7 的軟體包,位於/usr/bin/pip
。 - 命令
pip3
安裝 Python 3.7 的包,位於/usr/bin/pip3
。
![Python commands on Raspberry Pi](/data/attachment/album/202103/04/072404z8dyy04z7hdl0q4l.png "Python commands on Raspberry Pi")
在開始使用虛擬環境之前,驗證一下使用 python
和 pip
命令的狀態是很有用的。關於你的 pip
實例的更多信息可以通過運行 pip debug
或 pip3 debug
命令找到。
在我運行 Ubuntu Linux 的電腦上幾乎是相同的信息(除了它是 Python 3.8)。在我的 Macbook 上也很相似,除了唯一的系統 Python 是 2.6,而我用 brew
安裝 Python 3.8,所以它位於 /usr/local/bin/python3
(和 pip3
一起)。
安裝 virtualenvwrapper
你需要使用系統 Python 3 的 pip
安裝 virtualenvwrapper
:
sudo pip3 install virtualenvwrapper
下一步是配置你的 shell 來載入 virtualenvwrapper
命令。你可以通過編輯 shell 的 RC 文件(例如 .bashrc
、.bash_profile
或 .zshrc
)並添加以下幾行:
export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3
export VIRTUALENVWRAPPER_VIRTUALENV=/usr/local/bin/virtualenv
source /usr/local/bin/virtualenvwrapper.sh
![bashrc](/data/attachment/album/202103/04/072404qdlayezrlza5l6du.png "bashrc")
如果你的 Python 3 位於其他地方,請根據你的設置修改第一行。
關閉你的終端,然後重新打開它,這樣才能生效。第一次打開終端時,你應該看到 virtualenvwrapper
的一些輸出。這隻會發生一次,因為一些目錄是作為設置的一部分被創建的。
現在你應該可以輸入 mkvirtualenv --version
命令來驗證 virtualenvwrapper
是否已經安裝。
創建一個新的虛擬環境
假設你正在進行一個名為 flashylights
的項目。要用這個名字創建一個虛擬環境,請運行該命令:
mkvirtualenv flashylights
環境已經創建並激活,所以你會看到 (flashlylights)
出現在你的提示前:
![Flashylights prompt](/data/attachment/album/202103/04/072405flkicnnytklkw232.png "Flashylights prompt")
現在環境被激活了,事情發生了變化。python
現在指向一個與你之前在系統中識別的 Python 實例完全不同的 Python 實例。它為你的環境創建了一個目錄,並在其中放置了 Python 3 二進位文件、pip 命令等的副本。輸入 which python
和 which pip
來查看它們的位置。
![Flashylights command](/data/attachment/album/202103/04/072405gskscwj6wy6l2w75.png "Flashylights command")
如果你現在運行一個 Python 程序,你可以用 python
代替 python3
來運行,你可以用 pip
代替 pip3
。你使用 pip
安裝的任何包都將只安裝在這個環境中,它們不會干擾你的其他項目、其他環境或系統安裝。
要停用這個環境,運行 deactivate
命令。要重新啟用它,運行 workon flashylights
。
你可以用 workon
或使用 lsvirtualenv
列出所有可用的環境。你可以用 rmvirtualenv flashylights
刪除一個環境。
在你的開發流程中添加虛擬環境是一件明智的事情。根據我的經驗,它可以防止我在系統範圍內安裝我正在試驗的庫,這可能會導致問題。我發現 virtualenvwrapper
是最簡單的可以讓我進入流程的方法,並無憂無慮地管理我的項目環境,而不需要考慮太多,也不需要記住太多命令。
高級特性
- 你可以在你的系統上安裝多個 Python 版本(例如,在 Ubuntu 上使用 deadsnakes PPA),並使用該版本創建一個虛擬環境,例如,
mkvirtualenv -p /usr/bin/python3.9 myproject
。 - 可以在進入和離開目錄時自動激活、停用。
- 你可以使用
postmkvirtualenv
鉤子在每次創建新環境時安裝常用工具。
更多提示請參見文檔。
本文基於 Ben Nuttall 在 Tooling Tuesday 上關於 virtualenvwrapper 的帖子,經許可後重用。
via: https://opensource.com/article/21/2/python-virtualenvwrapper
作者:Ben Nuttall 選題:lujun9972 譯者:geekpi 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive