以前介绍过《利用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 不要加入版本管理。为本身的每个项目创建独立的虚拟环境。