mypy выдает ошибку, когда у меня есть редактируемая установка (pip install -e .
) моей библиотеки. Он отлично работает с нередактируемой установкой (pip install .
).
Мне удалось воспроизвести это на игрушечном примере, вот файлы:
.
├── src
│ └── my_ns
│ └── mylib
│ ├── __init__.py
│ ├── main.py
│ ├── py.typed
│ └── second.py
├── mypy.ini
└── pyproject.toml
main.py
def something() -> None:
print("I am something")
второй.py
from my_ns.mylib.main import something
def something_else() -> None:
something()
print("I am something else")
pyproject.toml
[build-system]
requires = ["setuptools", "setuptools-scm"]
build-backend = "setuptools.build_meta"
[project]
name = "mylib"
requires-python = ">=3.10"
version = "0.1.0"
[tool.setuptools.packages.find]
where = ["src"]
[tool.setuptools.package-data]
"*" = ["*py.typed"]
mypy.ini
[mypy]
namespace_packages = True
explicit_package_bases = True
exclude = (?x)(
^tests/ # ignore everything in tests directory
| ^test/ # ignore everything in test directory
| ^setup\.py$ # ignore root's setup.py
)
my_ns
— это пакет пространства имен, поэтому он намеренно не включает __init__.py
(и должен оставаться пространством имен).
Вот результат при запуске mypy 1.10.0:
$ mypy --config-file mypy.ini .
src/my_ns/mylib/main.py: error: Source file found twice under different module names: "src.my_ns.mylib.main" and "my_ns.mylib.main"
Found 1 error in 1 file (errors prevented further checking)
Как заставить mypy работать с редактируемыми пакетами пространства имен установки и поддержки?
@MarioIshac Не могли бы вы опубликовать это в качестве ответа?
Добавьте в свой mypy.ini
следующее:
mypy_path = src
(Отдаём должное Марио Ишаку , который получил это из комментария к выпуску на GitHub.)
Мне удалось воспроизвести вашу ошибку. Добавление
mypy_path = src
вmypy.ini
решило проблему. Решение этой проблемы найдено на странице github.com/python/mypy/issues/8944#issuecomment-948533140 (префикс$MYPY_CONFIG_FILE_DIR/
не нужен).