Skip to content

pipenv

Pipenv 工作流

Pipenv 是基于 pip 的 Python 包管理工具,它和 pip 的用法非常相似,可以看作 pip 的加强版,它的出现解决了旧的 pip+virtualenv+requirements.txt 的工作方式的弊端。
具体来说,它是 pip、Pipenv 和 Virtualenv 的结合体,它让包安装、包依赖管理和虚拟环境管理更加方便,使用它可以实现高效的 Python 项目开发工作流

https://github.com/pypa/pipenv

https://pipenv-zh.readthedocs.io/zh_CN/latest/basics.html

安装pipenv: pip install pipenv

创建虚拟环境

在 Python 中,虚拟环境(virtual enviroment)就是隔离的 Python 解释器环境,因为不同的项目常常会依赖不同版本的库或 Python 版本。
使用虚拟环境可以保持全局 Python 解释器环境的干净,避免包和版本的混乱,并且可以方便地区分和记录每个项目的依赖,以便在新环境下复现依赖环境

虚拟环境通常使用 Virtualenv 创建,但是为了更方便地管理虚拟环境和依赖包,我们将会使用集成了 Virtualenv 的 Pipenv

进入工作目录的根目录,使用pipenv install命令即可为当前项目创建虚拟环境

这会为当前项目创建一个文件夹,其中包含隔离的 Python 解释器环境,并且安装 pip、wheel、setuptools 等基本的包。

默认情况下,Pipenv 会统一管理所有虚拟环境,在 Linux 或 maxOS 会在 ~/.local/share/virtualenvs/目录下创建。
虚拟环境文件夹的目录名称的形式为"当前项目目录名+一串随机字符"
如果你想在项目目录内创建虚拟环境文件夹,可以设置环境变量PIPENV_VENV_IN_PROJECT,这时名为.venv的虚拟环境文件夹将在项目根目录被创建

可以通过--three--two选项来声明虚拟环境中使用的 Python 版本(分别对应 Python3 和 Python2),或是使用--python选项指定具体的版本号。

在 Pipenv 中,可以使用pipenv shell命令显式地激活虚拟环境

当执行pipenv shellpipenv run命令时,Pipenv 会自动从项目目录下的.env文件中加载环境变量

Pipenv 会启动一个激活虚拟环境的子 shell,现在你会发现命令行提示符前添加了虚拟环境名

除了显式地激活虚拟环境,Pipenv 还提供了一个 pipenv run 命令,这个命令允许你不显式激活虚拟环境即可在当前项目的虚拟环境中执行命令

比如:

pipenv run python hello.py

这会使用虚拟环境中的 Python 解释器,而不是全局的 Python 解释器。
事实上,和显式激活/关闭虚拟环境的传统方式相比,pipenv run是更推荐的做法,因为这个命令可以让你在执行操作时不用关心自己是否激活了虚拟环境

使用虚拟环境

安装flask: pipenv install flask
更新flask: pipenv update flask
卸载flask: pipenv uninstall flask

退出虚拟环境:exit

管理依赖

一个程序通常会使用很多 Python 包,即依赖。
而程序不仅仅会在一台电脑上运行,程序部署上线时需要安装在远程服务器上,而你也许会把它分享给朋友。
如果你打算开源的话,就可能会有更多的人需要在他们的电脑上运行。
为了能顺利运行程序,他们不得不记下所有依赖包,然后使用 pip 或 Pipenv 安装,这些重复无用的工作当然应该避免。
在以前我们使用 pip 搭配一个 requirements.txt 文件来记录依赖。但 requirements.txt 需要手动维护,在使用上不够灵活。
Pipflie 的出现就是为了替代难于管理的 requirements.txt

在创建虚拟环境时,如果项目根目录下没有 Pipfile 文件,pipenv install 命令还会在项目文件夹根目录下创建 Pipfile 和 Pipfile.lock 文件,前者用来记录项目依赖包列表,而后者记录了固定版本的详细依赖包列表。
当我们使用 Pipenv 安装/删除/更新依赖包时,Pipfile 以及 Pipfile.lock 会自动更新

可以使用 pipenv graph 命令查看当前环境下的依赖情况,或是在虚拟环境中使用pip list命令查看依赖列表

当需要在一个新的环境运行程序时,只需要执行pipenv install命令。
Pipenv 就会创建一个新的虚拟环境,然后自动从 Pipfile 中读取依赖并安装到新创建的虚拟环境中