在 Visual Studio Code 中编辑 Python

Visual Studio Code 是一款功能强大的 Python 源代码编辑工具。该编辑器包含各种功能,可帮助您在编写代码时提高工作效率。有关在 Visual Studio Code 中进行编辑的详细信息,请参阅基本编辑代码导航

在本概述中,我们将描述Python 扩展提供的特定编辑功能,包括如何通过用户和工作区设置自定义这些功能的步骤

自动完成和 IntelliSense

IntelliSense 是与代码完成相关的代码编辑功能的总称。花点时间看看下面的例子。键入print时,请注意 IntelliSense 如何填充自动完成选项。当用户开始输入名为greeting的变量时,还会向用户提供一个选项列表。

IntelliSense 的 Hello World 示例

为当前工作文件夹中的所有文件提供自动完成和 IntelliSense。它们还适用于安装在标准位置的 Python 包。

Pylance是 VS Code 中 Python 的默认语言服务器,与 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为来启用它们。true

为自定义包位置启用 IntelliSense

要为安装在非标准位置的包启用 IntelliSense,请将这些位置添加到文件python.analysis.extraPaths中的集合中settings.json(默认集合为空)。例如,您可能已将 Google App Engine 安装在自定义位置(app.yaml如果您使用 Flask,则在指定的位置)。在这种情况下,您可以按如下方式指定这些位置:

视窗:

"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中了解更多信息。

通过人工智能提高完成率

GitHub Copilot是一款基于 AI 的代码完成工具,可帮助您更快、更智能地编写代码。您可以使用VS Code 中的GitHub Copilot 扩展来生成代码,或从它生成的代码中学习。

VS Code Marketplace 中的 GitHub Copilot 扩展

GitHub Copilot 提供了针对多种语言和各种框架的建议,尤其适用于 Python、JavaScript、TypeScript、Ruby、Go、C# 和 C++。

您可以在Copilot 文档中了解有关如何开始使用 Copilot 的更多信息。

导航

编辑时,您可以右键单击不同的标识符以利用几个方便的命令

  • 转到定义( F12 ) 从代码跳转到定义对象的代码。当您使用库时,此命令非常有用。

  • Peek Definition ( ⌥F12 (Windows Alt+F12 , Linux Ctrl+Shift+F10 ) ) 类似,但直接在编辑器中显示定义(在编辑器窗口中留出空间以避免遮挡任何代码)。按Esc 键关闭“查看”窗口或使用右上角的x 。

  • 转到声明跳转到在代码中声明变量或其他对象的位置。

  • Peek声明类似,但直接在编辑器中显示声明。再次使用Escape或右上角的x关闭 Peek 窗口。

快速修复

使用 Pylance 时添加导入快速修复可以让您快速完成导入语句。首先,首先在编辑器中输入包名称。您会注意到代码操作可用于自动完成源代码行(只要您在环境中安装了该模块)。将鼠标悬停在文本(标有波浪线)上,然后在代码操作灯泡出现时选择它。然后,您可以从潜在导入列表中进行选择。 添加导入

此代码操作还识别以下常见 Python 包的一些流行缩写:numpyas np、tensorflowas tf、pandasas pd、matplotlib.pyplotas plt、matplotlibas mpl、mathas m、scipi.ioas spio、scipyas sp、panelas pn 和holoviewsas hv。

常见包缩写

导入建议列表按照顶部的包(或模块)的导入语句进行排序。它还将包括来自指定包的更多模块和/或成员(类、对象等)的语句。

就像自动导入一样,默认情况下仅建议顶级符号。您可以通过python.analysis.packageIndexDepths设置自定义此行为。

重构

Python 扩展添加了以下重构功能:Extract VariableExtract MethodRename Module。它还支持实现其他重构功能的扩展,例如排序导入

提取变量

提取当前范围内所选文本的所有相似出现,并将其替换为新变量。

您可以通过选择要提取为变量的代码行来调用此命令。然后选择旁边显示的灯泡。

重构变量

提取方法

提取当前范围内所选表达式或块的所有相似出现,并将其替换为方法调用。

您可以通过选择要提取为方法的代码行来调用此命令。然后选择旁边显示的灯泡。

将代码重构为方法

重命名模块

Python 文件/模块重命名后,Pylance 可以找到可能需要更新的所有实例,并为您提供所有更改的预览。

要自定义需要更新哪些引用,您可以在Refactor Preview中的行或文件级别切换复选框。做出选择后,您可以选择Apply RefactoringDiscard Refactoring

重命名模块

排序进口

Python 扩展支持isortRuff等实现排序导入功能的扩展。此命令将来自同一模块的特定导入合并到单个import语句中,并按import字母顺序组织语句。

您可以通过安装支持排序导入的扩展来调用此功能,然后打开命令面板(⇧⌘P(Windows、Linux Ctrl+Shift+P)并运行组织导入

提示:您可以为命令指定键盘快捷键editor.action.organizeImports

对导入语句进行排序

故障排除

如需有关常见 IntelliSense 和 Python 编辑问题的帮助,请查看下表:

问题 原因 解决方案
Pylance is only offering top-level symbol options when adding imports. 默认情况下,仅对顶级模块建立索引(深度=1)。
例如,您可能会将其视为import matplotlib建议,但import matplotlib.pyplot默认情况下不会。
尝试增加 Pylance 通过python.analysis.packageIndexDepths. 检查代码分析设置
Pylance is not automatically adding missing imports 自动导入完成设置可能被禁用。 检查启用自动导入部分
Auto imports are enabled but Pylance is not automatically importing symbols defined in other files in the workspace. 用户定义的符号(不是来自已安装的包或库的符号)仅在已在编辑器中打开的文件中使用时才会自动导入。
否则,它们只能通过添加导入快速修复来使用。
使用添加导入快速修复,或确保首先打开工作区中的相关文件。
Pylance seems slow or is consuming too much memory when working on a large workspace. Pylance 分析是对给定工作区中存在的所有文件进行的。 如果您知道可以从 Pylance 的分析中排除某些子文件夹,则可以将其路径添加到设置中python.analysis.exclude。或者,您可以尝试设置python.analysis.indexingfalse禁用 Pylance 的索引器(注意:这也会影响完成和自动导入的体验。了解有关代码分析设置中索引的更多信息)。
You are unable to install a custom module into your Python project. 自定义模块位于非标准位置(未使用 pip 安装)。 将位置添加到python.autoComplete.extraPaths设置中并重新启动 VS Code。

皮兰斯诊断

Pylance 默认情况下在“问题”面板中提供 Python 文件的诊断。

下面的列表是 Pylance 提供的一些最常见的诊断以及如何修复它们。

导入解决源失败

当 Pylance 能够找到导入包的类型存根,但无法找到包本身时,会发生此错误。当您尝试导入的包未安装在所选的 Python 环境中时,可能会发生这种情况。

如何修复它

  • 如果该软件包已安装在不同的解释器或内核中,请选择正确的解释器
  • 如果未安装该软件包,您可以通过在激活的终端中运行以下命令来安装它:python -m pip install {package_name}

导入解决失败

当 Pylance 无法找到您正在导入的包或模块或其类型存根时,就会发生此错误。

如何修复它

  • 如果您要导入模块,请确保它存在于您的工作区或设置中包含的位置python.autoComplete.extraPaths
  • 如果您要导入未安装的软件包,可以通过在激活的终端中运行以下命令来安装它:python -m pip install {package_name}
  • 如果您要导入已安装在不同解释器或内核中的包,请选择正确的解释器
  • 如果您正在使用可编辑安装并且当前设置为使用导入挂钩,请考虑切换为使用.pth仅包含文件路径的文件,以增强兼容性并确保更流畅的导入行为。在Pyright 文档中了解更多信息。

检测到导入周期

当 Pylance 检测到两个或多个模块之间的循环依赖关系时,会发生此错误。

如何修复它

尝试重新排序导入语句以打破循环依赖。


Pylance 诊断的严重性可以通过python.analysis.diagnosticSeverityOverrides设置进行自定义。检查设置参考以获取更多信息。

下一步

  • Linting - 启用、配置和应用各种 Python linter。
  • 调试- 学习本地和远程调试 Python。
  • 测试- 配置测试环境并发现、运行和调试测试。
  • 基本编辑- 了解强大的 VS Code 编辑器。
  • 代码导航- 快速浏览源代码。
  • IntelliSense - 了解 IntelliSense 功能。
  • Jupyter 支持- 了解如何开始使用 Jupyter Notebooks。
  • Python 扩展模板- 创建扩展来集成您最喜欢的 Python 工具。