根据我的阅读,为了确保代码的类型信息与代码一起分发以供 linter 读取,
py.typed
文件应该是您的分发的一部分。
我找到了如何将这些添加到 setup.py 的答案,但我不清楚 1. 是否应将其包含在 pyproject.toml 中(使用 setuptools),2. 如果是,应如何添加。
搜索他们的 github 存储库,似乎这不会自动添加,所以问题仍然是我应该如何将它添加到我的 pyproject.toml 中。我发现了关于
package_data
的一般性讨论,但它包括对 include_package_data
和 MANIFEST.in
的引用,从那里开始,什么应该去哪里变得令人困惑。
Tl;dr:使用 setuptools 时,我应该如何在 pyproject.toml 中包含
py.typed
?
是的,您应该将
py.typed
添加到包的源文件夹(与 __init__.py
同一级别)。这会通知类型检查器(如 mypy
)您的包支持输入。请参阅PEP 561。
这是
pyproject.toml
中所需内容的示例。将 pkgname
替换为您的包裹名称。
[tool.setuptools.package-data]
"pkgname" = ["py.typed"]
值得注意的是包发现使用:
[tool.setuptools.packages.find]
where = ["src"]
似乎是必需的,可惜
package-data
不会有任何效果,如setuptools
文档中所述:https://setuptools.pypa.io/en/latest/userguide/datafiles.html#package-data
一旦包含超过 1 个目录,上述建议的解决方案就不再适合我。 例如
[tool.setuptools.packages.find]
where = ["src", "docs"]
有什么想法吗?我用
setuptools==65.5.0
和 mypy==1.9.0
。