Skip to content

[已解決] VS Code 在連接到遠端伺服器中 Python 自動補完(autocomplete)失效

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 都屬此類。以下是它們的一些區別。

  1. Jedi
    Jedi 是一個透過 Python 編寫的靜態分析函式庫,支援自動補完、程式碼重構...... 等等功能。根據說明,它應該是 VS Code 的 Python Extension 默認的語言伺服器。
    它的優點是對於 Python 的支援較為全面,在大多數情況下都可以識別自定義類別及函式;然而,Jedi 的性能可能不如其他語言伺服器。
    Jedi 官方 GitHub repo: https://github.com/davidhalter/jedi
  2. Pylance
    Pylance 是 Microsoft 開發的一個高性能的 Python 語言伺服器。它基於 Pyright 類型檢查器,支持類型推斷、自動完成、程式碼導航等等的功能,其優點是性能更好、對 Python 語言的新特性支持較快,但有時對自定義類別和函數的識別可能不如 Jedi(相當有感)。
    Pylance 的官方文檔:https://github.com/microsoft/pylance-release
  3. 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 是否有安裝好,沒安裝好的情況下可能出現同樣無法自動補完的情況。


References


Read More

Leave a Reply