Mypy doesn't see typing info when it checks the whole package
まだ誰も着手していません。
- 主要言語
- Python
- スター
- 20.6k
- フォーク
- 3.3k
- PR マージ指標
- PR 指標を取得中
説明
Bug Report
Mypy returns errors when it's used to check the whole package but doesn't return any errors when it's run on individual files.
These errors are the same as when you don't have corresponding package (zeroconf in this case) installed. But zeroconf==0.29.0 is installed and it exports typing information (marked with py.typed).
Maybe I'm doing something wrong but I don't get why mypy can't see this typing info.
❯ mypy homeassistant
homeassistant/components/zeroconf/models.py:3: error: Module 'zeroconf' has no attribute 'DNSPointer' [attr-defined]
homeassistant/components/zeroconf/models.py:3: error: Module 'zeroconf' has no attribute 'DNSRecord' [attr-defined]
homeassistant/components/zeroconf/models.py:3: error: Module 'zeroconf' has no attribute 'ServiceBrowser' [attr-defined]
homeassistant/components/zeroconf/models.py:3: error: Module 'zeroconf' has no attribute 'Zeroconf' [attr-defined]
homeassistant/components/zeroconf/models.py:6: error: Class cannot subclass 'Zeroconf' (has type 'Any') [misc]
homeassistant/components/zeroconf/models.py:15: error: Class cannot subclass 'ServiceBrowser' (has type 'Any') [misc]
homeassistant/components/zeroconf/usage.py:23: error: Name 'zeroconf.Zeroconf' is not defined [name-defined]
homeassistant/components/zeroconf/usage.py:29: error: Name 'zeroconf.Zeroconf' is not defined [name-defined]
homeassistant/components/zeroconf/__init__.py:13: error: Module 'zeroconf' has no attribute 'Error' [attr-defined]
homeassistant/components/zeroconf/__init__.py:13: error: Module 'zeroconf' has no attribute 'InterfaceChoice' [attr-defined]
homeassistant/components/zeroconf/__init__.py:13: error: Module 'zeroconf' has no attribute 'IPVersion' [attr-defined]
homeassistant/components/zeroconf/__init__.py:13: error: Module 'zeroconf' has no attribute 'NonUniqueNameException' [attr-defined]
homeassistant/components/zeroconf/__init__.py:13: error: Module 'zeroconf' has no attribute 'ServiceInfo' [attr-defined]
homeassistant/components/zeroconf/__init__.py:13: error: Module 'zeroconf' has no attribute 'ServiceStateChange' [attr-defined]
homeassistant/components/zeroconf/__init__.py:13: error: Module 'zeroconf' has no attribute 'Zeroconf' [attr-defined]
Found 15 errors in 3 files (checked 3823 source files)
❯ mypy homeassistant/components/zeroconf/models.py
Success: no issues found in 1 source file
❯ mypy homeassistant/components/zeroconf/__init__.py
Success: no issues found in 1 source file
❯ mypy homeassistant/components/zeroconf/usage.py
Success: no issues found in 1 source file
This may be relevant. Sometimes I have mypy crashing with:
❯ mypy homeassistant
Traceback (most recent call last):
File "/Users/sayfutdinov/Project/github/core/venv/bin/mypy", line 8, in <module>
sys.exit(console_entry())
File "/Users/sayfutdinov/Project/github/core/venv/lib/python3.9/site-packages/mypy/__main__.py", line 11, in console_entry
main(None, sys.stdout, sys.stderr)
File "mypy/main.py", line 90, in main
File "mypy/build.py", line 179, in build
File "mypy/build.py", line 253, in _build
File "mypy/build.py", line 2638, in dispatch
File "mypy/build.py", line 2955, in process_graph
File "mypy/build.py", line 3033, in process_fresh_modules
File "mypy/build.py", line 1977, in fix_cross_refs
File "mypy/fixup.py", line 26, in fixup_module
File "mypy/fixup.py", line 77, in visit_symbol_table
File "mypy/fixup.py", line 301, in lookup_qualified_stnode
File "mypy/lookup.py", line 47, in lookup_fully_qualified
AssertionError: Cannot find component 'DNSPointer' for 'zeroconf.DNSPointer'
This is probably related to https://github.com/python/mypy/issues/7281
It disappears after removing .mypy_cache but may appear again after some time.
To Reproduce
I'm experiencing this on https://github.com/home-assistant/core/pull/48450
git clone https://github.com/home-assistant/core.git && cd coregit fetch origin pull/48450/head:zeroconf-typinggit checkout zeroconf-typingscript/setupsource venv/bin/activatepip install xknx zeroconfmypy homeassistant
Expected Behavior
Mypy doesn't return errors in all these cases.
Actual Behavior
Mypy returns errors when it's run for the whole package but doesn't return any errors when it's run on individual files.
Your Environment
- Mypy version used: mypy 0.812
- Mypy command-line flags:
mypy homeassistant - Mypy configuration options from
mypy.ini(and other config files):setup.cfg - Python version used: 3.9.2
- Operating system and version: MacOS, Ubuntu
コントリビューションガイド
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
調査の方向性
キャッシュをクリアする動作も含め、issue に記載された whole-package および single-file コマンドを再現します。まず mypy/build.py のパッケージ処理パスを追跡し、次に報告された assertion の周辺にある fixup.py と lookup.py を調べます。whole-package のチェックで、一覧にあるエラーやキャッシュ関連のクラッシュを発生させずに zeroconf の typing 情報を一貫して処理できれば完了です。
索引モデルが issue の本文から書いたものです。
評価
- 技術スタック
- python
- 領域
- devtools
- issue の種類
- バグ
- 難易度
- 4/5
- 見積もり時間
- 3〜5日
- 活発さ
- 停滞
- 明瞭さ
- おおむね明確
- 初心者へのやさしさ
- 38/100