Open3
Pyrightを使いこなす

Pyrightの検証を無視する
Pyrightで検証を無視するのには6通りの方法がある。
-
pryightconfig.json
に[ignore]
セクションを追加し、そこにファイル名またはディレクトリー名を記載する -> ファイル名またはディレクトリー内の全チェックが無視される - ファイルの冒頭に
# type: ignore
を追加する -> そのファイル内では全チェックが無視される - 無視したい行に
# type: ignore
を追加する -> その行では全チェックが無視される - ファイルのどこかに
# pyright: xxx=false
を追加する -> そのファイル内ではチェック項目xxx
が無視される - [型チェックのみ] typingモジュールのcast を使う
- [主に型チェックのみ] assert構文を使う(例:
assert x is not None
-> この処理以降、x
がNoneではない ことを保証)
from https://gitter.im/microsoft-pyright/community?at=5e0f68283062aa3e8decd668

venv環境でモジュールの依存性を解決する
venv環境で実行するとモジュールの依存性をうまく解決してくれない。
pyrightconfig.json
の /executionEnvironments/*/extraPaths
にsrcディレクトリを指定するとうまくいった。
以下はプロジェクト内(pyrightconfig.jsonの兄弟)にvenv環境として .venv
ディレクトリーが存在する場合かつPython 3.9を使う場合の設定例
{
"include": [
"src"
],
...
"venvPath": ".",
"venv": ".venv",
"executionEnvironments": [
{
...
"root": "./src/",
"extraPaths": ["./src/"]
}
],
...
}
どうやらextraPathsは PYTHONPATH
相当らしい。じゃあincludeとかrootとかなんなんだよ……。
とりあえず動いたのでこれでよしとする。

【未解決】djangoでPyrightをいい感じに動作させる
……ことはまだ無理っぽい。具体的には django-stub を使っても警告ばかり出る。
django-stubはmypy用に最適化してあるからPyrightでは使えないらしい
class Message(models.Model):
subject: models.CharField[Union[str, int, Combinable], str] = ...
みたいに書けば回避できるようだけど、ソースコード全部にこれやるのはカロリーが高すぎるなァ……。
from https://github.com/microsoft/pylance-release/issues/249
仕方ないからもう無視扱いにしている。
# pyright: reportUnknownVariableType=false
# pyright: reportUnknownArgumentType=false
求ム、解法。