在 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 輔助功能,例如根據當前程式碼上下文推斷最相關的自動補全。有關更多資訊,請參閱 適用於 VS Code 的 IntelliCode FAQ。
自定義 IntelliSense 行為
預設情況下啟用完整的 IntelliSense 功能集可能會使您的開發體驗變慢,因此 Python 擴充套件啟用了一組最少的功能,讓您能夠保持高效,同時仍然獲得高效能的體驗。但是,您可以透過多個設定來根據自己的喜好自定義分析引擎的行為。
啟用自動匯入
Pylance 為工作區中的模組和環境中安裝的包提供自動匯入建議。當您在編輯器中鍵入時,可能會收到補全建議。當您接受建議時,自動匯入會自動將相應的匯入語句新增到您的檔案中。
您可以透過在設定中將 python.analysis.autoImportCompletions 設定為 true 來啟用自動匯入。預設情況下,自動匯入是停用的。

為自定義包位置啟用 IntelliSense
要為安裝在非標準位置的包啟用 IntelliSense,請將這些位置新增到 settings.json 檔案中的 python.analysis.extraPaths 集合(預設集合為空)。例如,您可能已將 Google App Engine 安裝在自定義位置,如果使用 Flask,則在 app.yaml 中指定。在這種情況下,您將按如下方式指定這些位置
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)),類似,但直接在編輯器中顯示定義(在編輯器視窗中留出空間以避免遮擋任何程式碼)。按 Escape 關閉預覽視窗,或使用右上角的 x。
-
轉到宣告 跳轉到程式碼中宣告變數或其他物件的位置。
-
預覽宣告 類似,但直接在編輯器中顯示宣告。同樣,使用 Escape 或右上角的 x 關閉預覽視窗。
快速修復
新增匯入
使用 Pylance 時,新增匯入的快速修復功能使您可以快速完成環境中已安裝模組的匯入語句。當您開始在編輯器中鍵入包名時,即可使用程式碼操作自動完成原始碼行。將滑鼠懸停在文字(用波浪線標記)上,然後選擇程式碼操作燈泡。然後,您可以從潛在匯入列表中進行選擇。

此程式碼操作還識別了一些流行的常用 Python 包的縮寫:numpy 為 np,tensorflow 為 tf,pandas 為 pd,matplotlib.pyplot 為 plt,matplotlib 為 mpl,math 為 m,scipy.io 為 spio,scipy 為 sp,panel 為 pn,holoviews 為 hv。

匯入建議列表顯示了 3 個置信度最高的匯入選項,優先順序基於:最近使用的匯入、同一模組中的符號、標準庫中的符號、使用者模組中的符號、第三方包中的符號,最後按模組和符號名稱排序。
搜尋其他匯入匹配項
預設情況下,新增匯入的快速修復功能僅顯示 3 個置信度最高的匯入選項。如果它們未列出您要查詢的內容,您可以使用 Pylance 的搜尋其他匯入匹配項快速修復功能來處理缺失的匯入錯誤。此快速修復功能會顯示一個快速選擇選單,使您可以搜尋與缺失匯入符號匹配的字首的匯入選項。

更改拼寫
當未解析的變數或缺失的匯入診斷很可能是由於拼寫錯誤引起的時,Pylance 會顯示更改拼寫快速修復。此程式碼操作根據在工作區中找到的最接近的匹配項建議符號的正確拼寫。

注意:對於使用者定義的符號,這些快速修復功能僅建議從定義它們的檔案中匯入。不支援從使用者符號是外部/匯入的檔案中進行匯入建議。
另請注意,對於來自已安裝包(通常位於 Python 環境的
site-packages資料夾下)的符號,這些快速修復功能僅建議那些在包的根資料夾(例如其__init__.py檔案)中定義的符號。您可以透過python.analysis.packageIndexDepths設定來自定義特定包的行為,但請注意,這可能會影響 Pylance 的效能。
重構
Python 擴充套件透過 Pylance 擴充套件添加了以下重構功能:提取變數、提取方法、重新命名模組、移動符號和實現所有繼承的抽象類。它還支援實現其他重構功能(如排序匯入)的擴充套件。
提取變數
將當前範圍內選定文字的所有類似出現提取出來,並將其替換為新變數。
您可以透過選擇要提取為變數的程式碼行來呼叫此命令。然後,選擇顯示在其旁邊的燈泡。

提取方法
將當前範圍內選定表示式或塊的所有類似出現提取出來,並將其替換為方法呼叫。
您可以透過選擇要提取為方法的程式碼行來呼叫此命令。然後,選擇顯示在其旁邊的燈泡。

重新命名模組
重新命名 Python 檔案/模組後,Pylance 可以查詢所有可能需要更新的例項,併為您提供所有更改的預覽。
要自定義需要更新的引用,您可以切換重構預覽中的行級別或檔案級別的複選框。一旦您做出選擇,就可以選擇應用重構或放棄重構。

移動符號
Pylance 擴充套件提供了兩個程式碼操作來簡化將符號移動到不同檔案的過程
- 移動符號到...:顯示檔案選擇器,用於選擇要移動符號的目標檔案。
- 移動符號到新檔案:建立一個與原始檔(呼叫程式碼操作的位置)位於同一目錄下的,以符號命名的檔案。
您可以透過將滑鼠懸停在要移動的符號上,然後選擇所需操作旁出現的燈泡來訪問這些程式碼操作。或者,您可以右鍵單擊符號並從上下文選單中選擇重構...。

實現所有繼承的抽象類
在 Python 中,抽象類充當其他類的“藍圖”,透過促進清晰的結構和子類應遵循的要求,幫助構建模組化、可重用的程式碼。要定義 Python 中的抽象類,您可以建立一個繼承自 abc 模組中的 ABC 類的類,並使用 @abstractmethod 裝飾器註解其方法。然後,您可以建立繼承自此抽象類的新類,併為基類方法定義實現。
Pylance 提供了一個程式碼操作來簡化建立這些類的過程。當您定義一個繼承自抽象類的新類時,現在可以使用實現所有繼承的抽象類程式碼操作來自動實現父類中的所有抽象方法和屬性。

排序匯入
Python 擴充套件支援 isort 和 Ruff 等實現排序匯入功能的擴充套件。此命令將來自同一模組的特定匯入合併到一個 import 語句中,並按字母順序組織 import 語句。
您可以透過安裝支援匯入排序的擴充套件,然後開啟命令面板(⇧⌘P (Windows, Linux Ctrl+Shift+P))並執行組織匯入來呼叫此功能。
提示:您可以為
editor.action.organizeImports命令分配鍵盤快捷鍵。

故障排除
有關常見 IntelliSense 和 Python 編輯問題的幫助,請查看下錶
| 問題 | 原因 | 解決方案 |
|---|---|---|
| Pylance 在新增匯入時僅提供頂級符號選項。 | 預設情況下,僅索引頂級模組(深度=1)。 例如,預設情況下您可能會看到 import matplotlib 的建議,但看不到 import matplotlib.pyplot。 |
嘗試透過 python.analysis.packageIndexDepths 增加 Pylance 可以索引已安裝庫的深度。請檢視 程式碼分析設定。 |
| Pylance 未自動新增缺失的匯入 | 自動匯入補全設定可能已停用。 | 請檢視 啟用自動匯入部分。 |
| 自動匯入已啟用,但 Pylance 未自動匯入工作區中其他檔案中定義的符號。 | 使用者定義的符號(非來自已安裝包或庫的符號)僅在它們已在編輯器中開啟的檔案中使用過時才會被自動匯入。 否則,它們只能透過新增匯入快速修復獲得。 |
使用新增匯入快速修復,或確保首先開啟工作區中的相關檔案。 |
| Pylance 在處理大型工作區時似乎很慢或消耗過多記憶體。 | Pylance 分析針對給定工作區中的所有檔案進行。 | 如果存在您知道可以從 Pylance 的分析中排除的子資料夾,您可以將其路徑新增到 python.analysis.exclude 設定。或者,您可以嘗試將 python.analysis.indexing 設定為 false 以停用 Pylance 的索引器(注意:這也會影響補全和自動匯入的體驗。有關索引的更多資訊,請參閱 程式碼分析設定)。 |
| 您無法將自定義模組安裝到 Python 專案中。 | 自定義模組位於非標準位置(未透過 pip 安裝)。 | 將位置新增到 python.autoComplete.extraPaths 設定並重新啟動 VS Code。 |
Pylance 診斷
Pylance 預設會在“問題”面板中提供 Python 檔案的診斷。
以下列表是 Pylance 提供的一些最常見診斷以及如何修復它們。
importResolveSourceFailure
當 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 Notebook。
- Python 擴充套件模板 - 建立擴充套件以整合您喜歡的 Python 工具。
