优先级 pip 功能

问题

pip 开发团队规模很小,在通过 问题追踪器 报告的问题上时间和精力有限。团队还有大量积压问题(截至 2020 年 11 月为 782 个)需要处理。为了让团队能够根据对用户影响最大的问题来优先处理工作,我们需要更好地了解用户希望从 pip 中获得什么。

跳过推荐

研究

为了帮助回答这个问题,我们开发了一个“购买功能”调查,其中包含以下场景:

通过参与我们的“购买功能”游戏来帮助我们了解对你来说什么最重要

你有一个 200 美元的预算用于重新设计 pip。

用你的 200 美元预算,“购买”你最希望保留的功能。

你不需要花费全部 200 美元,但也不要超支!

我们要求用户在与 pip install 相关的功能上花费前 100 美元,并在其他 pip 功能上花费剩余的 100 美元。我们还给了用户额外的 10 美元来建议一个新功能。

survey question where users are asked to buy features for pip install

survey question where users are asked to buy features other than pip install

survey question where users are asked to spend an additional ten dollars

结果

我们收到了 1076 份回复,其中 1070 份有效。最受欢迎的功能包括 pip 的核心竞争力:

  • 从已安装依赖项列表中重新创建环境;

  • 从虚拟控制系统、文件或本地目录安装、卸载和升级包;

  • 警告存在损坏或冲突的依赖项。

pip install

与 pip install 相关的十大功能是:

pip install results

  1. 安装和卸载包

  2. 将包升级到最新版本

  3. 警告存在损坏的依赖项

  4. 从版本控制系统(如 Git、Mercurial 等)安装包

  5. 根据文件中指定的安装包

  6. 从本地目录安装包

  7. 验证下载的包是否与哈希值匹配

  8. 从替代包索引或索引安装包(默认情况下仅为 PyPI)

  9. 从轮子安装包(无需编译代码)

  10. 控制你想要将安装的包放在计算机上的位置

其他 pip 功能

与其他 pip 功能相关的十大功能是:

other pip functionality results

  1. 生成可用于重新创建环境的已安装包列表

  2. 检查已安装的包是否存在依赖项冲突

  3. 在无需任何用户输入的情况下运行 pip(例如在 CI 中)

  4. 显示有关所有已安装包的信息

  5. 显示有关单个已安装包的信息

  6. 在 pypi.org 上搜索包

  7. 显示有关 pip 的信息(版本信息、帮助信息等)

  8. 下载包、构建轮子并将它们保存在目录中以供离线使用

  9. 管理 pip 的默认配置(例如,通过使用配置文件)

  10. 自定义 pip 的输出(例如,减少或增加详细程度、抑制颜色、将输出发送到日志)

结果因用户拥有 Python 经验的多少而异。

查看用户根据其经验水平选择某个功能的可能性

验证下载的包是否与哈希值匹配

screenshot of verify downloaded packages against hashes

警告存在损坏的依赖项

Screenshot of Warn about broken dependencies

将包升级到最新版本

Screenshot of Upgrade packages to the latest version

从替代包索引或索引安装包

Screenshot of Install packages from an alternative package index, or indexes

根据文件中指定的安装包

Screenshot of Install packages as specified in a file

安装和卸载包

Screenshot of Install and uninstall packages

从版本控制系统安装包

Screenshot of Install packages from a version control system

从轮子安装包

Screenshot of Install a package from wheels

从本地目录安装 apackage

Screenshot of Install apackage from a local directory

控制你想要将安装的包放在计算机上的位置

Screenshot of Control where you want your installed package to live on your computer

推荐

环境重建

环境重建已作为 requirements.txt 功能的一部分包含在 pip 中;但是,鉴于其受欢迎程度和需求,我们建议 **pip 应该改进对该功能的支持。**

  • 改进环境重建的用户输出,并在 pip CLI 中直接提供帮助指南;

  • 改进 pip 文档和用户指南,以突出显示环境重建作为 pip 的核心功能;

  • 改进环境重建过程本身,将虚拟环境视为 pip 的核心功能“内置”。

**从已安装依赖项列表中重新创建环境是总体上最受重视的功能请求,**在每个用户组中也是如此,*除了那些拥有不到 6 个月经验的用户和那些拥有 16-19 年经验的用户(对他们来说,这是第二受重视的功能)。*

当被要求以自由文本形式输入功能请求时,用户在“环境”一词旁边放置了“内置”、“虚拟”、“自动”和“隔离”等词语,这表明用户期望 pip 以高度智能和易用性来重新创建环境。

精选的直接引用

当你不处于 virtualenv 中时,让 pip 警告你

使用命令行参数自动创建虚拟环境

消除虚拟环境。就像其他所有人一样,直接使用 ./python_modules/

我希望看到 pip 管理 python 版本和虚拟环境,类似于 minicona

我希望将所有 200 美元花在这个上面:将 pipenv 或 venv 集成到 pip 中,这样安装应用程序就不会将其依赖项安装到系统包存储中。并且允许为应用程序包固定依赖项版本(就像 pip-compile 的工作方式)

依赖项管理

我们建议 pip 团队改进与依赖项(例如冲突)相关的警告和错误消息,并提供实际的解决方法。这可以在多个时间范围内逐步实施,包括:

  • 在错误消息旁边直接向用户提供有关如何解决此问题的提示;

  • 在文档中、在 pip install 冲突错误时,以及可能作为 pip 的内置功能,突出显示虚拟环境创建;

  • 升级依赖项解析器(正在进行中)。

很明显,依赖项管理(包括警告冲突的包和升级)对 pip 用户来说很重要。通过帮助用户更好地管理其依赖项,包括使用虚拟环境,pip 可以减少用户遇到的整体警告和冲突消息数量。