Python
PythonのサポートはZedにネイティブで搭載されています。
- Tree Sitter: tree-sitter-python
- 言語サーバー: pyright
設定
pyright 言語サーバーは、JSON形式のテキスト設定ファイルで指定された柔軟な設定オプションを提供します。デフォルトでは、ファイル名は `pyrightconfig.json` で、プロジェクトのルートディレクトリに配置されます。Pyrightの設定は、`pyproject.toml` ファイルの `[tool.pyright]` セクションでも指定できます。 `pyrightconfig.json` ファイルと `pyproject.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ファイルを作成します。このファイルには、次の2つのキーを含める必要があります。
- `venvPath`:プロジェクトディレクトリから、1つ以上の仮想環境ディレクトリを*含む*任意のディレクトリへの相対パス
- `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"
Python環境の設定で推奨されているように、このオプションを `settings.json` ファイル(pyrightの設定)で直接設定することもできます。
{
"lsp": {
"pyright": {
"settings": {
"python": {
"pythonPath": ".venv/bin/python"
}
}
}
}
}
コードのフォーマットとリンティング
Pyright言語サーバーは、コードのフォーマットやリンティングを提供していません。保存時にLintエラーを検出してPythonコードを再フォーマットする場合は、設定する必要があります。
Pythonコードをフォーマットするための一般的なツールは、Ruffです。これはRustで書かれた別のツールであり、非常に高速なPythonリンター兼コードフォーマッターです。
Ruff拡張機能から入手できます。ただし、拡張機能によるコードフォーマットはまだ利用できません。`Ruff`がPython環境にインストールされていると仮定して、`settings.json` に次の設定を追加することで、保存時にフォーマッターを実行するように設定できます。
{
"languages": {
..., // other languages
"Python": {
"format_on_save": {
"external": {
"command": "python",
"arguments": [
"-m",
"ruff",
"format",
"-"
]
}
}
}
}
}