Python

Python 支持在 Zed 中以原生方式提供。

配置

pyright 语言服务器提供灵活的配置选项,在 JSON 格式的文本配置中指定。默认情况下,该文件名为 pyrightconfig.json,位于项目的根目录中。Pyright 设置也可以在 pyproject.toml 文件的 [tool.pyright] 部分中指定。如果同时存在 pyrightconfig.json 文件和 pyproject.toml 文件,则 pyrightconfig.json 文件始终优先。

有关更多信息,请参阅 Pyright 配置文档

设置

pyright 语言服务器还接受特定于 LSP 的设置,不一定与项目相关。这些设置可以在 settings.jsonlsp 部分中更改。

例如,为了

  • 使用严格类型检查级别
  • 诊断工作区中的所有文件,而不是仅诊断默认的打开文件
  • 提供特定 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 中来设置格式化程序以在保存时运行,假设 Ruff 已安装在您的 Python 环境中。

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