Pipenv对比virtualenv

图

# 什么是Pipenv
Pipenv是Kenneth Reitz在2017年1月发布的Python依赖管理工具,现在由PyPA维护。你可以把它看做是pip和virtualenv的组合体,而它基于的Pipfile则用来替代旧的依赖记录方式(requirements.txt)。

为什么使用Pipenv

Pipenv会自动帮你管理虚拟环境和依赖文件,并且提供了一系列命令和选项来帮助你实现各种依赖和环境管理相关的操作。简而言之,它更方便、完善和安全。你可以通过Pipenv文档开头的介绍来了解它的详细特性。Pipenv的slogan是“Python Dev Workflow for Humans”,作为人类,当然应该尝试一下……

如何使用Pipenv

假设我们要编写一个博客程序,项目的依赖是Flask和Flask-WTF。顺便说一句,可以使用下面的命令安装Pipenv:

1
$ pip install pipenv

下面我会通过不同操作来给出所需命令的对比,OLD(旧)表示使用pip和virtualenv,NEW(新)表示使用Pipenv。

创建虚拟环境

OLD: $ virtualenv venv

提示:
这里的venv是虚拟环境目录的名称,你可以自由更改,这会在你的项目根目录创建一个venv文件夹,其中包含独立的Python解释器环境。

NEW: $ pipenv install
Pipenv会自动为你创建虚拟环境,自动生成一个随机的虚拟环境目录名。

激活虚拟环境

OLD:
在Linux或macOS系统中:$ . venv/bin/activate

Windows:> venv\Scripts\activate

NEW: $ pipenv shell
此外,Pipenv还提供了一个pipenv run命令,在该命令后附加的参数会直接作为命令在虚拟环境中执行,这允许你不必显式的激活虚拟环境即可在虚拟环境中执行命令。比如,pipenv run python会启动虚拟环境中的Python解释器。

安装依赖到虚拟环境

OLD:

1
2
$ . venv/bin/activate        # 需要先激活虚拟环境
(venv)$ pip install flask flask-wtf

NEW:
使用Pipenv,不管你是否激活了虚拟环境,都可以通过pipenv install命令安装:

1
$ pipenv install flask flask-wtf

事实上,对一个新项目来说,你不必手动使用pipenv install来创建虚拟环境。当使用pipenv install xxx直接安装依赖包时,如果当前目录不包含虚拟环境,Pipenv会自动创建一个

记录依赖

OLD: (venv)$ pip freeze > requirements.txt

这个命令会把依赖列表写入requirements.txt文件。每当你安装或卸载了依赖包时,都需要手动更新这个文件。你必须保持谨慎,否则非常容易把依赖列表弄乱。

NEW:
使用Pipenv时,什么都不必做,Pipenv会自动帮你管理依赖。Pipenv会在你创建虚拟环境时自动创建Pipfile和Pipfile.lock文件(如果不存在),并且会在你使用pipenv install和pipenv uninstall命令安装和卸载包时自动更新Pipfile和Pipfile.lock

附注 Pipfile用来记录项目依赖包列表,而Pipfile.lock记录了固定版本的详细依赖包列表。

在部署环境安装依赖

OLD:
当我们需要在一个新的环境,比如部署上线环境安装所有依赖时,我们需要重复上面的多条命令:

1
2
3
$ virtualenv venv  # 创建虚拟环境
$ . venv/bin/activate # 激活虚拟环境
(venv)$ pip install -r requirements.txt # 安装requirement.txt中记录的依赖

NEW:
使用Pipenv则只需要执行pipenv install,它会自动安装Pipfile中记录的依赖

1
$ pipenv install

区分开发依赖

OLD:
使用requirements.txt时,我们通过会单独创建一个requirements-dev.txt文件来手动加入开发依赖。比如项目开发时才会用到pytest,那么你需要手动创建这个文件,然后写入:

1
2
 -r requirements.txt
pytest==1.2.3

在新的开发环境安装依赖时,你需要安装这个文件中的依赖:

1
(venv)$ pip install -r requirements-dev.txt

NEW:
使用Pipenv时,你只需要在安装pytest时添加一个–dev选项,它会自动被分类为开发依赖(写入Pipfile的dev-packages一节中):$ pipenv install pytest --dev

在新的开发环境安装依赖时,也只需要在pipenv install命令后添加–dev选项即可一并安装开发依赖:

$ pipenv install --dev

总结

为了让你更轻松的过渡,Pipenv甚至提供了读取和生成requirements.txt文件的功能(在使用pipenv install命令时它会自动读取requirements.txt文件安装依赖并生成Pipfile文件)。

常见问题

Q:自定义虚拟环境文件夹路径

A:默认情况下,Pipenv会自动为你选择虚拟环境的存储位置,在Windows下通常为C:\Users\Administrator.virtualenvs\,而Linux或macOS则为~/.local/share/virtualenvs/。如果你想将虚拟环境文件夹在项目目录内创建,可以设置环境变量PIPENV_VENV_IN_PROJECT,这时名为.venv的虚拟环境文件夹将在项目根目录被创建。另外你也可以通过WORKON_HOME环境变量来自定义存储路径。

坚持原创分享,您的支持将鼓励我继续创作!