pipenv 是 2017 年 1 月由 Kennethreitz 大神创作,目前已经有 286 个版本发布,可见在 GitHub 上是非常活跃的项目。简单来说 pipenv 的是管理 python 环境和 python 依赖包的工具。使用时 pipenv 会自动创建虚拟环境,并且新增了 Pipfile 文件来维护包依赖, 新增 Pipfile.lock 已在确定环境和依赖后锁定项目,以便最终版本发布。 pipenv 还是 Python.org 正式推荐的 python 包管理工具。
引用官方说明:
Pipenv — the officially recommended Python packaging tool from Python.org, free (as in freedom).
pipevn 可以解决那些问题
使用 pipevn 就相当于同时使用了 pip 和 virtualenv ,即做到包管理又可以管理虚拟环境。
使用 pipevn 解决 requirement.txt 面临的问题
pipenv 使用 Pipfile 代替 requirement.txt 文件来记录项目依赖包。
新增了 Pipfile.lock 文件来锁定 python 软件的包名及版本,以及其依赖关系的列表。
它参考了其他语言的包管理工具(bundler, composer, npm, cargo, yarn, etc.),旨在将最好的包管理工具带入 python 世界。
准备工作
Mac
使用 Homebrew 安装:
1 | brew install pipenv |
Ubuntu17.10
1 | sudo apt install software-properties-common python-software-properties |
使用 pip 安装
作者推荐在 python3 下边安装,会提高与 virtualenv 的兼容性。
1 | pip install pipenv |
为防止和系统python库产生影响,可使用此种方案安装。
1 | pip install --user pipenv |
pip 默认安装包路径为 /usr/local/lib/python2.7/site-packages 。此模式下,pip 安装包保存路径为用户库路径,可使用命令 python3 -m site –user-site 具体查看。
1 | python3 -m site --user-site |
如果在安装后你的 shell 中 pipenv 不可用,你需要把用户库的二进制目录 /Users/apple/Library/Python/3.6/bin 添加到你的 PATH 中。
基本使用
pipenv 虚拟环境使用
1 | 创建实例项目 |
通过上面的示例,已经可以掌握大部分使用方法,更多命令详细内容读者可参考:basics
高级使用
命令行自动完成
如果你使用 bash 或者 zsh, 你可以在 ~/.bash_profile (~/.zshrc) 中设置如下变量,使用命令时按 tab 键会自动补全命令,非常方便
1 | eval "$(pipenv --completion)" |
使用 requirements.txt 来安装包依赖
通过 requirements.txt 安装,重用 requirements.txt 来构建新环境
1 | pipenv install -r requirements.txt |
自动安装 python
如果你之前使用的是 pyenv 来管理 python 的版本,当使用 pipenv install 的时候 pipenv 会自动检测 python 是否存在,并询问你是否要安装该版本的 python
1 | cat Pipfile |
修改默认 python 版本
Pipenv 默认使用 python3 来初始化项目,你可以通过 使用 –three 或者 –two 标识来改变初始化环境的 python 版本。也可以指定 PIPENV_DEFAULT_PYTHON_VERSION 值来指定 python 版本。
自动加载 .env 文件
如果在你的项目中包含 .env 文件,使用 $ pipenv shell 和 $ pipenv run 将会自动加载该文件。
如果你的 .env 文件没有在当前目录下,或者不叫 .env ,你可以使用如果命令指定文件位置或名称
1 | PIPENV_DOTENV_LOCATION=/path/to/.env pipenv shell |
阻止 pipenv 自动加载 .env 文件
1 | PIPENV_DONT_LOAD_ENV=1 pipenv shell |
更多高级命令及使用详细内容可参考:advanced
结合 vs code 使用
vs code 已经支持 pipenv 的使用,官方说明:
A pipenv environment for the workplace folder. If one is found then no other interpreters are searched for or listed as pipenv expects to manage all aspects of the environment.
大意是:项目如果使用 pipenv 环境,一旦发现使用了 pipenv ,则只列出此项目的 interpreter ,不会在搜索其他的 python 解析器,因为 pipenv 可以管理环境的各个方面。
使用 vs code 作为开发工具,打开已经生成 Pipfile 文件的项目,在选择 python interperter (⇧⌘P) 时,可能会遇到以下错误提示:
1 | Workspace contains pipfile but attempt to run pipenv --venv failed with Traceback (most recent call last): |
解决方法:
如果是简体中文环境,则在 ~/.bash_profile (~/.zshrc) 中设置如下变量:
1 | export LC_ALL=zh_CN.UTF-8 |
英文环境,设置:
1 | export LC_ALL=en_US.UTF-8 |
然后执行
1 | source .bash_profile(.zshrc) |
(不推荐)如果任然报错,则可以在项目目录下新建 .env 文件,并拷贝上文中的 shell 脚本。
总结
- pipenv 主要是用来解决 python 版本和包依赖的管理
- 熟悉了 pipenv 安装和虚拟环境的搭建
- 通过示例来学习 pipenv 的基本命令使用
- 通过学习高级命令来使项目具有工程上的可用
- 了解使用过程中可能遇到的问题和解决方法