在Visual Studio Code中编辑Python
Visual Studio Code 是一个强大的 Python 源代码编辑工具。该编辑器包括各种功能,帮助您在编写代码时提高生产力。有关在 Visual Studio Code 中编辑的更多信息,请参阅 基本编辑 和 代码导航。
在本概述中,我们将描述 Python 扩展提供的具体编辑功能,包括如何通过用户和工作区 设置自定义这些功能的步骤。
自动完成和智能感知
IntelliSense 是与代码补全相关的代码编辑功能的总称。花一点时间看看下面的例子。当print 被输入时,注意 IntelliSense 如何填充自动完成选项。当用户开始输入名为greeting 的变量时,也会给他们一个选项列表。

自动完成和IntelliSense已为当前工作文件夹中的所有文件提供。它们也适用于安装在标准位置的Python包。
Pylance是 VS Code 中 Python 的默认语言服务器,与 Python 扩展一起安装以提供代码补全功能。
Pylance基于微软的Pyright静态类型检查工具,利用类型stub(.pyi文件) 和惰性类型推断,以提供高性能的开发体验。
关于IntelliSense的更多信息,请参见IntelliSense.
小贴士:查看 VS Code 的 IntelliCode 扩展。IntelliCode 为 Python 的 IntelliSense 提供了一组 AI 助手功能,例如根据当前代码上下文推断最相关的自动完成建议。有关更多信息,请参阅 VS Code 的 IntelliCode 常见问题。
自定义IntelliSense行为
默认启用完整的IntelliSense功能可能会使您的开发体验感觉更慢,因此Python扩展启用了一组最小的功能,使您能够在保持高性能体验的同时进行开发。但是,您可以通过多个设置来自定义分析引擎的行为。
启用自动导入
Pylance 为您的工作区中的模块和您环境中安装的包提供自动导入建议。当您在编辑器中输入时,可能会收到完成建议。当您接受建议时,自动导入会自动将相应的导入语句添加到您的文件中。
您可以通过设置启用自动导入python分析自动导入补全至真在你的设置中。默认情况下,自动导入是禁用的。

启用自定义包位置的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 是一个由AI驱动的代码补全工具,帮助你更快更智能地编写代码。你可以在VS Code中使用GitHub Copilot扩展来生成代码,或者从它生成的代码中学习。
GitHub Copilot为多种语言和各种框架提供建议,尤其适用于Python、JavaScript、TypeScript、Ruby、Go、C#和C++。
您可以在 Copilot 文档中了解更多关于如何开始使用 Copilot 的信息。
导航
在编辑时,您可以右键单击不同的标识符以利用一些方便的命令
-
转到定义 (F12) 从你的代码跳转到定义一个对象的代码。当你在使用库时,这个命令很有帮助。
-
查看定义 (⌥F12 (Windows Alt+F12, Linux Ctrl+Shift+F10)),类似但直接在编辑器中显示定义(使编辑器Windows留出空间,避免遮挡任何代码)。按Escape关闭查看Windows或使用右上角的x。
-
转到声明 跳转到在您的代码中声明变量或其他对象的点。
-
Peek 声明 类似,但直接在编辑器中显示声明。再次使用 Escape 或右上角的 x 以关闭 Peek Windows。
快速修复
添加导入
使用 Pylance 时,添加导入快速修复功能可以快速完成在你的环境中安装的模块的导入语句。当你在编辑器中开始输入一个包名时,会有一个代码操作自动完成源代码行。将鼠标悬停在文本(用波浪线标记)上并选择代码操作灯泡。然后你可以从潜在的导入列表中进行选择。

此代码行动还承认了一些流行的以下常见Python包的缩写:numpyas np,张量流作为TF熊猫作为pdmatplotlib.pyplotas pltmatplotlibasmpl数学作为m,scipi.io作为间谍,和科学Python库作为 sp面板作为pn,并且全视图as hv.

导入建议列表显示了三个高置信度的导入选项,按以下顺序优先排序:最近使用的导入项、来自同一模块的符号、来自标准库的符号、来自用户模块的符号、来自第三方包的符号,最后按模块和符号名称排序。
搜索更多进口匹配
默认情况下,添加导入快速修复只显示3个高置信度的导入选项。如果它们没有列出您要查找的内容,您可以使用Pylance搜索其他导入匹配 缺失导入错误的快速修复。此快速修复显示一个快速选择菜单,使您可以搜索与缺失的导入符号前缀匹配的导入选项。

更改拼写
Pylance 在未解决的变量或缺少的导入诊断中显示 更改拼写 快速修复,当它们很可能是由于拼写错误时。此代码操作建议根据工作区中找到的最接近的匹配来更正符号的拼写。

注意:对于用户符号,这些快速修复只会建议从定义它们的文件中导入。不支持从用户符号为外部/导入的文件中进行导入建议。
请注意,对于来自已安装包的符号(通常位于
站点包你的Python环境的文件夹中,只有在包根目录中定义的,例如在其__init__.py文件,由这些快速修复建议。你可以通过以下方式为特定软件包自定义此行为python分析.包索引深度设置,但请注意这可能会影响 Pylance 的性能。
重构
Python扩展通过Pylance扩展添加了以下重构功能:提取变量,提取方法,重命名模块,移动符号和实现所有继承的抽象类。它还支持实现附加重构功能的扩展,例如按导入排序。
提取变量
提取当前作用域内选定文本的所有相似出现,并用一个新变量替换。
你可以通过选择你希望提取为变量的代码行来调用此命令。然后选择旁边显示的灯泡。

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

重命名模块
在Python文件/模块重命名后,Pylance可以找到所有可能需要更新的实例,并为您提供所有更改的预览。
要定制需要更新的引用,您可以在Refactor Preview中切换行或文件级别的复选框。一旦您做出了选择,您可以选择应用重构或丢弃重构。

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

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

排序导入
Python扩展支持诸如isort和Ruff之类的扩展,这些扩展实现了Sort Imports功能。此命令将来自同一模块的特定导入合并到一个导入声明,并组织导入按字母顺序排列的声明。
您可以通过安装支持排序导入的扩展来调用此功能,然后打开命令面板 (⇧⌘P (Windows, Linux Ctrl+Shift+P)) 并运行 整理导入.
小贴士:您可以为
编辑器操作:组织导入命令。

故障排除
如需有关于常见IntelliSense和Python编辑问题的帮助,请查看下面的表格:
| 问题 | 原因 | 解决方案 |
|---|---|---|
| Pylance在添加导入时仅提供顶级符号选项。 | 默认情况下,只索引顶级模块(深度=1)。 例如,您可能会看到 导入matplotlib作为一个建议,但不是导入matplotlib.pyplot默认情况下。 |
尝试增加Pylance索引您已安装的库的深度python分析.包索引深度检查代码分析设置。 |
| Pylance没有自动添加缺失的导入。 | 自动导入完成设置可能会被禁用。 | 查看启用自动导入部分。 |
| 自动导入已启用,但 Pylance 未自动导入工作区中其他文件中定义的符号。 | 用户定义的符号(那些不是来自已安装的包或库的符号)只有在它们已经在编辑器中打开的文件中被使用过时,才会自动导入。 否则,它们只能通过添加导入快速修复来使用。 |
使用添加导入快速修复,或者确保首先在工作区打开相关文件。 |
| Pylance 在大型工作区中似乎很慢或消耗过多内存。 | Pylance分析在给定的工作区中对所有文件进行分析。 | 如果有一些子文件夹你知道可以排除在Pylance的分析之外,你可以将它们的路径添加到python分析排除设置。或者,您可以尝试设置python分析索引至假的 以禁用 Pylance 的索引器 (注意:这也将影响 completions 和自动导入的体验。了解更多关于索引的信息,请参阅 代码分析设置)。 |
| 您无法将自定义模块安装到您的Python项目中。 | 自定义模块位于非标准位置(未使用pip安装)。 | 将位置添加到python自动完成附加路径设置并重启 VS Code。 |
Pylance 诊断
Pylance默认情况下会在问题面板中为Python文件提供诊断信息。
以下是一些由Pylance提供的最常见诊断及其解决方法。
导入解析源失败
此错误发生在Pylance能够找到导入包的类型stub,但无法找到该包本身时。这可能发生在您尝试导入的包未安装在所选的Python环境中时。
如何修复它
- 如果该包已经安装在其他解释器或内核中,选择正确的解释器。
- 如果未安装该包,您可以通过在已激活的终端中运行以下命令来安装它:
python -m pip install {软件包名称}输入:.
导入解析失败
这个错误发生在Pylance无法找到你正在导入的包或模块及其类型提示时。
如何修复它
- 如果您正在导入模块,请确保它存在于您的工作区或包含在
python自动完成附加路径设置。 - 如果您正在导入一个未安装的包,可以通过在激活的终端中运行以下命令来安装它:
python -m pip install {软件包名称}输入:. - 如果你正在导入一个已在其他解释器或内核中安装的包,选择正确的解释器。
- 如果你正在使用可编辑安装,并且当前设置为使用import hooks,请考虑切换到使用
.pth仅包含文件路径的文件,以增强兼容性和确保更平滑的导入行为。在 Pyright 文档 中了解更多信息。
导入循环检测
此错误发生在Pylance检测到两个或多个模块之间存在循环依赖时。
如何修复它
尝试重新排列你的导入语句以打破循环依赖。
Pylance 的诊断严重性可以通过以下方式进行自定义python分析诊断严重程度覆盖 设置。查看 设置参考 以获取更多信息。
下一步
- 代码检查 - 启用、配置和应用各种Python代码检查工具。
- 调试 - 学习如何在本地和远程调试Python。
- 测试 - 配置测试环境并发现、运行和调试测试。
- 基本编辑 - 了解强大的 VS Code 编辑器。
- 代码导航 - 快速浏览您的源代码。
- IntelliSense - 了解IntelliSense功能。
- Jupyter 支持 - 了解如何开始使用 Jupyter Notebook。
- Python 扩展模板 - 创建一个扩展来整合你最喜欢的 Python 工具。
