`--untyped-calls-exclude` does not exclude some packages/libraries
Chưa có ai nhận issue này.
Đánh giá
- Độ khó
- 4/5
- Thời gian dự kiến
- 3-5 ngày
- Mức phù hợp với người mới
- 35/100
Hướng nghiên cứu
Tái hiện báo cáo với .mypy.ini được cung cấp, các import networkx và conda.models.MatchSpec, cùng lệnh mypy đã nêu. Bắt đầu bằng cách lần theo phần triển khai và logic đối sánh của --untyped-calls-exclude; công việc được xem là hoàn tất khi import networkx và các lời gọi không còn tạo ra các lỗi untyped-import, no-untyped-call và Any đã được báo cáo, trong khi hành vi hiện có của MatchSpec vẫn được giữ nguyên.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
Bug Report
I have not been able to find any issues discussing a similar situation, so I'm filing this bug. I apologize in advanced if this is just a configuration issue. As best as I can currently tell, this appears to be a bug.
I have an experimental branch on conda-recipe-manager that uses conda's MatchSpec module and the networkx library. I can use --untyped-calls-exclude to prevent type checking on any use of the MatchSpec class, but I cannot do the same for anything in the networkx library. I have tried just excluding networkx in our mypy.ini file and that does not resolve my issue.
This is speculation at this point, but conda is packaged with a py.typed file, even though not every module has type annotations. networkx does not announce or include any typing. I think that might be causing a rule to fire before the exclusion rule takes effect. I say this because everything I've tried causes the following error messages to be emitted, and I do not get these errors when I exclude MatchSpec:
error: Skipping analyzing "networkx": module is installed, but missing library stubs or
py.typed marker [import-untyped]
import networkx as nx
^
error: Skipping analyzing "networkx.drawing.nx_agraph": module is installed, but
missing library stubs or py.typed marker [import-untyped]
from networkx.drawing.nx_agraph import graphviz_layout
I have run into this issue on mypy versions 1.10 and 1.11.
Things I have tried but have not gotten to work:
- Only excluding
networkx(either by.mypy.inior through the command line - Setting
disallow_any_unimportedtoFalse - Using
import networkxwithout aliasing tonx - Specifically excluding
networkx.drawing.nx_agraphin addition and without excludingnetworkxdirectly
If I do not exclude MatchSpec, I receive this error upon invoking the constructor:
error: Call to untyped function "MatchSpec" in typed context [no-untyped-call]
And then a error: Expression has type "Any" [misc] on any line referencing the instantiated MatchSpec object.
To Reproduce
import networkx as nx
foo0 = nx.DiGraph() # error: Expression has type "Any" [misc]
from conda.models.MatchSpec:
foo1 = MatchSpec("") # Works fine when excluded. If not excluded, generates: error: Call to untyped function "MatchSpec" in typed context [no-untyped-call]
print(foo1.name) # Works fine when excluded. If not exclude, generates: error: Expression has type "Any" [misc]
Here is our .mypy.ini
[mypy]
# Adapted from this StackOverflow post:
# https://stackoverflow.com/questions/55944201/python-type-hinting-how-do-i-enforce-that-project-wide
python_version = 3.11
# This flag enhances the user feedback for error messages
pretty = True
# Disallow dynamic typing
disallow_any_unimported = True
disallow_any_expr = True
disallow_any_decorated = True
disallow_any_generics = True
disallow_any_explicit = True
disallow_subclassing_any = True
# Disallow untyped definitions and calls
disallow_untyped_calls = True
# Exceptions for untyped external modules
untyped_calls_exclude = conda.models.match_spec, networkx
disallow_untyped_defs = True
disallow_incomplete_defs = True
check_untyped_defs = True
disallow_untyped_decorators = True
# None and optional handling
no_implicit_optional = True
# Configuring warnings
warn_unused_ignores = True
warn_no_return = True
warn_return_any = True
warn_redundant_casts = True
warn_unreachable = True
# Misc things
strict_equality = True
# Config file
warn_unused_configs = True
Expected Behavior
I would expect that any module used from networkx would skip type-evaluation. In other words, I would expect using --untyped-calls-exclude to ignore all usage from networkx. This appears to be what happens when MatchSpec is used with the --untyped-calls-excluded option.
Actual Behavior
mypy produces many errors when networkx is used in our project because it does not ship with any type annotations.
Your Environment
- Mypy version used: 1.10.0 and 1.11.1
- Mypy command-line flags:
mypy --config-file=.mypy.ini --cache-dir=/dev/null conda_recipe_manager/ tests/ scripts/ - Mypy configuration options from
mypy.ini(and other config files): (See above.mypy.ini) - Python version used: 3.12.4
- Ngôn ngữ chính
- Python
- Star
- 20.6k
- Fork
- 3.3k
- Merge trung bình
- 1 ngày 18 giờ
- Pull request đã merge (30 ngày)
- 54
Hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của python/mypy
-
bug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 75/100
-
bug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
-
bug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 76/100
-
documentation
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 72/100
-
bug topic-configuration topic-error-reporting
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 68/100
Issue tương tự
-
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 90/100
-
bug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 86/100
zostera/django-bootstrap4#894 ·
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
use-agent-os/agent-os#3276 ·
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 88/100
zephyrproject-rtos/zephyr#119726 ·
-
area/auth bug comp/agent P3 platform/discord type/security
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 88/100
NousResearch/hermes-agent#117848 ·