Can't check only submodules (except if installed with `pip install -e .`)
Nadie ha tomado este issue todavía.
- Lenguaje dominante
- Python
- Estrellas
- 20.6k
- Forks
- 3.3k
- Métricas de merge de PR
- Métricas de PR pendientes
Descripción
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
Guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Línea de trabajo
Comienza con la disposición reportada de setup.py y reproduce la diferencia entre mypy src/example_project/sub, -p example_project.sub y una instalación editable frente a una normal. Compara los diagnósticos de calc.py y sub/foo.py y, a continuación, rastrea el comportamiento del descubrimiento de módulos basado en rutas. Se considera terminado cuando comprobar únicamente el submódulo solicitado produce los tres errores esperados sin comprobar también calc.py.
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- python
- Área
- devtools
- Tipo de issue
- Error
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Estado de actividad
- Estancado
- Claridad
- Bastante claro
- Aptitud para principiantes
- 35/100