Ошибка mypy «Исходный файл найден дважды под разными именами модулей» при использовании редактируемой установкиPython

Программы на Python
Anonymous
Ошибка mypy «Исходный файл найден дважды под разными именами модулей» при использовании редактируемой установки

Сообщение Anonymous »

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")
Second.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
)
— это пакет пространства имен, поэтому он намеренно не включает __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 работать с редактируемыми пакетами пространства имен для установки и поддержки?


Подробнее здесь: https://stackoverflow.com/questions/785 ... -using-edi

Вернуться в «Python»