Mypy и распространение пакета пространства имен

У меня есть набор пакетов пространства имен, которые предназначены для запуска в среде python3.6.

Каждый из них настроен следующим образом:

if sys.version_info < (3, 6):
    print("Python versions < 3.6 unsupported", file=sys.stderr)
    sys.exit(1)

setup(
    name="mynamespace.subpackage",
    version=VERSION,

    packages=[
        "mynamespace.subpackage",
    ],
    package_dir={"": "src"},
    package_data={
        "": [],
    },
    include_package_data=True,
    zip_safe=False,

    install_requires=[
        "mynamespace.core",  # May have explicit dependencies that are not cyclic
    ],

    namespace_packages=["mynamespace"],
    ...
)

Все подпакеты устанавливаются бок о бок.

Проблема возникает, когда я хочу получить надежную проверку типов с помощью mypy, mypy не может найти mynamespace.core подпакет при запуске на исходных файлах для mynamespace.subpackage (например), что означает, что я не получаю надежную проверку ввода через границы моего подпакета.

Кажется, это известная проблема: https://github.com/python/mypy/issues/1645

Гвидо упоминает, что обходной путь состоит в том, чтобы "добавить манекен" __init__.py или же __init__.pyi "Файлы", но он на самом деле не уточняет, и получается, что для меня это не так очевидно, как я надеялся. Добавление этих файлов в локальный репозиторий позволяет mypy запускать локальный репозиторий, как и ожидалось, я не могу выяснить, как получить доступ к информации о наборе в одноименном пакете пространства имен.

Мой вопрос: как бы я изменил mynamespace.core - чтобы при установке mypy может подобрать информацию о его типе в других модулях?

1 ответ

Надеюсь, вы уже исправили это (или сдались!!), но для всех жителей ответ будет следующим:

mypy --namespace-packages -p mynamespace.subpackage

Обратите внимание, что при использовании -parg, вы также не можете указать каталог.

Другие вопросы по тегам