Tsa*_*iss 15 python setuptools mypy
我正在编写一个 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在每个目录中创建文件。dictinpackage_data字段中收集所有创建的setup.py文件。这段代码解决了这个问题并且mypy运行没有错误。但这对我来说感觉非常错误。是否有标准工具可以使包符合 PEP-561?我还缺少其他东西吗?
Tsa*_*iss 16
解决方案是将一个py.typed文件添加到主包的根目录中。这迫使 mypy 分析类型。
如前所述,您需要py.typed在模块的包文件夹中添加。您还需要将该文件添加到setup.py package_data - 否则在您部署它时该文件将不会成为包的一部分。
我个人将类型注释放在代码中并且不创建额外的存根文件 - 但这只能从 python 3.4 开始。如果你想让 python2.7 兼容代码,你不能使用内联类型注释 - 在这种情况下你可以使用存根文件。
如果您想对第三方库进行类型注释,您可以为您用于该库的函数编写一个 *.pyi 文件。这可能有点棘手,因为 MYPY 只能在 MYPY 路径中找到该 *.pyi 文件一次。
所以我是这样处理的:
对于本地测试,MYPY 路径设置为我收集所有 3rd 方存根的目录,为了在 travis 上进行测试,我在包中有一个子目录,其中包含该模块在 travis 上测试所需的存根,并设置 mypy相应的路径。