← 返回博客

让 Zed 中的 Python 变得有趣

2025年10月2日

在 Zed 中使用 Python 的体验并不尽如人意。虚拟环境经常被忽略,配置可能令人困惑,并且入门体验可能会在一些微小但令人沮丧的方面受阻。今年,我们已将 Python 列为我们特定语言计划的一部分,优先处理。

现在,当你在 Zed 中使用 Python 时,你会得到:

  • 更好的虚拟环境检测:Zed 现在使用工具链选择器自动检测和管理虚拟环境。
  • 支持单体仓库:每个子项目都有自己的工具链,通过 pyproject.toml 进行跟踪。
  • 更可靠的服务器:Zed 为每个工具链运行独立的语言服务器,保持补全、跳转和悬停的准确性。
  • 默认 LSP 为 Basedpyright:我们现在开箱即用支持 ty 和 Ruff,并通过扩展支持 Pyrefly。

继续阅读以了解我们改进了哪些以及如何改进。

LSP 远远不够

语言服务器协议(LSP)使重要功能成为可能,但我们不喜欢现状。其他编辑器感觉更完整,因为它们以更周到的方式集成这些服务器,并减少了配置开销。我们的目标是达到那种轻松程度,这样你就可以编写代码而无需担心配置。

特别是 Python,它暴露了将 LSP 视为全部的局限性。Python 生态系统庞大:多个包管理器(pip、poetry、conda)、相互竞争的虚拟环境工具、具有重叠依赖关系的单体仓库,以及不断增长的具有不同优点的语言服务器。仅靠语言服务器无法知道你正在使用哪个解释器、你的虚拟环境是否处于活动状态,或者如何将该上下文连接到补全、跳转到定义或调试。这就是为什么许多编辑器中的 Python 用户最终都在处理配置文件、调整路径或与损坏的虚拟环境检测作斗争。我们不喜欢那样!

与虚拟环境的搏斗

以虚拟环境为例。直到今年早些时候,Zed 对活动虚拟环境一无所知(除了处理终端中虚拟环境自动激活的一小段代码)。用户不得不深入研究配置文件才能将 Zed 指向正确的解释器。太糟糕了。

这就是我们引入工具链选择器的原因;它允许每种语言提供一组工具链,然后你可以从中进行选择。我们对一个比“虚拟环境选择器”更通用的解决方案特别感兴趣,因为我们不希望存在仅仅为了掩盖 Python 复杂性而存在的代码路径。这也有利于其他具有自己风味的工具链的语言(如 Rust 或 JavaScript/TypeScript),即使它们不像 Python 那样显眼。

选择器本身运行在微软的 python-environment-tools1 上——与 Visual Studio Code 中虚拟环境检测的幕后功臣相同。多亏了它,这篇博客文章不需要一整个章节来讨论 Zed 未能检测到一些 obscure 环境。我们遇到的大多数问题都源于我们自己的代码库。

尽管如此,选择器仍有粗糙之处。特别是序列化需要改进。目前,你的工具链选择可能不会按预期持久化。我们计划使这些选择更可靠。

单体仓库和子项目

完美的虚拟环境处理本身并不能使 Zed 成为一个完美的 Python 环境。在单体仓库中工作的开发人员通常需要多个虚拟环境,每个子项目一个。他们希望能够选择不相交的工具链。这比听起来要棘手。

在单体仓库中工作的开发人员通常需要不止一个虚拟环境:每个子项目一个。但 Zed 最初将一个项目绑定到一个工具链,一旦你需要多个工具链,这种做法就失效了。为了解决这个问题,我们引入了清单树。Zed 现在会跟踪你的工作树中清单的位置——对于 Python 来说,就是你正在编辑的文件最近的 pyproject.toml 文件。当你为一个文件选择一个虚拟环境时,Zed 会将这个选择与清单的位置绑定,这样该子项目中的每个文件都共享相同的工具链。这样,你就可以在不同的子项目中使用不同的工具链,而不会将它们混淆在一个子项目内。

分离服务器以保持理智

你无法处理多个……或者你能吗?

我们能修补服务器来处理多个工具链吗?也许可以,但复杂性会呈指数级增长。我们认为它应该属于客户端。这就是为什么 Zed 现在为每个工具链运行一个单独的服务器。每个项目都保持隔离,服务器可以专注于做好自己的工作。我们这边复杂,你那边一致。

运行多个语言服务器的更改已在版本 v0.201 中发布。我们很高兴收到您关于其工作原理的反馈。

押注未来:ty、Pyrefly 及更多

我们押注 Astral 将颠覆 Python 生态系统。我们已经说出来了。ty 已经解决了我们发现的其他服务器的性能问题。我们为此构建了一个扩展,我们的计划是将 Ty 纳入 Zed 的核心,这样你就不需要安装任何东西。它最初将默认禁用,但我们预计将来会将其启用。

我们也在关注 pyrefly,我们仍然支持 Pyright 和 Pylsp。它们不会消失,我们将继续将它们作为选项,以方便你的过渡。但我们希望 ty 能成功。对于我们来说,与用 Rust 编写的服务器交互会更容易,对于你来说,获得快速、可靠的结果也会更容易。

接下来是什么

我们将继续改进 Zed 中的 Python 体验,我们很高兴在 2026 年推出笔记本。我们希望将 Zed 打造成 Python 开发者渴望使用的工具,而不仅仅是忍受的工具。

我们希望听到你的反馈:这些改进感觉如何?我们还能做得更好吗?加入这个GitHub 讨论,让我们知道——认真地说。

脚注

  1. PET 也用于为 Visual Studio Code 中的虚拟环境搜索提供支持。


正在寻找更好的编辑器吗?

您今天就可以在 macOS、Windows 或 Linux 上试用 Zed。立即下载


我们正在招聘!

如果您对我们博客中涵盖的主题充满热情,请考虑加入我们的团队,帮助我们实现软件开发的未来。