mypy并分发命名空间包

时间:2018-02-07 16:01:29

标签: python python-3.x mypy namespace-package

我有一组名称空间包,可以在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进行强大的类型检查时,问题就来了。 mypymynamespace.core的源文件上运行时mynamespace.subpackage无法找到__init__.py子包,这意味着我没有在我的子包边界上进行健壮的类型检查

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

Guido提到解决方法是“添加一个虚拟__init__.pyimynamespace.core文件”,但他并没有真正详细说明,事实证明这对我来说并不像我一样明显我曾希望过。将这些文件添加到 local repo允许mypy按预期运行在本地repo上,我无法弄清楚如何访问兄弟命名空间包中的输入信息。

我的问题是:如何修改mypy - 以便在安装后,try { Field charset = Charset.class.getDeclaredField("defaultCharset"); charset.setAccessible(true); charset.set(null,null); System.setProperty("file.encoding","UTF-8"); } catch (Exception e) { e.printStackTrace(); } 能够在其他模块中获取其类型信息?

1 个答案:

答案 0 :(得分:0)

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

mypy --namespace-packages -p mynamespace.subpackage

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