1. 程式人生 > 程式設計 >要不我們還是用回 virtualenv/venv 和 pip 吧

要不我們還是用回 virtualenv/venv 和 pip 吧

這篇文章沒什麼新東西,只是介紹古老又靠譜的 Python 虛擬環境和依賴管理方式:virtualenv/venv+pip。一來方便被我在《Flask 入門教程》和《Flask Web 開發實戰》帶入 Pipenv 坑的初學者瞭解基礎工具的用法,二來方便其他 Python 初學者參考,自己順便做個總結。如果你想了解更多詳細內容,Python 官方教程這一章寫的更好,可以替代這篇文章。

既然大部分試圖簡化 Python 虛擬環境和依賴管理工作流程的新工具都不夠穩定,繼續使用 virtualenv/venv 和 pip 這樣的底層工具也是一個不錯的選擇,而且大多數人也是這麼做的。它們雖然用起來有一點麻煩,但至少更可靠。

基本概念

下面是一些基本概念:

  • PyPA:指 Python Packaging Authority,一個維護 Python 打包相關專案的小組,相關專案具體見 https://github.com/pypa
  • pip:Python 包安裝器。
  • virtualenv:Python 虛擬環境管理工具。
  • venv:Python 標準庫內建的虛擬環境管理工具,Python 3.3 加入,Python 3.5 開始作為管理虛擬環境的推薦工具,用法類似 virtualenv。如果你使用 Python 3,推薦使用 venv 來替代 virtualenv。

使用 virtualenv/venv 管理虛擬環境

venv 模組

如果你使用 Python 3(具體說是 Python 3.3 及以上版本),推薦使用標準庫內建的 venv 模組替代 virtualenv,兩者的使用方式基本相同,唯一不同的是建立虛擬環境的方式。

如果你使用 Python 2,那就只能選擇 virtualenv,你需要額外安裝它。我先假設你已經安裝了 pip,因為在 Python 2 >=2.7.9 或 Python 3 >=3.4 這些版本的 Python 會一併安裝 pip,其他版本可以參考檔案的安裝部分。在 Windows 下使用下面的命令安裝 virtualenv:

$ pip install virtualenv複製程式碼

其他作業系統可以使用下面的命令安裝:

$ sudo pip install virtualenv複製程式碼

儘管不推薦使用 sudo pip 的方式安裝 Python 包,但這仍然是最簡單和統一的方式。更安全的方式是使用系統包管理器來安裝,或是使用 pip --user 方式安裝。

建立虛擬環境

假設我們的專案名叫 snow,建立對應的資料夾然後切換到根目錄:

$ mkdir snow
$ cd snow複製程式碼

如果使用 venv,那麼使用下面的命令建立虛擬環境,其中 snow-venv 是虛擬環境的名字,也作為建立的虛擬環境資料夾名稱,你可以自由修改(通常會使用 venv):

$ python -m venv snow-venv複製程式碼

如果使用 virtualenv,則使用下面的命令:

$ virtualenv snow-venv複製程式碼

這會在當前目錄建立名為 snow-venv 的虛擬環境資料夾,你需要把這個資料夾名稱加入 .gitignore 檔案以便讓 Git 忽略。

啟用虛擬環境

通過執行對應的啟用指令碼來啟用虛擬環境,不同作業系統的啟用命令(啟用指令碼及路徑)有一點不同。Windows(CMD.exe)使用下面的命令啟用:

$ snow-venv\scripts\activate複製程式碼

Linux 和 macOS(bash/zsh)使用下面的命令:

$ source snow-venv/bin/activate複製程式碼

或:

$ . snow-venv/bin/activate複製程式碼

類似的,其他終端程式可以執行對應的啟用指令碼來啟用虛擬環境。

啟用虛擬環境以後,命令列提示符前會顯示當前虛擬環境的名字:

(snow-venv) $複製程式碼

使用 deactivate 命令可以退出虛擬環境。

使用 pip 管理依賴

簡單列一下基本用法,雖然大部分人都很熟悉了……以 Flask 為例,首先是安裝依賴:

(snow-venv) $ pip install flask複製程式碼

更新依賴:

(snow-venv) $ pip install --upgrade flask複製程式碼

或是:

(snow-venv) $ pip install -U flask複製程式碼

解除安裝依賴:

(snow-venv) $ pip uninstall flask複製程式碼

除此之外,還有 pip show flask 命令可以檢視某個依賴的詳細資訊,pip list 列出所有依賴。

下面的命令可以手動生成依賴列表:

(snow-venv) $ pip freeze > requirements.txt複製程式碼

如果你需要手動開發依賴和生產依賴,可以手動把開發相關的依賴放到單獨的檔案,比如 requirements-dev.txt。

當你需要在新的機器建立程式執行環境時,(建立虛擬環境後)只需要使用下面的命令從依賴檔案安裝所有依賴:

(snow-venv) $ pip install -r requirements.txt複製程式碼

如果安裝包的時候速度太慢,可以考慮設定 PyPI 國內映象,具體參考這篇文章

從 Pipenv 遷移回來

如果你想從 Pipenv 遷移回來,方法很簡單,只需要生成一個 requirements.txt 檔案即可。使用下面的命令生成一般依賴列表:

$ pipenv lock -r複製程式碼

使用下面的命令輸出開發依賴列表:

$ pipenv lock -r --dev複製程式碼

然後手動把兩個命令的輸出儲存為 requirements.txt 和 requirements-dev.txt。

在下一篇文章,我會介紹一些輔助工具來搭配 virtualenv/venv+pip 使用,讓虛擬環境和依賴管理更方便,比如 virtualenvwrapper、pip-tools 等。

(4)