VSCode Pylance 延伸模組的使用和設定說明
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 型別檢查規則,比如,回報無法推斷出其型別的變數或參數。
{
// 最嚴格的模式 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 檢視。
{
// 自訂 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 程式碼檔案。
{
// 診斷工作區所有以及開啟的 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 中的路徑。
{
// 需要被診斷的檔案的路徑資訊
"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 路徑。
{
// 不需要診斷的檔案的路徑資訊
"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 路徑。
{
// 忽略診斷結果的檔案的路徑資訊
"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 模組搜尋路徑中的目錄有哪些一節。
{
// 指定型別虛設常式檔案目錄為工作區的 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 套件,常規套件,命名空間套件介紹一節。
{
// 不分析模組對應的程式碼檔案,當型別虛設常式檔案不存在時
"python.analysis.useLibraryCodeForTypes": false,
}
設定 VSCode Pylance 延伸模組的額外 Python 模組路徑
Pylance
延伸模組的設定項python.analysis.extraPaths
是一個包含額外模組路徑資訊的陣列(其預設值為[]
),Pylance
可嘗試在這些路徑中尋找並分析 Python 模組對應的程式碼檔案,當他們被匯入時。需要指出,額外模組路徑不會影響 Python 自身的模組搜尋路徑。
在路徑設定方面,python.analysis.extraPaths
與python.analysis.include
設定項類似,你可以使用相對路徑,絕對路徑以及路徑萬用字元。python.analysis.extraPaths
中的路徑需要指向資料夾或zip
壓縮檔案,指向其他可能會無效。
VSCode Pylance 延伸模組使用額外 Python 模組路徑帶來的問題
和使用 Python 型別虛設常式檔案類似,Pylance
延伸模組使用額外 Python 模組路徑之後,可能導致診斷後沒有問題的程式碼,在執行階段提示模組未找到ModuleNotFoundError
,原因之一是 Python 模組搜尋路徑無法定位額外模組路徑中的模組。
遇到這種情況,你可以調整 Python 模組搜尋路徑,使之包含額外模組路徑指向的目錄,或者修改匯入模組的陳述式。
{
// 設定額外的 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
。
{
// 停用 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 第三方套件的位置一段。
{
// 停用 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.indexing
和python.analysis.userFileIndexingLimit
的值是什麽。
{
// 不對工作區中的 Python 程式碼檔案編製索引,除非是開啟的檔案
"python.analysis.userFileIndexingLimit": 0,
// 設定名稱為 just_test 的第三方套件的索引編製方案
"python.analysis.packageIndexDepths": [
{ "name": "just_test", "depth": 3, "includeAllSymbols": true }
],
}
設定 VSCode Pylance 延伸模組的程式碼自動完成功能
Pylance
延伸模組的設定項python.analysis.autoImportCompletions
,可用於設定是否啟用 Python 匯入陳述式自動完成功能,該功能可自動書寫import
或from…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
的自動完成。
{
// 啟用匯入陳述式的自動完成
"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=1
或c=set()
則不會。
Pylance
延伸模組的設定項python.analysis.inlayHints.functionReturnTypes
,可用於設定是否啟用函式或方法傳回值的型別內嵌提示功能(預設為false
,不啟用),該功能將內嵌函式或方法傳回值的型別描述,當你沒有使用->
指明函式或方法傳回值的型別時。
Pylance
延伸模組的設定項python.analysis.inlayHints.callArgumentNames
,可用於設定是否啟用參數名稱的內嵌提示功能,該功能會嘗試為引數內嵌參數名稱,當該引數的名稱沒有被指明時,以幫助開發人員有效的識別引數的含義。python.analysis.inlayHints.callArgumentNames
設定項的有效值包含以下幾種。
- off
off
是python.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 函式的定義和呼叫一節。
{
// 啟用變數型別的內嵌提示
"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.logLevel
,可用於設定Pylance
將哪些內容輸出為記錄,他擁有以下有效取值。
- Error 層級
Error
層級表示僅將錯誤輸出為記錄。- Warning 層級
Warning
層級表示將錯誤和警告輸出為記錄。- Information 層級
Information
層級是設定項python.analysis.logLevel
的預設值,他表示將錯誤,警告和資訊輸出為記錄。- Trace 層級
Trace
層級表示將錯誤,警告,資訊和追蹤輸出為記錄。
什麽是 VSCode Pylance 延伸模組的記錄?
顧名思義,Pylance
記錄是由延伸模組Pylance
在執行過程中輸出的內容,這些內容可以在 VSCode 輸出面板的Python 語言伺服器一項中檢視。
{
// 設定 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
執行。
{
// 設定在執行 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 使用者設定或遠端設定中進行。
{
// 指向外部 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
設定項中。
語義類型包括但不限於,class
,enum
,parameter
,variable
,property
,enumMember
,function
,member
,module
,intrinsic
,magicFunction
,selfParameter
,clsParameter
。語義修飾詞包括但不限於,declaration
,readonly
,static
,abstract
,async
,typeHint
,typeHintComment
,decorator
,builtin
。
如何在 VSCode 中檢視 Python 程式碼所屬的語義類型和語義修飾詞?
如果你不清楚某個 Python 程式碼元素所屬的語義類型和語義修飾詞,那麽可以在 VSCode 命令面板中輸入命令Developer: Inspect Editor Tokens and Scopes
來啟動範圍檢查器,然後點選需要檢視的程式碼元素,面板中將顯示其語義類型,語義修飾詞,以及其他相關資訊。
{
// 為所有主題自訂 Python 語法醒目提示
"editor.semanticTokenColorCustomizations": {
"rules": {
// 指定類別的色彩
"class:python": "#da9797",
// 指定宣告的色彩,比如,類別和函式的定義
"*.declaration:python": "#82cb7a"
}
}
}