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

Visual Studio Code Python 扩展中的包管理
排版:Alan Wang Python 凭借其简单的语法和强大的库,目前已成为最流行的编程语言之一,也是最适合那些刚接触编程的人们的语言。但是,随着项目复杂性和规模的增长,管理依赖项的复杂性也会增加。当新用户不断承接更成熟的…...
spring学习笔记九
数据源对象管理 1、加入pom坐标 <dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.1.16</version></dependency><!-- https://mvnrepository.com/artifact/c3p0/c3p0 --><depe…...
java list stream 使用
1、实现List对象集合的简单去重(distinct()) List<User> list list.stream().distinct().collect(Collectors.toList()); 2、实现List集合的根据属性(name)去重 list list.stream().filter(o -> o.getName() ! …...
两个Ubuntu电脑用SSH远程连接
两个Ubuntu电脑用SSH远程连接 1.ssh客户端及服务端的安装: 打开终端后,只需要以下两个命令即可 sudo apt-get install openssh-clientsudo apt-get install openssh-server2.启动ssh服务,执行以下命令: sudo /etc/init.d/ssh …...

讲解 @ServletComponentScan注解
目录: 1、用法介绍2、实例讲解 1、介绍 在SpringBoot项目启动器中添加ServletComponentScan注解后,SpringBoot在启动时会扫描并注册所有带有WebServlet(控制器)、WebFilter(过滤器)、WebListener(监听器&a…...

20款奔驰S350商务型加装原厂前排座椅通风系统,夏天必备的功能
通风座椅的主动通风功能可以迅速将座椅表面温度降至适宜程度,从而确保最佳座椅舒适性。该功能启用后,车内空气透过打孔皮饰座套被吸入座椅内部,持续时间为 8 分钟。然后,风扇会自动改变旋转方向,将更凉爽的环境空气从座…...

Rust vs Go:常用语法对比(十一)
题目来自 Rust Vs Go: Which Language Is Better For Developing High-Performance Applications?[1] 202. Sum of squares Calculate the sum of squares s of data, an array of floating point values. 计算平方和 package mainimport ( "math")func main() { da…...

Spring MVC拦截器和跨域请求
一、拦截器简介 SpringMVC的拦截器(Interceptor)也是AOP思想的一种实现方式。它与Servlet的过滤器(Filter)功能类似,主要用于拦截用户的请求并做相应的处理,通常应用在权限验证、记录请求信息的日志、判断用…...

C++初阶--C++入门
目录 前言C关键字命名空间命名空间的定义命名空间的使用加命名空间名称及作用域限定符使用using namespace 命名空间名称引入使用using将命名空间中的成员引入 C的输入与输出缺省参数全缺省半缺省参数 函数重载参数类型不同参数个数不同参数类型顺序不同 引用引用特性 常引用使…...
Matlab实现PID控制仿真(附上30个完整仿真源码+数据)
本文介绍了如何使用Matlab实现PID控制器的仿真。首先,我们将简要介绍PID控制器的原理和控制算法。然后,我们将使用Matlab编写一个简单的PID控制器,并使用仿真环境来验证其性能。最后,我们将通过调整PID控制器的参数来优化控制系统…...
微信小程序:文件下载
目录 第一步 请求资源 第二步 获取资源后写入到微信本地 获取资源 写入资源(wx.getFileSystemManager)writeFile 的api 第三步 读取资源(openDocument与saveImageToPhotosAlbum) 第一步 请求资源 下面是请求接口中的脚本内容 export let baseUrl http://192.168.78.112…...

QString和QByteArray的区别
QString和QByteArray的区别 本质格式转换QString字符串格式化打印长度 本质 QString是对QByteArray的再次封装 QString可以通过char*来构造,也可以通过QByteArray来构造 QByteArray就是char* QString是编码后的char* QString也是封装了字符串, 但是内部的编码为utf…...

Vue3 Vite electron 开发桌面程序
Electron是一个跨平台的桌面应用程序开发框架,它允许开发人员使用Web技术(如HTML、CSS和JavaScript)构建桌面应用程序,这些应用程序可以在Windows、macOS和Linux等操作系统上运行。 Electron的核心是Chromium浏览器内核和Node.js…...

【Nodejs】Express模板使用
1.Express脚手架的安装 安装Express脚手架有两种方式: 使用express-generator安装 使用命令行进入项目目录,依次执行: cnpm i -g express-generator可通过express -h查看命令行的指令含义 express -hUsage: express [options] [dir] Optio…...

【iOS】App仿写--管理系统
文章目录 前言一、账号界面二、功能界面三、添加功能四、删除功能五、更改功能六、查找功能七、排序功能八、退出功能总结 前言 在日常生活中,如果用文字来记述与管理我们数据会十分麻烦,并且人工成本较高,这里笔者给出一种管理系统的模版&a…...
JS实现队列的数据结构
创建queue.ts /*** 队列*/ export default class Queue<T> {private items: object;private count: number;private header: number;constructor() {this.items {};this.count this.header 0;}/*** 入队列* param element* returns 当前队列的数量*/enqueue(element:…...
title: 用 LangChain 构建基于资料库的问答机器人(四):通过代理使用外部工具
上一篇教程我们介绍了 ReAct 系统,这是一个非常强大的行为模式,但它需要编写大量的示例来告诉 LLM 如何思考、行动,并且为了遵循这个模式,还需要编写代码来分析生成文字、调用函数、拼接 prompt 等,这些工作都是十分繁…...

使用 CSS 自定义属性
我们常见的网站日夜间模式的变化,其实用到了 css 自定义属性。 CSS 自定义属性(也称为 CSS 变量)是一种在 CSS 中预定义和使用的变量。它们提供了一种简洁和灵活的方式来通过多个 CSS 规则共享相同的值,使得样式更易于维护和修改。…...

Unity 性能优化一:性能标准、常用工具
性能标准 推荐耗时: 性能提现到玩家直观感受,就是帧率,为了达到要求的帧率,就要控制CPU的耗时,不同类型的游戏,对帧率要求不一样。下面是推荐耗时: 推荐内存: 避免游戏闪退的重点…...
【http长连接+池化】
参考: https://it.cha138.com/ios/show-49862.html http://blog.chinaunix.net/uid-16480950-id-103597.html https://www.cnblogs.com/kevin-yuan/p/13731552.html https://www.jianshu.com/p/17e9aacca438 一、http长连接和短连接 HTTP协议是无状态的协议&#…...

7.4.分块查找
一.分块查找的算法思想: 1.实例: 以上述图片的顺序表为例, 该顺序表的数据元素从整体来看是乱序的,但如果把这些数据元素分成一块一块的小区间, 第一个区间[0,1]索引上的数据元素都是小于等于10的, 第二…...
java 实现excel文件转pdf | 无水印 | 无限制
文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...

无法与IP建立连接,未能下载VSCode服务器
如题,在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈,发现是VSCode版本自动更新惹的祸!!! 在VSCode的帮助->关于这里发现前几天VSCode自动更新了,我的版本号变成了1.100.3 才导致了远程连接出…...

为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?
在建筑行业,项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升,传统的管理模式已经难以满足现代工程的需求。过去,许多企业依赖手工记录、口头沟通和分散的信息管理,导致效率低下、成本失控、风险频发。例如&#…...

Mac软件卸载指南,简单易懂!
刚和Adobe分手,它却总在Library里给你写"回忆录"?卸载的Final Cut Pro像电子幽灵般阴魂不散?总是会有残留文件,别慌!这份Mac软件卸载指南,将用最硬核的方式教你"数字分手术"࿰…...
python如何将word的doc另存为docx
将 DOCX 文件另存为 DOCX 格式(Python 实现) 在 Python 中,你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是,.doc 是旧的 Word 格式,而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...

自然语言处理——循环神经网络
自然语言处理——循环神经网络 循环神经网络应用到基于机器学习的自然语言处理任务序列到类别同步的序列到序列模式异步的序列到序列模式 参数学习和长程依赖问题基于门控的循环神经网络门控循环单元(GRU)长短期记忆神经网络(LSTM)…...
Python 包管理器 uv 介绍
Python 包管理器 uv 全面介绍 uv 是由 Astral(热门工具 Ruff 的开发者)推出的下一代高性能 Python 包管理器和构建工具,用 Rust 编写。它旨在解决传统工具(如 pip、virtualenv、pip-tools)的性能瓶颈,同时…...
Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信
文章目录 Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket(服务端和客户端都要)2. 绑定本地地址和端口&#x…...

回溯算法学习
一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...