我正在编写一个Python项目,它作为包发布到类似pypi的存储库中(使用setuptools
和twine
)。我在代码中使用类型提示
问题是,当从其他项目导入包并运行mypy
时,我遇到以下错误:
error: Skipping analyzing 'XXX': found module but no type hints or library stubs
据我所知,我得到这个错误是因为我的包不符合https://www.python.org/dev/peps/pep-0561/
在一些在线搜索之后,我没有找到一种非手动的方法将所需文件添加到包中
我求助于编写自己的代码来:
stubgen
创建存根文件李>py.typed
文件李>setup.py
文件的package_data
字段中的dict
中收集所有创建的文件李>这段代码解决了这个问题,并且mypy
运行时没有错误。但我觉得这很不对。是否有一个标准工具使程序包符合PEP-561?我还缺什么吗
如前所述,您需要在模块的包文件夹中添加
py.typed
。 您还需要将该文件添加到setup.py package_data中,否则在部署该文件时,该文件将不会是包的一部分我个人将类型注释放在代码中,不创建额外的存根文件——但这只能从python 3.4以上版本中实现。如果您想使python2.7兼容代码,就不能使用内联类型注释——在这种情况下,您可以使用存根文件
如果要为第三方库键入注释,可以为该库使用的函数编写*.pyi文件。这可能有点棘手,因为MYPY必须在MYPY路径中只找到一次*.pyi文件
所以我是这样处理的:
对于本地测试,MYPY路径设置为我收集所有第三方存根的目录, 为了在travis上测试,我在包中有一个子目录,其中包含该模块在travis上测试所需的存根,并相应地设置mypy路径
解决方案是向主包的根添加一个
py.typed
文件。这迫使mypy分析类型相关问题 更多 >
编程相关推荐