Ohhnews

分类导航

$ cd ..
Jetbrains Blog原文

PyCharm 2026.3 发布:303 项修复与改进,提升类型推断和调试体验

#pycharm#jetbrains#python#类型推断#调试

PyCharm 2026.3 来了!除了 JetBrains Air、工作区、Python 3.15 延迟导入以及重新设计的解释器组件等主要功能外,本次发布还包含 303 项修复和改进,涉及日常 Python 开发。

从更智能的代码补全到更可靠的环境和调试,以下是一些值得了解的变更——包括对十多年前报告的问题的修复。

更智能的代码洞察与类型推断

更好地支持 functools.partial

functools.partial 允许你预先传入函数的某些参数,从而创建一个新的可调用对象。此前,PyCharm 可能难以推断生成的签名,导致参数信息缺失并产生错误警告。

现在,PyCharm 能够理解剩余参数、检查其类型,并将 partial 对象识别为有效的 Callable 实例。在下面的示例中,PyCharm 正确识别出剩余参数,并标记出不兼容的实参。 [LOADING...]

PyCharm 能够理解 functools.partial 对象的剩余参数。

这解决了补全、参数信息和类型检查方面的多个长期存在的问题(PY-35363、PY-33618、PY-25698、PY-36385)。

减少泛型和集合的误报

PyCharm 现在能为泛型类、有界和受约束的类型变量、重载构造函数以及泛型 __getattr__ 方法提供更准确的类型推断。例如,在有界类型变量上调用方法时,现在会保留其返回类型,而不再回退为 Any(PY-89863)。

集合推断也有所改进。嵌套列表、可选值、字典字面量和元组解包现在会产生更少的错误警告(PY-89564、PY-91999)。Literal、Enum 和 TypedDict 也有改进,并且通过 ty_extensions.Intersection 支持 PEP 747 的 TypeForm[T] 和交叉类型(PY-90287、PY-62524、PY-89043、PY-87024)。

更清晰的类型警告与抑制注释

当 PyCharm 发现类型不匹配时,其工具提示现在会提供更清晰的说明、更好的格式以及指向相关类型的链接。调用和控制流分析现在也能处理更多涉及可选可调用对象、绑定方法以及永不返回的路径的情况,从而减少错误警告(PY-90555、PY-83644)。

当某个警告是有意为之的时候,你可以更好地控制如何抑制它。PyCharm 现在支持在 # type: ignore[...] 注释中使用更短的代码,并新增 # pycharm: ignore[...] 用于单独抑制 PyCharm 检查项。此外还新增了 使用“type: ignore”注释抑制 操作,未知的抑制代码会被标记出来,以便发现拼写错误(PY-90787、PY-92114)。 [LOADING...]

PyCharm 2026.3 引入了新操作,可使用 # type: ignore[...] 注释抑制单个类型警告。

测试与开发者工具

改进 pytest 与 Mock 的补全

Mock 和 fixture 对 IDE 来说可能不容易理解。PyCharm 现在为 pytest-mock 的 mocker fixture 提供补全,为 mocker.patch() 的目标提供导航,并基于传给 Mock(spec=...) 或 Mock(spec_set=...) 的类提供补全。

from unittest.mock import Mock

class Client:
    def fetch(self, url: str) -> str:
        return "OK"

client = Mock(spec=Client)
client.fetch("https://example.com")

[LOADING...]

PyCharm 2026.3 为传给 Mock(spec=...) 的类中定义的方法提供补全。

PyCharm 还会标记无效的 unittest.mock.patch() 目标,并改进 pytest fixture 的补全和文档(PY-36260、PY-32282)。

对于使用自定义测试基础设施的项目,你可以配置 unittest 运行器脚本,例如 Django 的 tests/runtests.py。如果该脚本使用 unittest.TextTestRunner,测试结果会显示在 PyCharm 的测试树中(PY-26068)。

更强大的类型检查器与 Ruff 集成

Zuban 是一个兼容 mypy 的类型检查器和语言服务器,现在与 ty、Pyrefly 和 basedpyright 一样,成为受支持的外部工具。其集成提供诊断、补全、悬停信息、嵌入提示和快速修复。Pyrefly 也修复了自定义导入根和缺失包安装方面的问题(PY-85009、PY-89805)。

在 Ruff 方面,优化导入 现在会移除未使用的导入并对其进行整理。Ruff 修复可以在保存时或提交前自动运行,新的 应用 Ruff 修复 操作可作用于选定范围,包括整个项目。在多根项目、网络项目和 WSL 项目中,配置发现也更可靠(PY-85534、PY-86352)。 [LOADING...]

直接在 PyCharm 中对单个文件、自定义范围或整个项目应用 Ruff 修复。

Django、FastAPI 与 SQLAlchemy

Django: 你可以为 Django 6.0 任务创建运行配置,并且使用值和标签元组定义的 TextChoices 成员不再误报类型错误(PY-86368、PY-92177)。

在 Django REST framework 中,rest_framework.reverse.reverse() 现在提供 URL 名称补全和导航,就像 Django 内置的 reverse() 一样(PY-78900)。 [LOADING...]

PyCharm 2026.3 为 Django REST framework 的 reverse() 函数提供 URL 名称补全。

FastAPI: 除了新增的交互式依赖图之外,通过依赖提供的路径参数不再导致有关缺少端点参数的错误警告(PY-88935)。

SQLAlchemy: 扩展后的 ORM 支持改进了声明式模型的补全、导航和类型推断。修复还涵盖通过 relationship() 添加的属性以及使用 SQLAlchemy ENUM 类型的列(PY-79736、PY-29212)。

编辑与重构

几个小修复让编辑更可预测。在引入代码块的注释后按 Enter,现在会插入正确的缩进;在制表符缩进的文件中移动行时,也不再产生错误的 Unexpected indent 警告(PY-15693、PY-78251)。

新增的 对齐连续赋值格式化器 选项会对齐赋值运算符。你可以在 设置 | 编辑器 | 代码样式 | Python | 换行和括号 下启用它。格式化器在保留已配置的空行方面也做得更好(PY-34006)。

重构也更安全。内联函数 会保留省略可选参数时的回退行为,而 实现抽象方法 会为异步抽象方法生成有效的实现(PY-81983、PY-53074)。

更可靠的环境与更快的启动速度

conda: 使用 conda env config vars set 或 activate.d 脚本配置的环境变量,现在从 PyCharm 运行脚本、测试和 Python 控制台时也可用。此前,这些变量可能在终端中有效,但在 IDE 内部却缺失——对于使用 GDAL、QGIS、PyMC 或编译器工具链的项目来说尤其令人困扰(PY-55405、PY-38751)。

uv: 使用共享根 .venv 的工作区在从 PyCharm 2026.1 升级后会保留其解释器。不使用 pyproject.toml 而使用 uv pip 的项目现在会使用正确的安装命令;创建 uv 环境不再需要 uv init;新环境可以选择访问系统 site-packages(PY-91108、PY-85589)。

性能: 由于减少了辅助程序开销,Python 脚本启动得更快。特别是,仅仅安装了 matplotlib 不再会为一个原本为空的脚本增加约 100 毫秒的启动时间(PY-92211)。

调试改进

debugpy 调试器模式现在支持 设置值 和 跳转到光标。其他改进包括按类型对变量排序、在 Plots 工具窗口中显示绘图、通过终端模拟接受交互式输入,以及对失败的测试使用 进入调试器。

在下面的示例中,我们暂停了执行,并将 discount 从 0.10 改为 0.25,这样无需重启程序就能测试不同的结果。 [LOADING...]

在 debugpy 模式下调试时更改变量的值。

对于 WSL 中的测试、通过 fastapi dev 启动的应用,以及 macOS 上长时间运行的 IDE 会话,调试也更可靠(PY-90157、PY-90281、PY-90588)。

在调试器的其他方面,字典键按插入顺序显示,Python 3.15 的 frozendict 可以展开,调试控制台支持可配置的启动脚本(PY-75697、PY-21419)。

更轻松的 Jupyter notebook 工作流

查找 现在会同时搜索单元格输出和源代码,因此你无需滚动整个 notebook 就能找到结果。你还可以一起移动选中的多个单元格,或使用 提取到 Python 文件 将它们复制到常规 Python 文件中。导致嵌入 HTML 输出中的脚本执行两次的 bug 也已修复(PY-84634、PY-89385)。

感谢你的反馈

并非每一项有意义的改进都是重点功能。有时,它只是一个错误警告消失了、补全在以前不工作的地方开始工作,或者调试器按预期运行。本次发布中的一些修复可以追溯到十多年前报告的问题。

下载 PyCharm 2026.3 并在你的项目中试用这些改进。如果 PyCharm 出了问题,请在 YouTrack 中报告。你的报告和投票会帮助我们决定接下来改进什么。

感谢使用 PyCharm,祝你编码愉快!