排版:Alan Wang
Python 凭借其简单的语法和强大的库,目前已成为最流行的编程语言之一,也是最适合那些刚接触编程的人们的语言。但是,随着项目复杂性和规模的增长,管理依赖项的复杂性也会增加。当新用户不断承接更成熟的项目,他们同时也了解了虚拟环境和管理依赖关系的重要性。虽然 Python 中虚拟环境和库管理的好处不可否认,但也必须承认它们带来的潜在挑战,特别是对初学者。对于那些刚接触 Python 开发的人来说,术语、概念和各种可用的工具可能会让人不知所措。
Visual Studio Code 的 Python 扩展设置使用 Python:Create Environment 命令简化了虚拟环境的创建。此命令可帮助任何技能水平的开发人员创建隔离的环境,每个环境都有自己的一组已安装的包和依赖项。我们相信,在扩展中对包管理工具的支持方面仍有提高的空间。在高级设置上,库管理工具简化了安装包、解析依赖项和处理版本约束的过程。虽然有许多可用的包管理工具,但我们想看看在标准 Python 安装中包含的 pip
和 venv
的支持下我们可以走多远。本练习的一部分包括研究流行的库管理工具提供的常见 CLI命令,以发现功能的交叉点,并确定 pip
和 venv
在哪些方面不提供直接支持。我们希望提供一个工作流程,与 Python:Create Environment 命令来简化包管理。
目标
作为 VS Code 的 Python 扩展的一部分,提出并实现一个有主见的工作流程,来达到:
- 支持正在使用 Python 包和虚拟环境的初学者。
- 通过环境创建说明简化包管理事项。
- 允许第三方包管理扩展集成到工作流中以提供自己的支持。
当前提案
VS Code 中的 Python 扩展希望通过提供一个工作流程来解决库管理初学者的一个常见误区,类似于 Python:Create Environment 命令中的工作流。但是,我们承认没有一种方法可以满足每个用户场景和偏好。最初,这些功能主要侧重于帮助处理不需要构建 wheel 文件的脚本、应用程序和项目的初学者。初学者主要关心的是实现成功的执行并确保可重复性。由于 VS Code 的 Python 扩展考虑了我们如何解决这个问题,我们希望与社区概述的标准紧密结合,但在某些领域选择固执己见。我们将此建议分为两部分进行考虑:命令覆盖率和记录用户的依赖关系。与往常一样,我们对如何改进和实现这一点持开放态度(vscode-python#21627)!
目前有好几种流行的依赖项和包管理工具可用。在这项研究中,我比较了 Pip、Poetry、Hatch、conda、PDM 和 Pipenv CLI 命令,以找到它们为包管理提供的功能的交集,以及 pip
和 venv
没有提供这些其他工具所具有的直接支持的地方。
我们希望在工作流程中匹配的 CLI 命令覆盖范围:
- 创建/更新依赖项文件
- 从文件读取、解析和安装依赖项
- 更新依赖项
- 删除库
- 添加库(并更新依赖项文件)
- 创建环境
- 运行代码
记录依赖关系
虽然我们概述了我们希望支持的功能,但如何写下依赖项的问题仍然存在。尽管在“何处”和“如何”写下依赖关系背后没有严格的标准,但我们牢记初学者的主要动力:成功的执行和可重复性。
最初,我们认为默认设置应该是写入 requirements.txt
文件,包括已安装的库版本。默认情况下,选择编写版本支持用户对可重复性和易于协作的需求。考虑到目标受众所做工作的性质和我们的目标用法,pyproject.toml
超出了范围,因为目标用户通常不会构建他们的项目,也没有直接的方法只安装 pyproject.toml
文件中列出的依赖项。
虽然此工作流程最初侧重于帮助可能不适应或不熟悉这些概念的初学者,但我们希望它也能成为更高级的开发人员工具。我们希望允许您首选的库管理器通过扩展集成到此工作流中,以支持更高级的工作流。
结论
VS Code 中的 Python 扩展正在不断评估我们可以改善用户在扩展中的体验的方法,无论它们是否是新的。库管理是学习和使用 Python 时的核心基础,我们希望减少成功所需的障碍。与往常一样,我们很乐意听到您对我们功能的想法和反馈。有关此提案的具体反馈可以在 vscode-python#21627上提出。
CLI 命令覆盖范围
作为此调查的一部分,我补充了一个表来跟踪跨包管理工具的 CLI 命令。此表并未说明支持的所有命令,只包含专门与环境创建和包管理相关的命令。此外,下面列出的许多命令都支持用于扩展命令功能的选项,为了简洁起见,此处未记录这些选项。