Open3

Pyrightを使いこなす

que9que9

Pyrightの検証を無視する

Pyrightで検証を無視するのには6通りの方法がある。

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

from https://gitter.im/microsoft-pyright/community?at=5e0f68283062aa3e8decd668

que9que9

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とかなんなんだよ……。
とりあえず動いたのでこれでよしとする。

que9que9

【未解決】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

求ム、解法。