在 Visual Studio Code 中编辑 Python
Visual Studio Code 是一款功能强大的 Python 源代码编辑工具。该编辑器包含各种功能,可帮助您在编写代码时提高工作效率。有关在 Visual Studio Code 中进行编辑的详细信息,请参阅基本编辑和代码导航。
在本概述中,我们将描述Python 扩展提供的特定编辑功能,包括如何通过用户和工作区设置自定义这些功能的步骤。
自动完成和 IntelliSense
IntelliSense 是与代码完成相关的代码编辑功能的总称。花点时间看看下面的例子。键入print时,请注意 IntelliSense 如何填充自动完成选项。当用户开始输入名为greeting的变量时,还会向用户提供一个选项列表。
为当前工作文件夹中的所有文件提供自动完成和 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 扩展来生成代码,或从它生成的代码中学习。
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 包的一些流行缩写:numpy
as np、tensorflow
as tf、pandas
as pd、matplotlib.pyplot
as plt、matplotlib
as mpl、math
as m、scipi.io
as spio、scipy
as sp、panel
as pn 和holoviews
as hv。
导入建议列表按照顶部的包(或模块)的导入语句进行排序。它还将包括来自指定包的更多模块和/或成员(类、对象等)的语句。
就像自动导入一样,默认情况下仅建议顶级符号。您可以通过python.analysis.packageIndexDepths
设置自定义此行为。
重构
Python 扩展添加了以下重构功能:Extract Variable、Extract Method和Rename Module。它还支持实现其他重构功能的扩展,例如排序导入。
提取变量
提取当前范围内所选文本的所有相似出现,并将其替换为新变量。
您可以通过选择要提取为变量的代码行来调用此命令。然后选择旁边显示的灯泡。
提取方法
提取当前范围内所选表达式或块的所有相似出现,并将其替换为方法调用。
您可以通过选择要提取为方法的代码行来调用此命令。然后选择旁边显示的灯泡。
重命名模块
Python 文件/模块重命名后,Pylance 可以找到可能需要更新的所有实例,并为您提供所有更改的预览。
要自定义需要更新哪些引用,您可以在Refactor Preview中的行或文件级别切换复选框。做出选择后,您可以选择Apply Refactoring或Discard Refactoring。
排序进口
Python 扩展支持isort和Ruff等实现排序导入功能的扩展。此命令将来自同一模块的特定导入合并到单个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.indexing 为false 禁用 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 工具。