VS Code中Python编写的效率提升技巧
Visual Studio Code 是一款功能强大的 Python 源代码编辑工具。该编辑器包含各种功能,可帮助您提高代码编写效率。
在此概述中,我们将描述Python 扩展提供的具体编辑功能,包括如何通过用户和工作区设置自定义这些功能的步骤。
1. 自动完成和 IntelliSense
IntelliSense 是与代码完成相关的代码编辑功能的统称。花点时间看看下面的例子。输入print时,请注意 IntelliSense 如何填充自动完成选项。当用户开始输入名为Greeting的变量时,还会给出一个选项列表。
当前工作文件夹中的所有文件均提供自动完成和 IntelliSense。它们也适用于安装在标准位置的 Python 包。
Pylance是 VS Code 中 Python 的默认语言服务器,与 Python 扩展一起安装以提供 IntelliSense 功能。
Pylance 基于微软的Pyright静态类型检查工具,利用类型存根(.pyi
文件)和惰性类型推理来提供高性能的开发体验。
有关 IntelliSense 的更多信息,请参阅IntelliSense。
提示:查看VS Code 的 IntelliCode 扩展。IntelliCode 为 Python 中的 IntelliSense 提供了一组 AI 辅助功能,例如根据当前代码上下文推断最相关的自动完成。有关更多信息,请参阅VS Code 的 IntelliCode 常见问题解答。
1.1 自定义 IntelliSense 行为
默认启用全套 IntelliSense 功能可能会让您的开发体验变慢,因此 Python 扩展启用了一组最低限度的功能,让您在保持高性能的同时提高工作效率。不过,您可以通过多种设置根据自己的喜好自定义分析引擎的行为。
1.2 启用自动导入
Pylance 会针对工作区中的模块以及环境中安装的软件包提供自动导入建议。在编辑器中输入内容时,您可能会收到补全建议。当您接受建议时,自动导入会自动将相应的导入语句添加到您的文件中。
您可以通过在设置中设置python.analysis.autoImportCompletions
来启用自动导入。默认情况下,自动导入是禁用的。true
1.3 为自定义包位置启用 IntelliSense
要为安装在非标准位置的软件包启用 IntelliSense,请将这些位置添加到文件python.analysis.extraPaths
中的集合中settings.json
(默认集合为空)。例如,app.yaml
如果您使用 Flask,您可能将 Google App Engine 安装在自定义位置(在 中指定)。在这种情况下,您可以按如下方式指定这些位置:
视窗:
"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中了解更多信息。
2. 利用人工智能提高完井率
GitHub Copilot是一款 AI 驱动的代码补全工具,可帮助您更快、更智能地编写代码。您可以在 VS Code 中使用GitHub Copilot 扩展来生成代码,或者从它生成的代码中学习。
GitHub Copilot 为众多语言和各种框架提供了建议,尤其适用于 Python、JavaScript、TypeScript、Ruby、Go、C# 和 C++。
3. 导航
在编辑时,您可以右键单击不同的标识符以利用几个方便的命令
转到定义( F12 ) 从代码跳转到定义对象的代码。使用库时,此命令很有用。
Peek Definition(Alt+F12)类似,但直接在编辑器中显示定义(在编辑器窗口中留出空间以避免遮挡任何代码)。按Esc关闭 Peek 窗口或使用右上角的x 。
转到声明跳转到代码中声明变量或其他对象的位置。
Peek 声明类似,但直接在编辑器中显示声明。同样,使用Esc或右上角的x关闭 Peek 窗口。
4. 快速修复
4.1 添加导入
使用 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。
导入建议列表显示前 3 个高置信度导入选项,优先顺序基于:最近使用的导入、来自同一模块的符号、来自标准库的符号、来自用户模块的符号、来自第三方包的符号,最后按模块和符号名称排序。
4.2 搜索其他导入匹配项
默认情况下,添加导入快速修复仅显示 3 个高置信度导入选项。如果它们没有列出您要查找的内容,您可以使用 Pylance搜索其他导入匹配快速修复来查找缺失的导入错误。此快速修复显示一个快速选择菜单,可让您搜索与缺失导入符号前缀匹配的导入选项。
4.3 更改拼写
当未解析的变量或缺失的导入诊断可能是由拼写错误导致时,Pylance 会显示“更改拼写”快速修复。此代码操作会根据在工作区中找到的最接近的匹配项,建议符号的正确拼写。
注意:对于用户符号,这些快速修复将仅建议从定义它们的文件中导入。不支持从用户符号为外部/导入的文件导入建议。
另请注意,对于来自已安装软件包(通常位于
site-packages
Python 环境文件夹下)的符号,__init__.py
这些快速修复仅建议使用软件包根文件夹(例如其文件中)中定义的符号。您可以通过设置针对特定软件包自定义此行为python.analysis.packageIndexDepths
,但请注意,这可能会影响 Pylance 的性能。
5. 重构
Python 扩展通过 Pylance 扩展添加了以下重构功能:提取变量、提取方法、重命名模块、移动符号和实现所有继承的抽象类。它还支持实现其他重构功能的扩展,例如对导入进行排序。
5.1 提取变量
提取当前范围内所选文本的所有类似出现,并将其替换为新变量。
您可以通过选择要提取为变量的代码行来调用此命令。然后选择旁边显示的灯泡。
5.2 提取方法
提取当前范围内所选表达式或块的所有类似出现,并将其替换为方法调用。
您可以通过选择要提取为方法的代码行来调用此命令。然后选择旁边显示的灯泡。
5.3 重命名模块
重命名 Python 文件/模块后,Pylance 可以找到所有可能需要更新的实例并为您提供所有更改的预览。
要自定义需要更新的引用,您可以在重构预览中从行或文件级别切换复选框。做出选择后,您可以选择应用重构或放弃重构。
5.4 移动符号
Pylance 扩展提供了两个代码操作来简化将符号移动到不同文件的过程:
您可以通过将鼠标悬停在要移动的符号上,然后选择所需操作旁边的灯泡来访问这些代码操作。或者,您可以右键单击符号并从上下文菜单中选择重构…。
5.5 实现所有继承的抽象类
在 Python 中,抽象类充当其他类的“蓝图”,通过促进清晰的结构和子类需要遵守的要求,帮助构建模块化、可重用的代码。要在 Python 中定义抽象类,您可以创建一个从模块ABC
中的类继承的类abc
,并使用@abstractmethod
装饰器注释其方法。然后,您可以创建从此抽象类继承的新类,并为基本方法定义实现。
Pylance 提供了一个代码操作来简化创建这些类的过程。当您定义一个从抽象类继承的新类时,您现在可以使用实现所有继承的抽象类代码操作来自动实现来自父类的所有抽象方法和属性:
5.6排序导入
Python 扩展支持isort和Ruff等实现排序导入功能的扩展。此命令将来自同一模块的特定导入合并为单个import
语句,并按import
字母顺序组织语句。
您可以通过安装支持排序导入的扩展来调用它,然后打开命令面板(Ctrl+Shift+P)并运行组织导入。
提示:您可以为该
editor.action.organizeImports
命令分配键盘快捷键。
6. 故障排除
有关常见 IntelliSense 和 Python 编辑问题的帮助,请查看下表:
问题 | 原因 | 解决方案 |
---|---|---|
Pylance 仅在添加导入时提供顶级符号选项。 | 默认情况下,仅索引顶级模块(深度=1)。 例如,您可能会看到 import matplotlib 建议,但import matplotlib.pyplot 默认情况下并非如此。 |
尝试通过以下方式增加 Pylance 索引已安装库的深度python.analysis.packageIndexDepths 。检查代码分析设置。 |
Pylance 不会自动添加缺失的导入 | 自动导入完成设置可能被禁用。 | 检查启用自动导入部分。 |
自动导入已启用,但 Pylance 不会自动导入工作区中其他文件中定义的符号。 | 用户定义的符号(不是来自已安装的包或库的符号)只有在编辑器中打开的文件中已使用时才会自动导入。 否则,它们只能通过添加导入快速修复来使用。 |
使用添加导入快速修复,或确保首先在工作区中打开相关文件。 |
在大型工作区上工作时,Pylance 似乎很慢或消耗太多内存。 | Pylance 分析针对给定工作区中存在的所有文件进行。 | 如果您知道有子文件夹可以从 Pylance 的分析中排除,则可以将其路径添加到python.analysis.exclude 设置中。或者,您可以尝试设置python.analysis.indexing 为false 禁用 Pylance 的索引器(注意:这也会影响完成和自动导入的体验。了解有关代码分析设置中索引的更多信息)。 |
您无法将自定义模块安装到您的 Python 项目中。 | 自定义模块位于非标准位置(未使用 pip 安装)。 | 将位置添加到python.autoComplete.extraPaths 设置并重新启动 VS Code。 |
6.1 Pylance 诊断
Pylance 默认在“问题”面板中提供对 Python 文件的诊断。
以下列表是 Pylance 提供的一些最常见的诊断以及如何修复它们。
6.1.1 导入解决源失败
当 Pylance 能够找到导入包的类型存根,但找不到包本身时,就会发生此错误。当您尝试导入的包未安装在所选 Python 环境中时,就会发生这种情况。
如何修复
python -m pip install {package_name}
。6.1.2 导入失败解决
当 Pylance 无法找到您要导入的包或模块及其类型存根时,就会发生此错误。
如何修复
python.autoComplete.extraPaths
。python -m pip install {package_name}
。.pth
仅包含文件路径的文件,以增强兼容性并确保更顺畅的导入行为。 了解更多信息,请参阅Pyright 文档。6.1.3 进口循环检测
当 Pylance 检测到两个或多个模块之间的循环依赖时,就会发生此错误。
如何修复
尝试重新排序导入语句以打破循环依赖。
作者:码踏云端