以前介紹過《利用pyenv管理多個版本的python》,pyenv 是一個很是好用的 Python 版本管理工具,利用它咱們能夠在同一臺電腦上安裝多個版本的 Python ,這個過程很是簡單。Mac系統的電腦一行命令就能夠安裝了:html
brew install pyenv
複製代碼
pyenv 的安裝和使用詳見開篇提到的文章,這裏再也不贅述。python
今天主要是想介紹另外一個很是好用的 Python 工具——"Pipenv"git
Pipenv is a tool that aims to bring the best of all packaging worlds (bundler, composer, npm, cargo, yarn, etc.) to the Python world. Windows is a first-class citizen, in our world.shell
It automatically creates and manages a virtualenv for your projects, as well as adds/removes packages from your
Pipfile
as you install/uninstall packages. It also generates the ever-importantPipfile.lock
, which is used to produce deterministic builds.npm
上段引用自官方文檔,簡單來講就是 Pipenv 是但願成爲 Python 界最好的包管理工具,成爲 Python 界的 npm。你可使用 Pipenv 這一個工具來安裝、卸載、跟蹤和記錄依賴性,並建立、使用和組織你的虛擬環境。 當你使用它啓動一個項目時,若是你尚未使用虛擬環境的話,Pipenv 將自動爲該項目建立一個虛擬環境。 Pipenv 使用 Pipfile
和 Pipfile.lock
來管理依賴包,而且在使用 pipenv 添加或刪除包時,自動維護 Pipfile 文件,同時生成 Pipfile.lock 來鎖定安裝包的版本和依賴信息,避免構建錯誤。相比pip須要手動維護requirements.txt 中的安裝包和版本,具備很大的進步。json
設想一個場景:你手頭有多個開發項目,其中項目 A 和項目 B 要求用 Python3,項目C須要用 Python2,而項目 A 和項目 B 又要求第三方依賴包相互獨立,互不干擾。bash
這個時候,爲了知足版本的不一樣咱們須要使用 Pyenv 安裝多個版本的 Python ,同時爲了使不一樣項目之間隔離開來,咱們可使用 Pipenv 建立虛擬的開發環境。app
那有的人就要問了,virtualenv
不就能夠建立虛擬環境了嗎,爲何還要使用 Pipenv ,這裏先賣個關子,文末我再來比較這些常見工具之間的差別性。composer
若是你是Mac電腦,那麼推薦使用Homebrew來安裝。maven
brew install pipenv
複製代碼
若是不是Mac電腦,建議 使用Python3的pip3 安裝:
pip3 install pipenv
複製代碼
執行pipenv,能夠查看pipenv的幫助信息:
pipenv
複製代碼
若是出現以下信息,就說明安裝成功了:
默認地,虛擬環境會建立在~/.local/share/virtualenvs
目錄裏面。 若是咱們但願在每一個項目的根目錄下保存虛擬環境目錄(.venv),須要在 .bashrc
或 .bash_profile
中配置以下:
export PIPENV_VENV_IN_PROJECT=1
複製代碼
要想使配置生效,執行下source ~/.bashrc
或者source ~/.bash_profile
便可使環境變量生效。 接下來咱們爲項目建立虛擬環境。
mkdir pipenv_demo
cd pipenv_demo
pipenv --python 3.6.7 # 爲當前初始化一個版本爲 3.6.7 的python環境
複製代碼
若是是第一次在項目中運行 pipenv
命令的話,會在項目中建立一個名爲 Pipfile
的文件,文件內容相似下面這樣。
[[source]]
url = "https://pypi.org/simple"
verify_ssl = true
name = "pypi"
[packages]
requests-html = "*"
[dev-packages]
[requires]
python_version = "3.7"
複製代碼
這個文件就相似於 maven 中的 pom.xml
、npm 中的 package.json
文件。若是運行過install、update等命令的話,還會建立一個Pipfile.lock
文件,相似npm中的lock文件。這兩個文件就是pipenv用於管理第三方庫的配置文件,若是同時使用版本控制軟件的話,須要將它們也加入進去。
Tips:對於這個文件咱們須要先作一件事,就是更改 [[source]] 中的 url 爲國內鏡像。
[[source]] url = "https://pypi.tuna.tsinghua.edu.cn/simple" 複製代碼
若是我想在項目中安裝requests這個包,運行:
pipenv install requests
複製代碼
若是須要指定具體版本號,能夠這樣:
pipenv install requests==2.13.0
複製代碼
若是是第一次運行pipenv的話,會先建立Pipfile文件,不然會修改Pipfile文件。
該命令還有一個經常使用參數-d或--dev,用於安裝僅供開發使用的包。
Tips:用 git 管理項目時候,要把
Pipfile
和Pipfile.lock
加入版本跟蹤。這樣 clone 了這個項目的同窗,只須要執行pipenv install 複製代碼
就能夠安裝全部的Pipfile中 [packages]部分的包了,而且自動爲項目在本身電腦上建立了虛擬環境。
相應的還有命令來卸載第三方包,該命令還有兩個參數--all
和--all-dev
用於卸載全部包和全部開發包。
pipenv uninstall requests
複製代碼
查看全部須要更新的包:
pipenv update --outdated
複製代碼
更新全部包:
pipenv update
複製代碼
更新指定的包:
pipenv update <包名>
複製代碼
pipenv -h # 查看幫助
pipenv graph # 查看已安裝的包
pipenv shell # 啓動shell
pipenv run python hello.py # 運行腳本
複製代碼
還記得在最開始提出的問題嗎?明明virtualenv
就能夠建立虛擬環境了嗎,爲何還要使用 Pipenv 呢?
接下來咱們來橫向對比下幾個常見的容易弄混的 python 管理工具(我在初學的時候老是分不清😂)
工具 | 介紹 | 原理 |
---|---|---|
pip | 包管理工具 | |
virtualenv | 虛擬環境管理工具 | 切換目錄 |
virtualenvwrapper | 虛擬環境管理工具增強版 | |
pyenv | python版本管理工具 | 修改環境變量 |
pyenv-virtualenv | 虛擬環境管理工具 | |
pipenv | 項目環境管理工具 | |
anaconda | 一個包含180+的科學包及其依賴項的發行版本(不僅是 Python 可用) |
同時在推薦一個我在 stackoverflow 上看到的回答:What is the difference between pyenv, virtualenv, anaconda?
建議團隊內開發人員,在本身電腦上都安裝 pyenv 和 pipenv 。Pipfile 和 Pipfile.lock 加入版本跟蹤,.venv 不要加入版本管理。爲本身的每個項目創建獨立的虛擬環境。