在Visual Studio Code中编辑Python。
Visual Studio Code 是一款强大的 Python 源代码编辑工具。编辑器包含多种功能,帮助你在写代码时提高生产力。有关在 Visual Studio Code 中编辑的更多信息,请参见基础编辑和代码导航。
在本概述中,我们将介绍 Python 扩展提供的具体编辑功能,包括如何通过用户和工作区设置自定义这些功能。
自动补全与IntelliSense
IntelliSense 是一个通用术语,指的是与代码完成相关代码编辑功能的特性。请花点时间看看下面的示例。打印时,注意IntelliSense如何填充自动补全选项。用户在开始输入名为 Greeting 的变量时,还会获得一系列选项。

当前工作文件夹内的所有文件都提供了自动补全和IntelliSense功能。它们也适用于安装在标准位置的 Python 包。
Pylance 是 Python VS Code 的默认语言服务器,并与 Python 扩展一起安装,以提供 IntelliSense 功能。
Pylance 基于 Microsoft 的 Pyright 静态类型检查工具,利用类型存根 (.pyi文件)和懒惰类型推理,以提供高性能的开发体验。
关于IntelliSense的更多信息,请参见IntelliSense。
提示:看看VS Code的IntelliCode扩展。IntelliCode 为 Python 中的 IntelliSense 提供了一组 AI 辅助功能,例如根据当前代码上下文推断最相关的自动补全。更多信息请参见 IntelliCode for VS Code 常见问题解答。
自定义IntelliSense行为
默认启用全部IntelliSense功能可能会让你的开发体验感觉变慢,因此Python扩展只允许你在保持高效体验的同时拥有最低限度的功能。不过,你可以通过多种设置自定义分析引擎的行为。
启用自动导入
Pylance为你工作空间中的模块和你在环境中安装的包提供自动导入建议。当你在编辑器中输入时,可能会收到完成度的建议。当你接受建议时,自动导入会自动将对应的导入语句添加到你的文件中。
你可以通过设置来启用自动导入python.analysis.autoImportCompletions到确实如此在你的设置里。默认情况下,自动导入是被禁用的。

启用 IntelliSense 以实现自定义包的位置
要为安装在非标准位置的包启用 IntelliSense,请将这些位置添加到python.analysis.extraPaths在你的settings.json文件(默认集合为空)。例如,你可能在自定义位置安装了 Google App Engine,这些位置被指定为App.yaml如果你用Flask,在这种情况下,你需要指定这些位置如下:
Windows:
"python.analysis.extraPaths": [
"C:/Program Files (x86)/Google/google_appengine",
"C:/Program Files (x86)/Google/google_appengine/lib/flask-0.12"]
macOS/Linux:
"python.analysis.extraPaths": [
"~/.local/lib/Google/google_appengine",
"~/.local/lib/Google/google_appengine/lib/flask-0.12" ]
关于所有可用的IntelliSense控制项,你可以参考Python扩展代码分析设置和自动补全设置。
你还可以自定义自动补全和IntelliSense的整体行为,甚至可以完全禁用这些功能。你可以在《定制IntelliSense》中了解更多。
用AI提升完成
GitHub Copilot 是一款由人工智能驱动的代码完成工具,帮助你更快更智能地编写代码。你可以在VS Code中使用GitHub Copilot扩展来生成代码,或者从它生成的代码中学习。
GitHub Copilot 为多种语言和各种框架提供了建议,尤其适用于 Python、JavaScript、TypeScript、Ruby、Go、C# 和 C++。
你可以在Copilot文档中了解更多如何开始使用Copilot的方法。
导航
编辑时,你可以右键点击不同的标识符,利用多种便捷的命令
-
进入定义(F12)会从你的代码跳转到定义对象的代码。这个命令在处理库时很有帮助。
-
窥视定义(⌥F12(Windows Alt+F12,Linux Ctrl+Shift+F10))类似,但定义直接显示在编辑器中(在编辑器窗口留出空间以避免代码模糊)。按Esc键关闭窥视窗口,或使用右上角的X键。
-
“进入声明”跳转到变量或其他对象在代码中声明的节点。
-
窥视声明类似,但直接在编辑器中显示声明。同样,使用Escape或右上角的X键关闭窥视窗口。
快速修复
添加导入
使用 Pylance 时,添加导入快速修复功能可以让你快速完成环境中已安装模块的导入语句。当你开始在编辑器中输入包名时,会有一个代码作自动完成源代码行。将鼠标悬停在用曲线标记的文本上,选择代码作灯泡。然后你可以从潜在导入列表中选择。

本代码作还认可以下常见 Python 包的一些常用缩写:数字作为NP,张量流作为TF,熊猫作为PD,matplotlib.pyplot作为 PLT,Matplotlib作为议员,数学作为 m,scipi.io作为斯皮奥,以及斯基皮作为单字,小组作为 pn,且全息视图作为HV。

导入建议列表显示了前三个高置信度导入选项,优先级排序如下:最近使用的导入、同一模块的符号、标准库中的符号、用户模块的符号、第三方软件包的符号,以及按模块和符号名称排序。
寻找更多外援比赛
默认情况下,添加导入快速修复只显示3个高置信度导入选项。如果他们没有列出你想要的,你可以用Pylance搜索快速修复的导入匹配,以解决缺失的导入错误。此快速修复显示快速选择菜单,允许你搜索与缺失导入符号匹配的导入选项。

更改拼写
Pylance会在未解决变量或缺失导入时显示“更改拼写快速修复”,当这些诊断很可能由拼写错误引起时。该代码作根据工作区中最接近的匹配,建议符号的正确拼写。

注意:对于用户符号,这些快速修复只会建议从定义过的文件导入。不支持从外部或导入用户符号的文件导入建议。
还要注意,对于来自已安装包的符号(通常位于
站点包仅限于包根文件夹中定义的,例如__init__.py文件,这些都是通过这些快速修复建议的。你可以针对特定包裹定制这种行为,通过以下方式python.analysis.packageIndexDepths但请注意,这可能会影响Pylance的表演。
重构
Python 扩展通过 Pylance 扩展增加了以下重构功能:提取变量、提取方法、重命名模块、移动符号以及实现所有继承的抽象类。它还支持实现额外重构功能的扩展,如排序导入。
提取变量
提取当前作用域内所有相似的文本出现,并用新变量替换。
你可以通过选择你想提取的代码行作为变量来调用此命令。然后选择旁边显示的灯泡。

提取方法
提取当前作用域内所有相似的选定表达式或块,并用方法调用替换。
你可以通过选择想要提取的代码行作为方法来调用此命令。然后选择旁边显示的灯泡。

重命名模块
在 Python 文件/模块重命名后,Pylance 可以找到所有需要更新的实例,并预览所有变更内容。
要自定义需要更新的引用,可以在重构预览中从文件层面或行中切换复选框。选择完成后,你可以选择应用重构或丢弃重构。

移动符号
Pylance 扩展提供了两个代码动作,以简化将符号移动到不同文件的过程:
- 移动符号到...:显示文件选择器,选择要移动符号的目标文件。
- 将符号移动到新文件:创建一个带有符号名称的新文件,位于调用代码动作的源文件同一目录中。
你可以将鼠标悬停在你想移动的符号上,然后选择出现在目标动作旁边的灯泡来访问这些代码动作。或者,你可以右键点击符号,然后从上下文菜单中选择重构......。

实现所有继承的抽象类
在 Python 中,抽象类作为其他类的“蓝图”,通过促进清晰的结构和子类遵循的要求,帮助构建模块化、可复用的代码。要在 Python 中定义抽象类,你可以创建一个继承自ABC在ABC模块,并用@abstractmethod装饰师。然后,你可以创建继承这个抽象类的新类,并为基础方法定义实现。
Pylance提供代码作,简化创建这些类的过程。当你定义一个继承自抽象类的新类时,你现在可以使用“实现所有继承的抽象类”代码作“来自动实现父类的所有抽象方法和属性:

排序导入
Python 扩展支持 isort 和 Ruff 等扩展,实现了排序导入功能。该命令将同一模块中的特定导入合并到一个进口陈述,并组织进口按字母顺序排列的陈述。
你可以通过安装支持排序导入的扩展,然后打开命令调色板(⇧⌘P(Windows,Linux Ctrl+Shift+P))并运行“组织导入”来调用。
提示:你可以给
editor.action.organizeImports指挥部。

故障排除
如需解决常见的IntelliSense和Python编辑问题,请查看下表:
| 问题 | 病因 | 解决方案 |
|---|---|---|
| Pylance在添加导入时只提供顶层符号选项。 | 默认情况下,只有顶层模块被索引(depth=1)。 例如,你可能会看到 导入 matplotlib这只是个建议,但不是导入 matplotlib.pyplot默认。 |
试着增加 Pylance 通过python.analysis.packageIndexDepths.检查代码分析设置。 |
| Pylance不会自动添加缺失的导入 | 自动导入完成设置可以被禁用。 | 请查看“启用自动导入”部分。 |
| 自动导入已启用,但Pylance不会自动导入工作区中其他文件中定义的符号。 | 用户自定义符号(非来自已安装包或库的符号)只有在编辑器中已打开的文件中使用后才会自动导入。 否则,它们只能通过添加导入快速修复获得。 |
使用添加导入快速修复,或者先打开工作区里的相关文件。 |
| Pylance在大型工作空间中显得很慢或者占用太多内存。 | Pylance 分析对给定工作区中存在的所有文件进行。 | 如果你知道有些子文件夹可以排除在Pylance的分析之外,你可以将它们的路径添加到python.analysis.exclude环境。或者,你也可以尝试设置python.analysis.indexing到错误关闭Pylance的索引器(注:这也会影响完成和自动导入的体验。了解更多关于代码分析中索引的信息)。 |
| 你无法在你的Python项目中安装自定义模块。 | 定制模块位于非标准位置(未使用PIP安装)。 | 将位置添加到python.autoComplete.extraPaths设置并重启 VS Code。 |
派伦斯诊断
Pylance 默认在问题面板中提供 Python 文件的诊断功能。
以下列出了Pylance提供的一些最常见的诊断方法及其修复方法。
importResolveSourceFailure(进口ResolveSourceFailure)
当Pylance能够找到导入包的类型存根,但无法找到包本身时,就会出现此错误。当你试图导入的包未安装在所选的Python环境中时,就会发生这种情况。
如何修复
- 如果该包已经安装在不同的解释器或内核中,请选择正确的解释器。
- 如果该软件包尚未安装,您可以通过在已激活的终端中执行以下命令来安装:
Python -m pip install {package_name}.
importResolveFailure
当Pylance找不到你导入的包或模块及其类型存根时,就会出现此错误。
如何修复
- 如果你要导入模块,确保它存在于你的工作区或包含在
python.autoComplete.extraPaths环境。 - 如果你导入的包未安装,可以通过在已激活的终端中执行以下命令来安装:
Python -m pip install {package_name}. - 如果你导入的包已经安装在不同的解释器或内核中,请选择正确的解释器。
- 如果你使用的是可编辑安装,且目前设置为使用导入钩子,可以考虑改用
.pth仅包含文件路径的文件,以增强兼容性并确保导入更顺畅。了解更多请访问Pyright文档。
importCycleDetected
当Pylance检测到两个或多个模块之间的循环依赖时,就会出现这种错误。
如何修复
试着重新排序导入语句,打破循环依赖。
Pylance诊断的严重程度可以通过以下方式进行定制python.analysis.diagnosticSeverityOverrides环境。查看设置参考以获取更多信息。
下一步
- 线条化——启用、配置并应用各种Python模板。
- 调试——学习本地和远程调试Python。
- 测试——配置测试环境,并发现、运行和调试测试。
- 基础编辑——了解强大的VS Code编辑器。
- 代码导航——快速浏览源代码。
- IntelliSense - 了解 IntelliSense 的功能。
- Jupyter 支持——了解如何开始使用 Jupyter Notebooks。
- Python 扩展模板——创建一个扩展来集成你喜欢的 Python 工具。
