Last Updated on 2023-03-22 by Clay
問題描述
一直以來,我在透過 VS Code 連接到公司遠端伺服器開發時,都會遇到 Python 在編輯器中無法幫忙自動補完(auto-complete)的問題。但說也奇怪,我在安裝 Jupyter Notebook 擴充套件後在 .ipynb 的檔案中自動補完就很正常,所以我也一直不以為意。
但在最近我們有了一台更新的伺服器,我在裡頭透過 Jupyter Notebook 的問題就不僅僅是自動補完失效這麼單純了 –– 是整個介面都很卡啊!但考慮到種種(人的)因素,那看起來是不允許我調整的了。
所以我唯一能做的,就是看看怎麼把正常 Python 腳本的編輯器畫面,那些好用的函式自動補完給找回來。現代的開發者已經脫離不了語法自動補完了呢。
解決方法
或許是我已知用火,但是在 VS Code 中,有個設定是關於 Python Language Server 的。這些語言伺服器有許多種,像是 Jedi、Pylance、Microsoft Python Language Server 都屬此類。以下是它們的一些區別。
- Jedi:
Jedi 是一個透過 Python 編寫的靜態分析函式庫,支援自動補完、程式碼重構...... 等等功能。根據說明,它應該是 VS Code 的 Python Extension 默認的語言伺服器。
它的優點是對於 Python 的支援較為全面,在大多數情況下都可以識別自定義類別及函式;然而,Jedi 的性能可能不如其他語言伺服器。
Jedi 官方 GitHub repo: https://github.com/davidhalter/jedi - Pylance:
Pylance 是 Microsoft 開發的一個高性能的 Python 語言伺服器。它基於 Pyright 類型檢查器,支持類型推斷、自動完成、程式碼導航等等的功能,其優點是性能更好、對 Python 語言的新特性支持較快,但有時對自定義類別和函數的識別可能不如 Jedi(相當有感)。
Pylance 的官方文檔:https://github.com/microsoft/pylance-release - Microsoft Python Language Server:
跟 Pylance 同樣由 Microsoft 開發,性能跟功能皆相仿,不過在 Pylance 推出後已經被標記為棄用, 雖然在選項裡面可以選擇,不過應該大多數人會忽略。
官方 GitHub 倉庫:https://github.com/microsoft/python-language-server
在選擇使用哪個語言伺服器時,我們自然是需要根據當下的需求及對性能、功能的要求來進行選擇。我這種遠端連線無法自動補完的情況下,唯有調整成 Jedi 才能順利自動補完。(奇怪,不是說預設就是 Jedi 嗎... 但我的預設就是單純的 Default 選項,也不知道究竟是誰...)
總之,在 VS Code 中點擊左下方的齒輪圖示,選擇 Settings > 搜索框輸入 python language server > 選擇 Jedi 即可。
在我的情況中,選擇 Jedi 後就真的能在連線遠端伺服器中自動補完函式了!
補充:也可以再確認一次 Python Extension 是否有安裝好,沒安裝好的情況下可能出現同樣無法自動補完的情況。