Python

Zed 原生支援 Python。

設定

pyright 語言伺服器提供了靈活的設定選項,可以使用 JSON 格式的文字設定檔進行設定。預設情況下,設定檔名為 pyrightconfig.json,位於專案的根目錄中。Pyright 設定也可以在 pyproject.toml 檔案的 [tool.pyright] 區段中指定。如果同時存在 pyrightconfig.jsonpyproject.toml 檔案,則 pyrightconfig.json 檔案的優先順序較高。

如需更多資訊,請參閱 Pyright 設定文件

設定

pyright 語言伺服器也接受特定的 LSP 相關設定,這些設定不一定與專案相關。您可以在 settings.json 檔案的 lsp 區段中變更這些設定。

例如,若要

  • 使用嚴格的類型檢查級別
  • 診斷工作區中的所有檔案,而不是僅診斷預設開啟的檔案
  • 提供特定 Python 直譯器的路徑
{
  "lsp": {
    "pyright": {
      "settings": {
        "python.analysis": {
          "diagnosticMode": "workspace",
          "typeCheckingMode": "strict"
        },
        "python": {
          "pythonPath": ".venv/bin/python"
        }
      }
    }
  }
}

如需更多資訊,請參閱 Pyright 設定文件

虛擬環境

Python 虛擬環境 允許您將專案的所有依賴項(包括 Python 直譯器和套件管理器)儲存在單一目錄中,該目錄與電腦上的任何其他 Python 專案隔離。

預設情況下,Pyright 語言伺服器會在預設的全域位置中尋找 Python 套件。但您也可以將 Pyright 設定為使用安裝在指定虛擬環境中的套件。

為此,請在專案的根目錄中建立一個名為 pyrightconfig.json 的 JSON 檔案。此檔案必須包含兩個鍵:

  • venvPath:從專案目錄到任何「包含」一個或多個虛擬環境目錄的相對路徑
  • venv:虛擬環境目錄的名稱

例如,一種常見的方法是在專案目錄的根目錄中建立一個名為 .venv 的虛擬環境目錄,可以使用以下命令:

# create a virtual environment in the .venv directory
python3 -m venv .venv
# set up the current shell to use that virtual environment
source .venv/bin/activate

完成後,您可以建立一個包含以下內容的 pyrightconfig.json 檔案:

{
  "venvPath": ".",
  "venv": ".venv"
}

如果您偏好使用 pyproject.toml 檔案,則可以新增以下區段:

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

您也可以直接在 settings.json 檔案中設定此選項(pyrights 設定),如 設定 Python 環境 中所述。

{
  "lsp": {
    "pyright": {
      "settings": {
        "python": {
          "pythonPath": ".venv/bin/python"
        }
      }
    }
  }
}

程式碼格式化與 Linting

Pyright 語言伺服器不提供程式碼格式化或 linting 功能。如果您想在儲存時偵測 lint 錯誤並重新格式化 Python 程式碼,則需要進行設定。

一種常用的 Python 程式碼格式化工具是 Ruff。它是另一個用 Rust 編寫的工具,是一個速度極快的 Python linter 和程式碼格式化程式。

它可以通过 Ruff 擴充套件 取得。但是,擴充套件中的程式碼格式化功能尚未推出。您可以透過將以下設定新增到 settings.json 中,將格式化程式設定為在儲存時執行,前提是您的 Python 環境中已安裝 Ruff

{
  "languages": {
    ..., // other languages
    "Python": {
      "format_on_save": {
        "external": {
          "command": "python",
          "arguments": [
            "-m",
            "ruff",
            "format",
            "-"
          ]
        }
      }
    }
  }
}