Pipenv,它的项目简介为 Python Development Workflow for Humans,是 Python 著名的 requests 库作者 kennethreitz 写的一个包管理工具,它可以为我们的项目自动创建和管理虚拟环境并非常方便地管理 Python 包,现在它也已经是 Python 官方推荐的包管理工具。
溯源
起初,Python没有便利的方式来安装软件包。
后来,Easy Install 安装方便,但卸载不需要的软件包并不容易。
接着,pip逐渐被人们熟练的使用,其具有方便的安装和卸载等诸多优点,但当用户使用不同版本的相同库的时候。不能将软件包彼此隔离。
随着虚拟环境的发展,出现了很多管理虚拟环境的工具:virtualenv,venv,pyenv,pyenv-virtualenv等。它们都可以在pip和requirements.txt文件中很好地发挥作用。
以前我们需要将虚拟环境依赖包的导出为 requirements.txt , 一旦依赖包变动,就要重新导出,而pipenv会自动帮我们生成 Pipfile 和 Pipfile.lock ,Pipfile会随着项目,当我们安装时只需在 Pipfile 和 Pipfile.lock 所在的目录下运行 pipenv install即可。
Pipenv优点。
pipenv由requests库作者Kenneth Reitz开发,结合了pip及virtualenv的功能和优点,其目的是替代virtualenv和pyenv。
- 解决了requirements.txt依赖管理局限的不确定构建问题,提供的pipenv替代pip并自带一个依赖清单Pipfile和依赖锁定Pipfile.lock。
- 有效的的解决了多个项目依赖不同版本的子模块的问题,自动关联项目相关的virtualenv,能够快速的加载virtualenv。
- 解决了依赖分析问题,使用pipenv graph命令可以看到依赖树
- 广泛使用 Hash 校验,保证安全性。
- 可通过自动加载 .env 读取环境变量,简化开发流程。
使用
PyCharm 从 2018.2 版本开始已经支持 pipenv 。
安装
pip install pipenv
创建环境
一行命令搞定 virtualenv 和 pipfile 的初始化(不初始化则将使用默认版本的Python),它会在你的用户目录下对你的 virtualenv 进行统一管理。如果当前目录下有 requirements.txt 文件,它会非常贴心地帮你自动转换。(注意:切换至新建的python项目目录)。
cd toutiao
初始化一个 python3 的环境
pipenv --three
初始化一个 python2 的环境
pipenv --two
初始化特定版本的环境
pipenv --python 3.6
进入 / 退出环境
进入环境
pipenv shell
退出环境
exit
删除虚拟环境
pipenv --rm
安装 / 更新 / 卸载依赖
pipenv install 创建了项目的虚拟环境,
Pipfile文件,source部分用来设置仓库地址,packages部分用来指定项目依赖的包,dev-packages部分用来指定开发环境需要的包,这样分开便于管理。
而Pipfile.lock中记录了当前环境中安装的依赖的版本号以及哈希,以保证每次装出来的依赖都是一致的,注意,任何情况下都不要手动修改 Pipfile.lock 文件!
pipenv install的时候有三种逻辑:
- 如果目录下没有Pipfile和Pipfile.lock文件,表示创建一个新的虚拟环境;
- 如果有,表示使用已有的Pipfile和Pipfile.lock文件中的配置创建一个虚拟环境;
- 如果后面带诸如django这一类库名,表示为当前虚拟环境安装第三方库。
安装项目已有的所有依赖,加--dev表示包括 Pipfile 的 dev-packages 中的依赖(通常有一些Python包只在你的开发环境中需要,而不是在你的生产环境中,例如单元测试包。 Pipenv将使用–dev标志保持两个环境分开。)。
pipenv install --dev
安装某个库。
pipenv install requests
安装指定版本的库,安装时加--dev表示加入到 dev 环境。
pipenv install parsel==1.3.1
从项目中更新某个库
pipenv update requests
更新所有的库
pipenv update
从项目环境中删除某个库
pipenv uninstall requests
另外,Pipefile 和 Pipefile.lock 都会按照你的操作进行自动的更新,如果需要手动修改包的依赖条件,手工编辑 Pipefile 并进行安装即可。
打印环境中已安装的包
pipenv graph
能够更清晰地展示现有依赖包。
锁定版本
更新 lock 文件锁定当前环境的依赖版本
pipenv lock
环境变量管理
如果你开发调试时需要配一堆环境变量,可以写到.env文件中,在pipenv shell进入虚拟环境时,它会帮你把这些环境变量加载好,非常方便。
例如写一个.env文件
echo "test=toutiao" > .env
之后pipenv shell进入虚拟环境,echo $test就能看环境变量的值toutiao已经设置好了。
运行python命令
pipenv run python toutiao.py
这将使用当前虚拟环境关联的Python解释器,执行命令。
Options
Usage: pipenv [OPTIONS] COMMAND [ARGS]...
Options:
--update 升级 pipenv, pip 到最新.
--where 输出项目的目录信息.
--venv 输出 virtualenv 的目录信息.
--py 输出 Python 解析器的路径.
--envs 输出环境变量的设置.
--rm 删除当前 virtualenv.
--bare Minimal output.
--completion Output completion (to be evald).
--man 显示使用手册.
--three / --two 使用 Python 3/2 来创建 virtualenv
--python TEXT 直接指定 Python 解析器.
--site-packages 拷贝系统 site-packages 到 virtualenv.
--jumbotron An easter egg, effectively.
--version 显示版本信息并退出.
-h, --help 显示当前信息并退出.
Commands:
check 检查安全漏洞和反对 PEP 508 标记在Pipfile提供.
graph 显示当前依赖关系图信息.
install 安装提供的包,并加入 Pipfile 的依赖清单中
lock 生成 Pipfile.lock.
open 在编辑器(vim)查看一个特定模块.
run 在 virtualenv 中执行命令.
shell 切换到 virtualenv 中.
uninstall 删除提供的包,并清理 Pipfile 的依赖清单中.
update 卸载当前所以依赖,然后安装最新包