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 命令。此表并未说明支持的所有命令,只包含专门与环境创建和包管理相关的命令。此外,下面列出的许多命令都支持用于扩展命令功能的选项,为了简洁起见,此处未记录这些选项。

相关推荐
爱数学的程序猿4 分钟前
Python入门:6.深入解析Python中的序列
android·服务器·python
xianwu5436 分钟前
反向代理模块。开发
linux·开发语言·网络·c++·git
scoone8 分钟前
VSCode 性能优化指南:提高编码效率,减少资源占用
ide·vscode·编辑器
m0_7482323911 分钟前
在Linux centos7环境下部署wblogic使用weblogic部署war包项目
linux·运维·服务器
李先静25 分钟前
用 gdbserver 调试 arm-linux 上的 AWTK 应用程序
linux·arm开发·awtk
地球空间-技术小鱼26 分钟前
YUM(Yellowdog Updater, Modified)和DNF(Dandified YUM)简介
linux·运维·服务器·笔记·学习
忆源27 分钟前
Linux高级--2.4.2 linux TCP 系列操作函数 -- 深层理解
linux·网络·tcp/ip
comli_cn31 分钟前
使用清华源安装python包
开发语言·python
赵谨言42 分钟前
基于python 微信小程序的医院就诊小程序
经验分享·python·毕业设计
1.01^10001 小时前
[1111].集成开发工具Pycharm安装与使用
python·pycharm