优先级 pip 功能¶
问题¶
pip 开发团队规模很小,在通过 问题追踪器 报告的问题上时间和精力有限。团队还有大量积压问题(截至 2020 年 11 月为 782 个)需要处理。为了让团队能够根据对用户影响最大的问题来优先处理工作,我们需要更好地了解用户希望从 pip 中获得什么。
研究¶
为了帮助回答这个问题,我们开发了一个“购买功能”调查,其中包含以下场景:
通过参与我们的“购买功能”游戏来帮助我们了解对你来说什么最重要你有一个 200 美元的预算用于重新设计 pip。
用你的 200 美元预算,“购买”你最希望保留的功能。
你不需要花费全部 200 美元,但也不要超支!
我们要求用户在与 pip install
相关的功能上花费前 100 美元,并在其他 pip 功能上花费剩余的 100 美元。我们还给了用户额外的 10 美元来建议一个新功能。
结果¶
我们收到了 1076 份回复,其中 1070 份有效。最受欢迎的功能包括 pip 的核心竞争力:
从已安装依赖项列表中重新创建环境;
从虚拟控制系统、文件或本地目录安装、卸载和升级包;
警告存在损坏或冲突的依赖项。
pip install¶
与 pip install 相关的十大功能是:
安装和卸载包
将包升级到最新版本
警告存在损坏的依赖项
从版本控制系统(如 Git、Mercurial 等)安装包
根据文件中指定的安装包
从本地目录安装包
验证下载的包是否与哈希值匹配
从替代包索引或索引安装包(默认情况下仅为 PyPI)
从轮子安装包(无需编译代码)
控制你想要将安装的包放在计算机上的位置
其他 pip 功能¶
与其他 pip 功能相关的十大功能是:
生成可用于重新创建环境的已安装包列表
检查已安装的包是否存在依赖项冲突
在无需任何用户输入的情况下运行 pip(例如在 CI 中)
显示有关所有已安装包的信息
显示有关单个已安装包的信息
在 pypi.org 上搜索包
显示有关 pip 的信息(版本信息、帮助信息等)
下载包、构建轮子并将它们保存在目录中以供离线使用
管理 pip 的默认配置(例如,通过使用配置文件)
自定义 pip 的输出(例如,减少或增加详细程度、抑制颜色、将输出发送到日志)
结果因用户拥有 Python 经验的多少而异。
推荐¶
环境重建¶
环境重建已作为 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 可以减少用户遇到的整体警告和冲突消息数量。