Tengo:
foo/ ├── __init__.py ├── bar.py └── baz ├── __init__.py └── alice.py En bar.py , importo Alice, que es una clase vacía sin nada más que el atributo de name establecido en "Alice" .
from baz.alice import Alice a = Alice() print(a.name)Esto funciona correctamente:
$ python foo/bar.py AlicePero mypy se queja:
$ mypy --version mypy 0.910 $ mypy --strict . foo/bar.py:1: error: Cannot find implementation or library stub for module named "baz.alice" foo/bar.py:1: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports Found 1 error in 1 file (checked 6 source files)¿Por qué Mypy se queja?
mypy tiene su propia ruta de búsqueda para importaciones y no resuelve las importaciones exactamente como lo hace Python y no puede encontrar el módulo baz.alice . Consulte la documentación que aparece en el mensaje de error, específicamente la sección Cómo se encuentran las importaciones:
Las reglas para buscar un módulo
fooson las siguientes:La búsqueda busca en cada uno de los directorios en la ruta de búsqueda (ver arriba) hasta que se encuentra una coincidencia.
- Si se encuentra un paquete llamado
foo(es decir, un directorio foo que contiene un__init__.pyo__init__.pyi), es una coincidencia.- Si se encuentra un archivo auxiliar llamado
foo.pyi, es una coincidencia.- Si se encuentra un módulo de Python llamado
foo.py, es una coincidencia.
La documentación también establece que esto en la sección sobre Asignación de rutas de archivos a módulos :
Para cada archivo a verificar,
mypyintentará asociar el archivo (p. ejproject/foo/bar/baz.py) con un nombre de módulo completo (p. ej.,foo.bar.baz).
Hay algunas maneras de resolver este problema en particular:
from foo.baz.alice import Alice ) y luego ejecutar desde un módulo de nivel superior (un archivo .py en el nivel raíz) .# type: ignore a la línea de importación.MYPYPATH para que apunte al directorio foo : (venv) (base) ➜ mypy foo/bar.py --strict foo/bar.py:3: error: Cannot find implementation or library stub for module named "baz.alice" foo/bar.py:3: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports Found 1 error in 1 file (checked 1 source file) (venv) (base) ➜ export MYPYPATH=foo/ (venv) (base) ➜ mypy foo/bar.py --strict Success: no issues found in 1 source file