## 事象 以下のようなファイルがある。 ```console . ├── sub1.py └── sub2.py ``` `sub1.py` ```python from typing import TYPE_CHECKING import sub2 if TYPE_CHECKING: sub2.hoge() def fuga(): pass ``` `sub2.py` ```python import sub1 def hoge(): sub1.fuga() ``` これは[[循環インポート]]になってしまうので、`sub1.py` では[[basedpyright]]が `reportImportCycles` のエラーを出す。 ```error Cycle detected in import chain /Users/tadashi-aikawa/tmp/python-sandbox/sub1.py /Users/tadashi-aikawa/tmp/python-sandbox/sub2.py [reportImportCycles] ``` ただ、今回のように[[TYPE_CHECKING]]を利用して[[型ヒント]]を設定する場合は、[[循環インポート]]が必要になるケースもある。その場合に[[行で特定の警告を無視 (basedpyright)|行で特定の警告を無視]]しようとしてしても効果がない。 ```python from typing import TYPE_CHECKING # pyright: ignore[reportImportCycles] import sub2 if TYPE_CHECKING: sub2.hoge() ``` これをなんとかしたい。 ### 環境 | 対象 | バージョン | | ---------------- | ---------- | | [[macOS]] | 15.7.2 | | [[basedpyright]] | 1.37.1 | ## 原因 `reportImportCycles` はファイル単位にかかるルールだから? ## 解決方法 [[ファイルレベルの型制御 (basedpyright)|ファイルレベルの型制御]]で `reportImportCycles` を無効化する。 ```python # pyright: reportImportCycles=false ``` ## 参考 - [DetachHead/basedpyright](https://github.com/DetachHead/basedpyright/issues/960)