Visual Studio Code Python 扩展中的包管理

排版:Alan Wang

Python 凭借其简单的语法和强大的库,目前已成为最流行的编程语言之一,也是最适合那些刚接触编程的人们的语言。但是,随着项目复杂性和规模的增长,管理依赖项的复杂性也会增加。当新用户不断承接更成熟的项目,他们同时也了解了虚拟环境和管理依赖关系的重要性。虽然 Python 中虚拟环境和库管理的好处不可否认,但也必须承认它们带来的潜在挑战,特别是对初学者。对于那些刚接触 Python 开发的人来说,术语、概念和各种可用的工具可能会让人不知所措。

Visual Studio Code 的 Python 扩展设置使用 Python:Create Environment 命令简化了虚拟环境的创建。此命令可帮助任何技能水平的开发人员创建隔离的环境,每个环境都有自己的一组已安装的包和依赖项。我们相信,在扩展中对包管理工具的支持方面仍有提高的空间。在高级设置上,库管理工具简化了安装包、解析依赖项和处理版本约束的过程。虽然有许多可用的包管理工具,但我们想看看在标准 Python 安装中包含的 pipvenv 的支持下我们可以走多远。本练习的一部分包括研究流行的库管理工具提供的常见 CLI命令,以发现功能的交叉点,并确定 pipvenv 在哪些方面不提供直接支持。我们希望提供一个工作流程,与 Python:Create Environment 命令来简化包管理。

目标

作为 VS Code 的 Python 扩展的一部分,提出并实现一个有主见的工作流程,来达到:

  • 支持正在使用 Python 包和虚拟环境的初学者。
  • 通过环境创建说明简化包管理事项。
  • 允许第三方包管理扩展集成到工作流中以提供自己的支持。

当前提案

VS Code 中的 Python 扩展希望通过提供一个工作流程来解决库管理初学者的一个常见误区,类似于 Python:Create Environment 命令中的工作流。但是,我们承认没有一种方法可以满足每个用户场景和偏好。最初,这些功能主要侧重于帮助处理不需要构建 wheel 文件的脚本、应用程序和项目的初学者。初学者主要关心的是实现成功的执行并确保可重复性。由于 VS Code 的 Python 扩展考虑了我们如何解决这个问题,我们希望与社区概述的标准紧密结合,但在某些领域选择固执己见。我们将此建议分为两部分进行考虑:命令覆盖率和记录用户的依赖关系。与往常一样,我们对如何改进和实现这一点持开放态度(vscode-python#21627)!

目前有好几种流行的依赖项和包管理工具可用。在这项研究中,我比较了 PipPoetryHatchcondaPDMPipenv CLI 命令,以找到它们为包管理提供的功能的交集,以及 pipvenv 没有提供这些其他工具所具有的直接支持的地方。

我们希望在工作流程中匹配的 CLI 命令覆盖范围:

  • 创建/更新依赖项文件
  • 从文件读取、解析和安装依赖项
  • 更新依赖项
  • 删除库
  • 添加库(并更新依赖项文件)
  • 创建环境
  • 运行代码

记录依赖关系

虽然我们概述了我们希望支持的功能,但如何写下依赖项的问题仍然存在。尽管在"何处"和"如何"写下依赖关系背后没有严格的标准,但我们牢记初学者的主要动力:成功的执行和可重复性。

最初,我们认为默认设置应该是写入 requirements.txt 文件,包括已安装的库版本。默认情况下,选择编写版本支持用户对可重复性和易于协作的需求。考虑到目标受众所做工作的性质和我们的目标用法,pyproject.toml 超出了范围,因为目标用户通常不会构建他们的项目,也没有直接的方法只安装 pyproject.toml 文件中列出的依赖项。

虽然此工作流程最初侧重于帮助可能不适应或不熟悉这些概念的初学者,但我们希望它也能成为更高级的开发人员工具。我们希望允许您首选的库管理器通过扩展集成到此工作流中,以支持更高级的工作流。

结论

VS Code 中的 Python 扩展正在不断评估我们可以改善用户在扩展中的体验的方法,无论它们是否是新的。库管理是学习和使用 Python 时的核心基础,我们希望减少成功所需的障碍。与往常一样,我们很乐意听到您对我们功能的想法和反馈。有关此提案的具体反馈可以在 vscode-python#21627上提出。

CLI 命令覆盖范围

作为此调查的一部分,我补充了一个表来跟踪跨包管理工具的 CLI 命令。此表并未说明支持的所有命令,只包含专门与环境创建和包管理相关的命令。此外,下面列出的许多命令都支持用于扩展命令功能的选项,为了简洁起见,此处未记录这些选项。

相关推荐
海阔天空_20138 分钟前
Python pyautogui库:自动化操作的强大工具
运维·开发语言·python·青少年编程·自动化
零意@16 分钟前
ubuntu切换不同版本的python
windows·python·ubuntu
思忖小下27 分钟前
Python基础学习_01
python
q567315231 小时前
在 Bash 中获取 Python 模块变量列
开发语言·python·bash
是萝卜干呀1 小时前
Backend - Python 爬取网页数据并保存在Excel文件中
python·excel·table·xlwt·爬取网页数据
代码欢乐豆1 小时前
数据采集之selenium模拟登录
python·selenium·测试工具
Mortal_hhh1 小时前
VScode的C/C++点击转到定义,不是跳转定义而是跳转声明怎么办?(内附详细做法)
ide·vscode·stm32·编辑器
狂奔solar2 小时前
yelp数据集上识别潜在的热门商家
开发语言·python
Tassel_YUE2 小时前
网络自动化04:python实现ACL匹配信息(主机与主机信息)
网络·python·自动化
聪明的墨菲特i2 小时前
Python爬虫学习
爬虫·python·学习