這篇文章沒什麼新東西,只是介紹古老又靠譜的 Python 虛擬環境和依賴管理方式:virtualenv/venv+pip。一來方便被我在《Flask 入門教程》和《Flask Web 開發實戰》帶入 Pipenv 坑的初學者瞭解基礎工具的用法,二來方便其餘 Python 初學者參考,本身順便作個總結。若是你想了解更多詳細內容,Python 官方教程這一章寫的更好,能夠替代這篇文章。html
既然大部分試圖簡化 Python 虛擬環境和依賴管理工做流程的新工具都不夠穩定,繼續使用 virtualenv/venv 和 pip 這樣的底層工具也是一個不錯的選擇,並且大多數人也是這麼作的。它們雖然用起來有一點麻煩,但至少更可靠。python
下面是一些基本概念:git
若是你使用 Python 3(具體說是 Python 3.3 及以上版本),推薦使用標準庫內置的 venv 模塊替代 virtualenv,二者的使用方式基本相同,惟一不一樣的是建立虛擬環境的方式。github
若是你使用 Python 2,那就只能選擇 virtualenv,你須要額外安裝它。我先假設你已經安裝了 pip,由於在 Python 2 >=2.7.9 或 Python 3 >=3.4 這些版本的 Python 會一併安裝 pip,其餘版本能夠參考文檔的安裝部分。在 Windows 下使用下面的命令安裝 virtualenv:flask
$ pip install virtualenv複製代碼
其餘操做系統可使用下面的命令安裝:安全
$ sudo pip install virtualenv複製代碼
儘管不推薦使用 sudo pip 的方式安裝 Python 包,但這仍然是最簡單和統一的方式。更安全的方式是使用系統包管理器來安裝,或是使用 pip --user 方式安裝。bash
假設咱們的項目名叫 snow,建立對應的文件夾而後切換到根目錄:app
$ mkdir snow
$ cd snow複製代碼
若是使用 venv,那麼使用下面的命令建立虛擬環境,其中 snow-venv 是虛擬環境的名字,也做爲建立的虛擬環境文件夾名稱,你能夠自由修改(一般會使用 venv):工具
$ python -m venv snow-venv複製代碼
若是使用 virtualenv,則使用下面的命令:ui
$ 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 命令能夠退出虛擬環境。
簡單列一下基本用法,雖然大部分人都很熟悉了……以 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 遷移回來,方法很簡單,只須要生成一個 requirements.txt 文件便可。使用下面的命令生成通常依賴列表:
$ pipenv lock -r複製代碼
使用下面的命令輸出開發依賴列表:
$ pipenv lock -r --dev複製代碼
而後手動把兩個命令的輸出保存爲 requirements.txt 和 requirements-dev.txt。
在下一篇文章,我會介紹一些輔助工具來搭配 virtualenv/venv+pip 使用,讓虛擬環境和依賴管理更方便,好比 virtualenvwrapper、pip-tools 等。
(4)