Description
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: