Can't check only submodules (except if installed with `pip install -e .`)
Chưa có ai nhận issue này.
- Ngôn ngữ chính
- Python
- Star
- 20.6k
- Fork
- 3.3k
- Chỉ số merge pull request
- Chỉ số pull request đang chờ
Mô tả
Bug Report
Checking a submodule only of a project seems impossible, when not installed using pip install -e .
Usecase:
I have project that contains auto-generated API code which is not correctly typed.
I only want to check the controllers that are located in a submodule.
To Reproduce
- Create a example project with the following structure
.
├── setup.py
└──src
└── example_project
├── __init__.py
├── calc.py
├── py.typed
└── sub
├── __init__.py
└── foo.py
src/example_project/calc.py :
def int_add(a: int, b: int) -> int:
"""
Simply add two numbers
"""
return a + b
def float_diff(a: float, b: float) -> float:
"""
Diff two numbers
"""
return a / b
if __name__ == "__main__":
int_add("a", "b")
src/ems_example_project/sub/foo.py:
import example_project.calc
example_project.calc.int_add("foo", "bar")
a: int = 1
a = "2"
-
Install the package with
pip install .OR do not install it at all. -
Run mypy for the given submodule
mypy src/example_project/sub
Expected Behavior
Only type errors for the submodule are found:
src/example_project/sub/foo.py:3: error: Argument 1 to "int_add" has incompatible type "str"; expected "int" [arg-type]
src/example_project/sub/foo.py:3: error: Argument 2 to "int_add" has incompatible type "str"; expected "int" [arg-type]
src/example_project/sub/foo.py:6: error: Incompatible types in assignment (expression has type "str", variable has type "int") [assignment]
Found 3 errors in 1 file (checked 2 source files)
This actually works, if I install the package with pip install -e ..
But I expect this to work no matter if I install the package normally or not installing it at all.
Actual Behavior
The type errors for the top level modules are also listed.
src/example_project/calc.py:21: error: Argument 1 to "int_add" has incompatible type "str"; expected "int" [arg-type]
src/example_project/calc.py:21: error: Argument 2 to "int_add" has incompatible type "str"; expected "int" [arg-type]
src/example_project/sub/foo.py:3: error: Argument 1 to "int_add" has incompatible type "str"; expected "int" [arg-type]
src/example_project/sub/foo.py:3: error: Argument 2 to "int_add" has incompatible type "str"; expected "int" [arg-type]
src/example_project/sub/foo.py:6: error: Incompatible types in assignment (expression has type "str", variable has type "int") [assignment]
Found 5 errors in 2 files (checked 2 source files)
If I use the option -p example_project.sub instead of the path it works as expected. But in my environment I am only able to add specific files (think pre-commit or similar).
It also works if I install the package using pip install -e.
Still I would not expect a such a difference just depending on how I installed the package.
Your Environment
- Mypy version used: 1.4.1
- Mypy command-line flags: none besides the path to the file
- Mypy configuration options from
mypy.ini(and other config files): none - Python version used: 3.9.16
This might be related to:
- #10956
- #10260
- #6861
- #10428
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.
Hướng nghiên cứu
Bắt đầu với bố cục setup.py được báo cáo và tái hiện sự khác biệt giữa mypy src/example_project/sub, -p example_project.sub và cài đặt editable so với cài đặt thông thường. So sánh các chẩn đoán từ calc.py và sub/foo.py, sau đó lần theo hành vi phát hiện module dựa trên đường dẫn. Hoàn tất khi chỉ kiểm tra submodule được yêu cầu tạo ra ba lỗi mong đợi mà không kiểm tra thêm calc.py.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Đánh giá
- Công nghệ
- python
- Lĩnh vực
- devtools
- Loại issue
- Lỗi
- Độ khó
- 4/5
- Thời gian dự kiến
- 3-5 ngày
- Mức độ hoạt động
- Đình trệ
- Độ rõ ràng
- Khá rõ ràng
- Mức phù hợp với người mới
- 35/100