VSCode Pylance 延伸模組的使用和設定說明

閱讀 38:51·字數 11656·發佈 
Youtube 頻道
訂閱 133

VSCode Pylance 延伸模組

VSCode 中的Pylance延伸模組,為 Python 語言開發提供了強大的支援,比如,程式碼的智能提示,自動完成,診斷和分析。在一般情況下,該延伸模組會跟隨 VSCode 的Python延伸模組一同安裝,並將成為Python延伸模組認定的 Python 語言伺服器。

VSCode Pylance 延伸模組何時被激活?

如果Pylance延伸模組沒有被停用,那麽當 VSCode 開啟任何被解析為 Python 語言的程式碼檔案(比如,常見的py檔案),或者 VSCode 在啟動過程中檢測到工作區根目錄存在檔案pyrightconfig.json時,Pylance延伸模組將被激活。

VSCode Pylance 延伸模組僅診斷文字格式的 Python 程式碼檔案

Pylance延伸模組僅診斷文字格式的 Python 程式碼檔案是否存在問題,對於編譯後的位元組碼檔案,其他二進位格式的 Python 檔案,以及zip格式的壓縮檔案中的檔案,Pylance不會或無法進行診斷。

VSCode Pylance 延伸模組僅分析文字格式的 Python 程式碼檔案

如果程式碼中使用的 Python 模組沒有對應的型別虛設常式檔案,那麽Pylance延伸模組將嘗試分析該模組對應的文字格式的程式碼檔案(包括存在於zip壓縮檔案中的),以在 VSCode 中實作程式碼的智能提示和自動完成,對於編譯後的位元組碼檔案,其他二進位格式的 Python 檔案,Pylance不會或無法進行分析。

分析和診斷這兩個概念,也許會產生一些困惑,我們需要將診斷視為分析的一部分,分析的過程中可能會進行診斷,也可能不會。

什麽是 Python 型別虛設常式檔案?

Python 型別虛設常式檔案,其副檔名為pyi,與py程式碼檔案類似,可以包含 Python 程式碼,不同的是,型別虛設常式檔案一般僅保留與定義有關的關鍵程式碼,其余部分使用來代替(比如,函式或方法的主體程式碼),以盡量縮小檔案的體積。

Python 型別虛設常式檔案可被Pylance延伸模組用於程式碼的智能提示,自動完成,診斷等操作,通常針對已經安裝的 Python 第三方套件或模組。如果需要分析的 Python 模組存在對應的pyi型別虛設常式檔案,那麽模組對應的py或其他形式的檔案將被忽略。存放 Python 型別虛設常式檔案的目錄的目錄結構,應該與被匯入模組或套件所在的 Python 模組搜尋路徑中的目錄的目錄結構保持一致。

設定 VSCode

關於如何指定預設的 Python 語言伺服器,你可以檢視安裝 VSCode 延伸模組 Pylance一段。

設定 VSCode Pylance 延伸模組

和大部分的 VSCode 延伸模組一樣,Pylance為開發人員提供了設定項,你可以通過編輯工作區.vscode資料夾中的setting.json檔案,或在 VSCode 的設定面板中編輯相關項,來調整和改變Pylance延伸模組所實作的某些功能。

設定 VSCode Pylance 延伸模組的 Python 型別檢查功能

Pylance延伸模組的設定項python.analysis.typeCheckingMode,可用於設定Pylance的 Python 型別檢查模式(Type Checking Mode),不同的型別檢查模式對應了不同的 Python 型別檢查規則集(Rule Set),從松散到嚴格,型別檢查模式分為以下幾種。

off 模式

off模式是python.analysis.typeCheckingMode設定項的預設值,他表示不對 Python 程式碼進行型別檢查,僅診斷無效的語法,未定義而被讀取的內容(變數,函式等),以及未能被解析的匯入(比如,匯入了無法存取的 Python 模組或套件,或匯入了不存在的內容)。

basic 模式

basic模式包含off模式中的所有規則,以及基礎的 Python 型別檢查規則,比如,不應該存取未知的類別特性,呼叫方法或函式時應該給出全部的必要參數。

standard 模式

standard模式包含off模式中的所有規則,以及基礎和標準的 Python 型別檢查規則,因此他相對於basic模式更為嚴格。

strict 模式

strict模式是最嚴格的型別檢查模式,包含off模式中的所有規則,以及所有 Python 型別檢查規則,比如,回報無法推斷出其型別的變數或參數。

settings.json
{
	// 最嚴格的模式 strict
	"python.analysis.typeCheckingMode": "strict",
}

延伸模組 Pylance 的型別檢查不會阻止 VSCode 執行 Python 程式碼

雖然Pylance延伸模組的型別檢查功能,可以檢測程式碼中存在的各種問題,並將其顯示在 VSCode 的問題面板中,但Pylance並不會阻止 Python 程式碼的執行或偵錯。

如何自訂 Python 型別檢查規則的嚴重性層級?

每一個 Python 型別檢查規則都擁有自己的嚴重性層級,VSCode 和Pylance可以根據這些嚴重性層級來執行不同的操作。Pylance延伸模組的設定項python.analysis.diagnosticSeverityOverrides是一個包含一系列屬性的物件(預設值為{}),可用於自訂 Python 型別檢查規則的嚴重性層級,其中屬性的名稱為型別檢查規則的名稱,屬性的值為以下幾種之一,error(錯誤,紅色波形曲線,等同於布林值true),warning(警告,黃色波形曲線),information(資訊,藍色波形曲線),none(停用規則,等同於布林值false)。

關於 Python 型別檢查的所有規則的詳細資訊(英文),可以在 GitHub 檢視。

pyright/docs/configuration.md at main · microsoft/pyright

settings.json
{
	// 自訂 Python 型別檢查規則的嚴重性層級
	"python.analysis.diagnosticSeverityOverrides": {
		// 無法被解析的匯入
		"reportMissingImports": "warning"
	},
}

設定需要被 VSCode Pylance 延伸模組診斷的 Python 檔案

Pylance延伸模組的設定項python.analysis.diagnosticMode(診斷模式),可用於設定Pylance在什麽範圍內診斷 Python 程式碼檔案,診斷後得到的問題將顯示在 VSCode 的問題面板中,該設定項的有效值為以下兩種。

openFilesOnly 模式

openFilesOnly模式是python.analysis.diagnosticMode設定項的預設值,他表示Pylance僅診斷已在 VSCode 中開啟的 Python 程式碼檔案。

workspace 模式

workspace模式表示Pylance將診斷 VSCode 工作區中的所有 Python 程式碼檔案,以及 VSCode 開啟的 Python 程式碼檔案。

settings.json
{
	// 診斷工作區所有以及開啟的 Python 程式碼檔案
	"python.analysis.diagnosticMode": "workspace",
}

延伸模組 Pylance 激活後才會診斷 VSCode 工作區中的所有 Python 程式碼檔案

需要說明的是,將python.analysis.diagnosticMode設定為workspace模式,並不會改變Pylance延伸模組的激活方式,你可能需要主動開啟一個py檔案,以啟動診斷所有 Python 程式碼檔案的任務。

如何設定需要被 VSCode Pylance 延伸模組診斷的檔案?

Pylance延伸模組的設定項python.analysis.include是一個包含路徑資訊的陣列(其預設值為[]),當設定項python.analysis.diagnosticMode的值為workspace時,只有路徑開始部分符合該陣列任一項的 Python 程式碼檔案才會被Pylance進行診斷(當然,VSCode 直接開啟的檔案也會被診斷),這表示如果python.analysis.include給出了一個資料夾的路徑,那麽該資料夾及其所有子資料夾中的 Python 程式碼檔案都將被Pylance診斷。

如果python.analysis.include沒有給出任何路徑,比如預設值[],那麽Pylance將診斷 VSCode 工作區根目錄及其所有子目錄中的 Python 程式碼檔案。

延伸模組 Pylance 的 python.analysis.include 設定項可包含相對路徑或絕對路徑

如果你在Pylance設定項python.analysis.include中使用相對路徑,那麽該相對路徑會從 VSCode 的工作區根目錄開始計算,比如,src\.\src\(Windows)均表示工作區的src資料夾。除了相對路徑,在python.analysis.include中使用絕對路徑也是可行的,無論這些路徑是否包含在 VSCode 的目前工作區中,是的,Pylance可以診斷工作區之外的 Python 程式碼檔案。

延伸模組 Pylance 的 python.analysis.include 設定項可包含路徑萬用字元

Pylance設定項python.analysis.include可以包含一些路徑萬用字元(Wildcard Character),比如,?表示檔案或資料夾名稱中的單個字元,*表示檔案或資料夾名稱中的零個或多個字元,**表示零個或多個資料夾組合的任意路徑。

下面的設定項python.analysis.include,包含了一組 Windows 中的路徑。

settings.json
{
	// 需要被診斷的檔案的路徑資訊
	"python.analysis.include": [
		// 以 s 和 c 開頭的三個字元的資料夾
		"s?c\\",
		// src 資料夾的一級子資料夾
		"src\\*\\",
		// src 資料夾或其任意子資料夾中,以 s.py 結尾的檔案或資料夾
		"src\\**\\*s.py"
	],
}

如何設定需要被 VSCode Pylance 延伸模組排除診斷的檔案?

Pylance延伸模組的設定項python.analysis.exclude是一個包含路徑資訊的陣列(其預設值為[]),當設定項python.analysis.diagnosticMode的值為workspace時,路徑開始部分符合該陣列任一項的 Python 程式碼檔案不會被Pylance診斷(不包括 VSCode 直接開啟的檔案),即使他符合python.analysis.include設定項中的路徑資訊。

如果python.analysis.exclude沒有給出任何路徑,比如預設值[],那麽Pylance將排除 VSCode 工作區中所有名稱為node_modules__pycache__.git的資料夾(也可以指檔案)中的所有 Python 程式碼檔案。

python.analysis.exclude設定項可以使用相對路徑,絕對路徑以及路徑萬用字元,這一點與python.analysis.include類似。

被 python.analysis.exclude 設定項排除的 Python 程式碼檔案依然可能被 Pylance 診斷

如果一個 Python 程式碼檔案被python.analysis.exclude設定項排除,那麽他依然可能被Pylance診斷,當該檔案在 VSCode 中開啟,或被其他可被診斷的 Python 程式碼檔案匯入或參考時。需要指出,該功能的具體執行效果需要視具體情況而定。

下面的設定項python.analysis.exclude,包含了一個 Windows 路徑。

settings.json
{
	// 不需要診斷的檔案的路徑資訊
	"python.analysis.exclude": [
		// src 資料夾或其任意子資料夾中,以 test.py 結尾的檔案或資料夾
		"src\\**\\*test.py"
	],
}

設定忽略 VSCode Pylance 延伸模組診斷結果的 Python 檔案

Pylance延伸模組的設定項python.analysis.ignore是一個包含路徑資訊的陣列(其預設值為[]),如果某個 Python 程式碼檔案路徑的開始部分符合該陣列的某一項,那麽Pylance關於該檔案的診斷結果(包括錯誤和警告)將被忽略(不予展示)。

python.analysis.include設定項類似,python.analysis.ignore也可以使用相對路徑,絕對路徑以及路徑萬用字元。

下面的設定項python.analysis.ignore,包含了一個 Windows 路徑。

settings.json
{
	// 忽略診斷結果的檔案的路徑資訊
	"python.analysis.ignore": [
		// src 資料夾中名稱包含 test 的一級子資料夾
		"src\\*test*\\"
	],
}

設定 VSCode Pylance 延伸模組的 Python 型別虛設常式檔案目錄

Pylance延伸模組的設定項python.analysis.stubPath,可用於指定 Python 型別虛設常式(Type Stub)檔案所在的目錄,與python.analysis.include類似,你可以采用相對路徑或絕對路徑。python.analysis.stubPath的預設值為typings,即 VSCode 工作區根目錄下的typings資料夾。

VSCode Pylance 延伸模組使用 Python 型別虛設常式檔案帶來的問題

由於除了python.analysis.stubPath設定項指定的型別虛設常式檔案目錄,Pylance延伸模組自身也對型別虛設常式檔案進行管理,因此一些奇怪的現象可能會出現。比如,在 VSCode 中編寫程式碼匯入某個 Python 模組並使用該模組的函式或變數時,Pylance可以提供智能提示和自動完成,但執行 Python 程式碼卻顯示模組未找到ModuleNotFoundError。導致這種現象的原因可能是,Pylance正在使用 Python 模組對應的型別虛設常式檔案,模組本身的程式碼檔案並不存在,或者 Python 模組搜尋路徑設定不正確,使得模組無法被定位。當然,在這種情況下,Pylance會提示此模組無法從源(Source)匯入。

模組搜尋路徑

想要深入了解 Python 模組搜尋路徑,你可以檢視Python 指南Python 模組搜尋路徑介紹,Python 模組搜尋路徑中的目錄有哪些一節。

settings.json
{
	// 指定型別虛設常式檔案目錄為工作區的 my_typings 資料夾
	"python.analysis.stubPath": "my_typings",
}

Pylance延伸模組的設定項python.analysis.useLibraryCodeForTypes是一個布林值,可用於指定當需要分析的 Python 模組沒有對應的型別虛設常式檔案時,是否分析該模組對應的 Python 程式碼檔案,預設為true,分析對應的程式碼檔案。

VSCode Pylance 延伸模組將分析擁有 py.typed 檔案的 Python 套件

如果一個 Python 常規套件(非命名空間套件)沒有型別虛設常式檔案,但其對應的資料夾包含檔案py.typed,那麽Pylance延伸模組將分析該 Python 套件以及該套件的所有常規子套件(非命名空間套件)和子模組,即使python.analysis.useLibraryCodeForTypes被設定為false

套件

想要了解 Python 常規套件和命名空間套件,你可以檢視Python 指南Python 套件,常規套件,命名空間套件介紹一節。

settings.json
{
	// 不分析模組對應的程式碼檔案,當型別虛設常式檔案不存在時
	"python.analysis.useLibraryCodeForTypes": false,
}

設定 VSCode Pylance 延伸模組的額外 Python 模組路徑

Pylance延伸模組的設定項python.analysis.extraPaths是一個包含額外模組路徑資訊的陣列(其預設值為[]),Pylance可嘗試在這些路徑中尋找並分析 Python 模組對應的程式碼檔案,當他們被匯入時。需要指出,額外模組路徑不會影響 Python 自身的模組搜尋路徑。

在路徑設定方面,python.analysis.extraPathspython.analysis.include設定項類似,你可以使用相對路徑,絕對路徑以及路徑萬用字元。python.analysis.extraPaths中的路徑需要指向資料夾或zip壓縮檔案,指向其他可能會無效。

VSCode Pylance 延伸模組使用額外 Python 模組路徑帶來的問題

和使用 Python 型別虛設常式檔案類似,Pylance延伸模組使用額外 Python 模組路徑之後,可能導致診斷後沒有問題的程式碼,在執行階段提示模組未找到ModuleNotFoundError,原因之一是 Python 模組搜尋路徑無法定位額外模組路徑中的模組。

遇到這種情況,你可以調整 Python 模組搜尋路徑,使之包含額外模組路徑指向的目錄,或者修改匯入模組的陳述式。

settings.json
{
	// 設定額外的 Python 模組路徑
	"python.analysis.extraPaths": [
		// 在工作區根目錄的 extra.zip 中搜尋模組
		"extra.zip"
	],
}

Pylance延伸模組的設定項python.analysis.autoSearchPaths是一個布林值,可用於指定是否啟用 Python 模組自動搜尋路徑,將python.analysis.autoSearchPaths設定為true(預設值),Pylance可嘗試從一些預定義的路徑(比如,VSCode 工作區根目錄下的src資料夾)中尋找並分析 Python 模組對應的程式碼檔案,當他們被匯入時。

在效果方面,模組自動搜尋路徑與額外模組路徑是相似的,只不過python.analysis.autoSearchPaths中的路徑是預設的,而python.analysis.extraPaths中的路徑則由開發人員指定。模組自動搜尋路徑同樣不會影響 Python 自身的模組搜尋路徑,並可能在執行階段提示模組未找到ModuleNotFoundError

settings.json
{
	// 停用 Python 模組自動搜尋路徑
	"python.analysis.autoSearchPaths": false,
}

設定 VSCode Pylance 延伸模組的 Python 索引編製功能

Pylance延伸模組的設定項python.analysis.indexing,可用於控製是否對使用者檔案(VSCode 工作區中的 Python 程式碼檔案,其對應的模組應具備有效的完整名稱),Python 第三方套件或模組進行索引編製(預設為true,進行索引編製),有效的索引是Pylance實作自動匯入模組,新增匯入陳述式等功能的先決條件。

VSCode Pylance 延伸模組會為哪些 Python 第三方套件或模組編製索引?

除了直接位於 Python 第三方套件目錄中的模組,第三方套件目錄中的所有命名空間套件,以及命名空間套件中的所有子套件和子模組,Pylance延伸模組可以為任意第三方套件或模組編製索引,當然,是否能夠進行編製還將受到其他設定項的影響。

第三方套件

關於 Python 第三方套件的位置,你可以檢視Python 指南Python 第三方套件的位置一段。

settings.json
{
	// 停用 Python 索引編製功能
	"python.analysis.indexing": false,
}

Pylance延伸模組的設定項python.analysis.packageIndexDepths是一個包含索引編製方案的陣列,不同的 Python 套件可以擁有不同的索引編製方案。在預設情況下,Pylance僅為直接位於第三方套件目錄的 Python 套件(不包含模組,以及套件中的子套件或子模組)編製索引。

如果想為 Python 套件的子套件或子模組編製索引,那麽需要將對應方案的depth設定項設定為2(預設為1),name設定項設定為 Python 套件的名稱,如果想為子套件的子套件或子模組編製索引,則需要將depth設定為3,以此類推。如果希望為 Python 套件或模組的所有特性編製索引,則需要將對應方案的includeAllSymbols設定項設定為true,在一些情況下,includeAllSymbols並不能發揮其作用,Pylance會為所有特性編製索引。

Pylance延伸模組的設定項python.analysis.persistAllIndices是一個布林值,可用於設定是否將已經編製的 Python 第三方套件和模組的索引,作為json索引檔案儲存在Pylance延伸模組安裝目錄的dist資料夾的.cache子資料夾中,以便下一次使用,預設為true,儲存。如果將python.analysis.persistAllIndices設定為false,那麽json索引檔案不會被使用,即便他已經存在。

Pylance延伸模組的設定項python.analysis.userFileIndexingLimit,可用於設定進行索引編製的使用者檔案的最大數量,預設為2000,如果設定為-1,則表示不限製參與索引編製的使用者檔案的數量。由於索引編製可能會在短時間內進行大量的運算,因此,不建議將其設定為-1

VSCode Pylance 延伸模組為 Python 套件或模組編製的 json 索引檔案可能不會更新

Pylance延伸模組儲存的json索引檔案可能不會更新,無論是修改某個設定項,還是編輯 Python 套件和模組中的程式碼,除非索引的內容有所增加,或存在必須更新的理由。

你可以在 VSCode 命令面板執行命令pylance.indexing.clearPersistedIndices來清除所有的json索引檔案,或嘗試找到並刪除 Python 套件對應的json索引檔案,以重新進行索引編製。

VSCode Pylance 延伸模組始終為被開啟的 Python 程式碼檔案編製索引

被 VSCode 直接開啟的 Python 程式碼檔案(檔案對應的模組應具備有效的完整名稱)會被編製索引,無論設定項python.analysis.indexingpython.analysis.userFileIndexingLimit的值是什麽。

settings.json
{
	// 不對工作區中的 Python 程式碼檔案編製索引,除非是開啟的檔案
	"python.analysis.userFileIndexingLimit": 0,
	// 設定名稱為 just_test 的第三方套件的索引編製方案
	"python.analysis.packageIndexDepths": [
		{ "name": "just_test", "depth": 3, "includeAllSymbols": true }
	],
}

設定 VSCode Pylance 延伸模組的程式碼自動完成功能

Pylance延伸模組的設定項python.analysis.autoImportCompletions,可用於設定是否啟用 Python 匯入陳述式自動完成功能,該功能可自動書寫importfrom…import匯入 Python 模組,當你使用了模組特性且並未匯入相關模組時,預設為false,不進行匯入陳述式的自動完成。如果python.analysis.indexing設定項為false,那麽Pylance的匯入陳述式自動完成功能僅針對在 VSCode 中開啟過的 Python 程式碼檔案(檔案對應的模組應具備有效的完整名稱)。

Pylance延伸模組的設定項python.analysis.importFormat,可用於設定 Python 匯入陳述式自動完成的格式,其有效值包含以下兩種。

absolute 格式

absolute格式是python.analysis.importFormat設定項的預設值,他表示以完整名稱自動完成 Python 匯入陳述式。

relative 格式

relative格式表示盡可能以相對名稱的方式自動完成 Python 匯入陳述式,如果無法完成,則采用完整名稱。

Pylance延伸模組的設定項python.analysis.completeFunctionParens,可用於設定是否啟用 Python 函式或方法括弧的自動完成功能,該功能可在選擇呼叫的函式或方法後自動書寫括弧(),預設為false,不進行函式或方法括弧的自動完成。

Pylance延伸模組的設定項python.analysis.autoFormatStrings,可用於設定是否為 Python 字串自動完成首碼f,當你在字串中書寫{時(請註意,該功能在某些情況下達不到預期效果)。python.analysis.autoFormatStrings的預設值為false,不進行首碼f的自動完成。

settings.json
{
	// 啟用匯入陳述式的自動完成
	"python.analysis.autoImportCompletions": true,
	// 匯入陳述式的自動完成采用相對名稱
	"python.analysis.importFormat": "relative",
	// 啟用函式或方法的括弧自動完成
	"python.analysis.completeFunctionParens": true,
	// 啟用字串的 f 首碼自動完成(可能沒有效果)
	"python.analysis.autoFormatStrings": true,
}

設定 VSCode Pylance 延伸模組的程式碼內嵌提示功能

Pylance延伸模組的設定項python.analysis.inlayHints.variableTypes,可用於設定是否啟用變數型別的內嵌提示功能(預設為false,不啟用),該功能將內嵌變數型別的描述,當你沒有使用:指明變數的型別,並且變數型別需要一個清晰的描述時。比如,a=[1,2]會被內嵌描述,b=1c=set()則不會。

Pylance延伸模組的設定項python.analysis.inlayHints.functionReturnTypes,可用於設定是否啟用函式或方法傳回值的型別內嵌提示功能(預設為false,不啟用),該功能將內嵌函式或方法傳回值的型別描述,當你沒有使用->指明函式或方法傳回值的型別時。

Pylance延伸模組的設定項python.analysis.inlayHints.callArgumentNames,可用於設定是否啟用參數名稱的內嵌提示功能,該功能會嘗試為引數內嵌參數名稱,當該引數的名稱沒有被指明時,以幫助開發人員有效的識別引數的含義。python.analysis.inlayHints.callArgumentNames設定項的有效值包含以下幾種。

off

offpython.analysis.inlayHints.callArgumentNames設定項的預設值,他表示停用參數名稱的內嵌提示功能。

partial

partial表示,如果一個引數既是位置參數又是具名參數,則嘗試為其內嵌參數名稱。

all

all表示嘗試為所有引數內嵌參數名稱。

Pylance延伸模組的設定項python.analysis.inlayHints.pytestParameters,可用於設定是否啟用針對pytest函式或方法參數型別的內嵌提示功能(預設為false,不啟用),該功能會在 Python 的pytest套件能夠推斷出參數的型別,並且參數未使用:指明型別時,嘗試內嵌參數型別的描述。需要指出,使用python.analysis.inlayHints.pytestParameters設定項的先決條件是具備可用的pytest套件,並且python.analysis.enablePytestSupport設定項的值為true

Pylance延伸模組的設定項python.analysis.enablePytestSupport是一個布林值,可用於設定是否啟用對pytest套件的支援,預設為true,啟用。

函式

想要詳細了解 Python 函式,參數和傳回值,你可以檢視Python 函式,參數,傳回值介紹,以及 Python 函式的定義和呼叫一節。

settings.json
{
	// 啟用變數型別的內嵌提示
	"python.analysis.inlayHints.variableTypes": true,
	// 啟用函式或方法傳回值的型別內嵌提示
	"python.analysis.inlayHints.functionReturnTypes": true,
	// 啟用對所有參數的名稱內嵌提示
	"python.analysis.inlayHints.callArgumentNames": "all",
	// 啟用針對 pytest 函式或方法參數型別的內嵌提示
	"python.analysis.inlayHints.pytestParameters": true,
	// 停用對 pytest 的支援,這將導致對 pytestParameters 的設定無效
	"python.analysis.enablePytestSupport": false,
}

設定 VSCode Pylance 延伸模組的程式碼導航功能

Pylance延伸模組的設定項python.analysis.gotoDefinitionInStringLiteral,可用於設定是否啟用 Python 字串的模組導航功能(預設為true,啟用),該功能可為 Python 字串中被認為是模組的文字提供導航,比如"sys is here"中的sys,針對sys使用操作功能表或鍵盤快速鍵,可跳躍至模組sys相關的程式碼檔案或型別虛設常式檔案。

settings.json
{
	// 停用字串的模組導航功能
	"python.analysis.gotoDefinitionInStringLiteral": false,
}

設定 VSCode Pylance 延伸模組的記錄功能

Pylance延伸模組的設定項python.analysis.logLevel,可用於設定Pylance將哪些內容輸出為記錄,他擁有以下有效取值。

Error 層級

Error層級表示僅將錯誤輸出為記錄。

Warning 層級

Warning層級表示將錯誤和警告輸出為記錄。

Information 層級

Information層級是設定項python.analysis.logLevel的預設值,他表示將錯誤,警告和資訊輸出為記錄。

Trace 層級

Trace層級表示將錯誤,警告,資訊和追蹤輸出為記錄。

什麽是 VSCode Pylance 延伸模組的記錄?

顧名思義,Pylance記錄是由延伸模組Pylance在執行過程中輸出的內容,這些內容可以在 VSCode 輸出面板Python 語言伺服器一項中檢視。

settings.json
{
	// 設定 Pylance 僅匯報錯誤
	"python.analysis.logLevel": "Error",
}

設定 VSCode Pylance 延伸模組在修復命令中的行為

Pylance延伸模組的設定項python.analysis.fixAll是一個字串陣列(其預設值為[]),陣列中的每一個項對應一種行為,這些行為決定了Pylance延伸模組在Fix All命令被執行時的表現,以下是python.analysis.fixAll陣列的有效取值。

source.unusedImports 行為

source.unusedImports行為將移除已在 VSCode 開啟的 Python 程式碼檔案中的一些匯入陳述式,因為這些陳述式匯入的模組未被使用。

source.convertImportFormat 行為

source.convertImportFormat行為將根據設定項python.analysis.importFormat來轉換已在 VSCode 開啟的 Python 程式碼檔案中的匯入陳述式。

什麽是 VSCode 的 Fix All 命令?

Fix All命令用於嘗試修復所有的程式碼問題,可通過在 VSCode 命令面板輸入Fix All執行。

settings.json
{
	// 設定在執行 Fix All 命令時的行為
	"python.analysis.fixAll": [
		"source.unusedImports",
		"source.convertImportFormat"
	],
}

設定執行 VSCode Pylance 延伸模組的 Node.js 可執行檔案路徑

Pylance延伸模組的設定項python.analysis.nodeExecutable用於指示一個外部 Node.js 可執行檔案,Pylance將通過此外部 Node.js 執行,預設值為空字串。而一般情況下,Pylance使用 VSCode 自身的 Node.js,其記憶體會受到 VSCode 的限製,如果你希望獲得更多記憶體空間,那麽設定python.analysis.nodeExecutable設定項是可行的。

python.analysis.nodeExecutable設定項的取值不限於 Node.js 可執行檔案的路徑,他還可以是某個指向 Node.js 的別名,但無論如何,你應該確保該取值能夠在命令列中正確啟動 Node.js。

不支援在 VSCode 工作區設定中使用延伸模組 Pylance 的 python.analysis.nodeExecutable 設定項

Pylance延伸模組的python.analysis.nodeExecutable設定項,不支援在 VSCode 工作區設定中使用,即.vscode資料夾中的settings.json檔案。設定python.analysis.nodeExecutable設定項需要在 VSCode 使用者設定或遠端設定中進行。

settings.json
{
	// 指向外部 Node.js(無法在 VSCode 工作區設定中使用)
	"python.analysis.nodeExecutable": "node",
}

自訂 VSCode Pylance 延伸模組的 Python 語法醒目提示樣式

通過editor.semanticTokenColorCustomizations設定項,你可以針對 VSCode 的某個主題或所有主題,自訂Pylance延伸模組的 Python 語法醒目提示樣式,當然,主要是指色彩。以下是Pylance延伸模組所支援的,可用於自訂 Python 語法醒目提示樣式的具體語義類型(Semantic Token Type)和語義修飾詞(Semantic Token Modifier),在實際使用時,項的名稱應新增尾碼:python,以限製其僅對 Python 語言生效,並將所有的項放置在rules設定項中。

語義類型包括但不限於,classenumparametervariablepropertyenumMemberfunctionmembermoduleintrinsicmagicFunctionselfParameterclsParameter。語義修飾詞包括但不限於,declarationreadonlystaticabstractasynctypeHinttypeHintCommentdecoratorbuiltin

如何在 VSCode 中檢視 Python 程式碼所屬的語義類型和語義修飾詞?

如果你不清楚某個 Python 程式碼元素所屬的語義類型和語義修飾詞,那麽可以在 VSCode 命令面板中輸入命令Developer: Inspect Editor Tokens and Scopes來啟動範圍檢查器,然後點選需要檢視的程式碼元素,面板中將顯示其語義類型,語義修飾詞,以及其他相關資訊。

settings.json
{
	// 為所有主題自訂 Python 語法醒目提示
	"editor.semanticTokenColorCustomizations": {
		"rules": {
			// 指定類別的色彩
			"class:python": "#da9797",
			// 指定宣告的色彩,比如,類別和函式的定義
			"*.declaration:python": "#82cb7a"
		}
	}
}

程式碼

settings.json·codebeatme/python·GitHub