我有一组名称空间包,可以在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
无法找到__init__.py
子包,这意味着我没有在我的子包边界上进行健壮的类型检查
这似乎是一个已知问题:https://github.com/python/mypy/issues/1645
Guido提到解决方法是“添加一个虚拟__init__.pyi
或mynamespace.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();
}
能够在其他模块中获取其类型信息?
答案 0 :(得分:0)
希望你现在已经修复了它(或者放弃了!!)但是对于任何同胞来说,答案是运行:
mypy --namespace-packages -p mynamespace.subpackage
请注意,当您使用 -p
参数时,您也不能指定目录。