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
Обратите внимание, что при использовании
-p
arg, вы также не можете указать каталог.