是否有使程序包符合PEP561的最佳实践?

2024-05-15 00:16:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在编写一个Python项目,它作为包发布到类似pypi的存储库中(使用setuptoolstwine)。我在代码中使用类型提示

问题是,当从其他项目导入包并运行mypy时,我遇到以下错误: error: Skipping analyzing 'XXX': found module but no type hints or library stubs

据我所知,我得到这个错误是因为我的包不符合https://www.python.org/dev/peps/pep-0561/

在一些在线搜索之后,我没有找到一种非手动的方法将所需文件添加到包中

我求助于编写自己的代码来:

  1. 运行stubgen创建存根文件
  2. 在每个目录中创建py.typed文件
  3. setup.py文件的package_data字段中的dict中收集所有创建的文件

这段代码解决了这个问题,并且mypy运行时没有错误。但我觉得这很不对。是否有一个标准工具使程序包符合PEP-561?我还缺什么吗


Tags: 文件项目代码pypypi类型错误error
2条回答

如前所述,您需要在模块的包文件夹中添加py.typed。 您还需要将该文件添加到setup.py package_data中,否则在部署该文件时,该文件将不会是包的一部分

我个人将类型注释放在代码中,不创建额外的存根文件——但这只能从python 3.4以上版本中实现。如果您想使python2.7兼容代码,就不能使用内联类型注释——在这种情况下,您可以使用存根文件

如果要为第三方库键入注释,可以为该库使用的函数编写*.pyi文件。这可能有点棘手,因为MYPY必须在MYPY路径中只找到一次*.pyi文件

所以我是这样处理的:

对于本地测试,MYPY路径设置为我收集所有第三方存根的目录, 为了在travis上测试,我在包中有一个子目录,其中包含该模块在travis上测试所需的存根,并相应地设置mypy路径

解决方案是向主包的根添加一个py.typed文件。这迫使mypy分析类型

相关问题 更多 >

    热门问题