5

我有一组要在 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.coremynamespace.subpackage

这似乎是一个已知问题: https ://github.com/python/mypy/issues/1645

Guido 提到解决方法是“添加一个虚拟对象__init__.py__init__.pyi文件”,但他并没有真正详细说明,事实证明这对我来说并不像我希望的那样明显。将这些文件添加到本地repo 允许 mypy 按预期在本地 repo 上运行,我不知道如何访问同级命名空间包中的键入信息。

我的问题是:我将如何修改mynamespace.core——以便在安装时mypy能够在其他模块中获取它的类型信息?

4

1 回答 1

1

希望你现在已经修好了(或者放弃了!!),但对于任何同胞来说,答案是运行:

mypy --namespace-packages -p mynamespace.subpackage

请注意,当您使用-parg 时,您也不能指定目录。

于 2021-02-01T18:47:47.367 回答