首頁  >  文章  >  後端開發  >  使用 `basedpyright-langserver` 實作 Python 和 Poetry 的 Emacs

使用 `basedpyright-langserver` 實作 Python 和 Poetry 的 Emacs

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-10-07 12:10:02129瀏覽

Emacs for Python and Poetry Using `basedpyright-langserver`

我對目前的 Python emacs 設定非常滿意,但我發現設定有點棘手。我將在這裡為我未來的自己和任何其他正在尋找可靠的 emacs 配置的 Pythonista 記錄我的設定。

為什麼是基於pyright?

到目前為止,我一直在命令列上使用mypy --strict 來滿足我所有的類型檢查需求,但即使對於非常小的程式碼庫,mypy 也相當慢,即使在--strict 模式下,它也不如盡量嚴格。它也不是我的 emacs 設定所需要的語言伺服器。

basedpyright 是 Pyright 的一個分支,在檢查和可靠性方面都有一些出色的改進。它是一個快速且極其嚴格的類型檢查器,此外還具有一些良好的 linting 功能。

我遇到的唯一缺點是它不像mypy 與AWS 的boto3-stubs 用戶端一樣好用,而且它使用非標準的#pyright:ignore comments 而不是標準的#type:ignore comments,但是我可以忍受這些問題,支持嚴格的類型檢查體驗。

配置您的 Poetry 專案以使用 basedpyright 或 Pyright

如果您有使用 Poetry 的現有項目,您將需要稍微調整一下您的虛擬環境。

前往每個專案的根目錄並執行以下命令:


poetry config --local virtualenvs.in-project true


這將建立一個 poetry.toml 檔案(如果尚不存在)並添加相應的設定。

但是,這不會實際移動您現有的虛擬環境。為了使此變更生效,您必須刪除現有的虛擬環境,您可以透過執行

找到它

poetry env info --path


不要忘記將 .venv 路徑添加到 .gitignore 以及您可能使用的任何其他工具(如 pycodestyle)的配置,否則您最終會得到真是一團糟。

接下來,您應該為 pyproject.toml 新增一個設定部分,以告訴 basedpyright 在哪裡尋找您的虛擬環境。


[tool.pyright]
venv=".venv"
venvPath="."


如果與我不同,您還沒有感覺到不同 Python 開發工具的設定檔完全超載,您也可以在 pyrightconfig.json 檔案中執行此操作。

安裝 basedpyright 作為語言伺服器

basedpyright 相對於 Pyright 的一個非常好的一點是,它將 NodeJS 依賴項構建為輪子,因此您可以放心,無論您是否安裝了 NodeJS,basedpyright 都應該在您的電腦上運行。

為了隔離,通常最好使用 pipx 而不是 pip 安裝執行 Python 套件。讓我們繼續吧。


pipx install basedpyright


為了進行健全性檢查,請考慮運行


basedpyright --version


安裝basedpyright也可以讓你存取basedpyright-langserver指令,但這並不是真正為使用者互動而寫的,所以如果你執行basedpyright-langserver或basedpyright-langserver --version或其他東西,你會得到一個nodejs堆疊追蹤。

設定 emacs 使用 basedpyright-langserver

我假設您作為讀者知道如何從 MELPA 安裝軟體包並且有首選的方法。這是您需要的所有軟體包:

  • 公司
  • lsp 模式
  • lsp-pyright
  • lsp-ui
  • python 模式

安裝這些,然後打開 ~/.emacs~/.emacs.d/init.el 並添加以下內容:


;; lsp global settings
(add-hook 'after-init-hook 'global-company-mode)
(setq lsp-auto-guess-root t)

;; python
(require 'lsp-mode)
(setq lsp-pyright-langserver-command "basedpyright")
(add-hook 'python-mode-hook (lambda () (require 'lsp-pyright) (lsp)))


這應該就是您所需要的。

調試 lsp 模式的一般技巧

如果你覺得你已經正確設定了所有內容,但仍然無法透過lsp 模式找到Poetry 中應該可用的包,你可以嘗試的一件事就是進入並刪除你的 ~/.emacs.d /.lsp-session-v1。這將導致 lsp-mode 忘記專案根目錄並強迫它再次找到它。

快樂編碼!

我希望這能讓您在 Python 開發環境方面有一個好的開始。如果您有任何疑問,好吧,我是這一切的初學者,我可能無法幫助您,但如果您有任何在 emacs 中使用 basedpyright 的額外提示或技巧,我會考慮合併請求。

以上是使用 `basedpyright-langserver` 實作 Python 和 Poetry 的 Emacs的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn