Python 管理哪家強?

以前介紹過《利用pyenv管理多個版本的python》,pyenv 是一個很是好用的 Python 版本管理工具,利用它咱們能夠在同一臺電腦上安裝多個版本的 Python ,這個過程很是簡單。Mac系統的電腦一行命令就能夠安裝了:html

brew install pyenv
複製代碼

pyenv 的安裝和使用詳見開篇提到的文章,這裏再也不贅述。python

今天主要是想介紹另外一個很是好用的 Python 工具——"Pipenv"git

Pipenv是什麼?

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-important Pipfile.lock, which is used to produce deterministic builds.npm

上段引用自官方文檔,簡單來講就是 Pipenv 是但願成爲 Python 界最好的包管理工具,成爲 Python 界的 npm。你可使用 Pipenv 這一個工具來安裝、卸載、跟蹤和記錄依賴性,並建立、使用和組織你的虛擬環境。 當你使用它啓動一個項目時,若是你尚未使用虛擬環境的話,Pipenv 將自動爲該項目建立一個虛擬環境。 Pipenv 使用 PipfilePipfile.lock 來管理依賴包,而且在使用 pipenv 添加或刪除包時,自動維護 Pipfile 文件,同時生成 Pipfile.lock 來鎖定安裝包的版本和依賴信息,避免構建錯誤。相比pip須要手動維護requirements.txt 中的安裝包和版本,具備很大的進步。json

爲何要使用 Pipenv

設想一個場景:你手頭有多個開發項目,其中項目 A 和項目 B 要求用 Python3,項目C須要用 Python2,而項目 A 和項目 B 又要求第三方依賴包相互獨立,互不干擾。bash

這個時候,爲了知足版本的不一樣咱們須要使用 Pyenv 安裝多個版本的 Python ,同時爲了使不一樣項目之間隔離開來,咱們可使用 Pipenv 建立虛擬的開發環境。app

那有的人就要問了,virtualenv不就能夠建立虛擬環境了嗎,爲何還要使用 Pipenv ,這裏先賣個關子,文末我再來比較這些常見工具之間的差別性。composer

使用 Pipenv

安裝 Pipenv

若是你是Mac電腦,那麼推薦使用Homebrew來安裝。maven

brew install pipenv
複製代碼

若是不是Mac電腦,建議 使用Python3的pip3 安裝:

pip3 install pipenv
複製代碼

執行pipenv,能夠查看pipenv的幫助信息:

pipenv
複製代碼

若是出現以下信息,就說明安裝成功了:

image-20190315112449577

爲項目建立虛擬環境

默認地,虛擬環境會建立在~/.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 管理項目時候,要把 PipfilePipfile.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  # 運行腳本
複製代碼

Python 管理哪家強?

還記得在最開始提出的問題嗎?明明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 不要加入版本管理。爲本身的每個項目創建獨立的虛擬環境。

參考

  1. What is the difference between pyenv, virtualenv, anaconda?
  2. 利用pipenv和pyenv管理多個相互獨立的Python虛擬開發環境
  3. pipenv快速入門
相關文章
相關標籤/搜索