我的 Python 多模块包不会随 py.typed 文件一起分发
My Python multi-module package won't distribute with a py.typed file
我已经为 Pip 创建了一个包,其中包含多个模块,我正在将其用于其他一些项目。在其中一个项目中,我最近添加了 MyPy,因为 Pylance 缺少一些潜在的错误,但是当我导入这些模块时,MyPy 将它们标记为错误,因为它们缺少 py.typed
文件。我已经将这些文件之一添加到每个子模块中,因此目录结构如下:
* MyRepo:
* src
| * modulea
| | * __init__.py
| | * modulea.py
| | * py.typed
| * moduleb
| | * __init__.py
| | * moduleb.py
| | * py.typed
* setup.cfg
我还在 setup.cfg
中指定要包含包数据,使用 include_package_data = True
标志。
[metadata]
# Other details
[options]
packages = find:
package_dir =
=src
python_requires = >=3.9.1
include_package_data = True
[options.packages.find]
where = src
然而,当我分发包时,它不包含任何 py.typed
文件。我不知道这是为什么,考虑到当我使用 pip install -e .
手动安装它时,我没有收到任何错误,这尤其令人困惑。我非常感谢任何解决此问题的帮助,因为我完全被难住了。
我不是 100% 确定这是正确的,因为我面前没有包裹,但我会尝试一下。
我相信由于 py.typed 不是 Python 文件,您需要明确指定要包含它。为此,在您的顶级包中,您需要 MANIFEST.in. See the MANIFEST.in link 作为通常默认包含在包分发中的默认文件 - py.typed 不在其中。在 MANIFEST.in 文件中,您可以编写如下一行:
global-include py.typed
我相信 include_package_data 设置为 true 会导致包管理器查看 MANIFEST.in 以查找任何其他需要分发的非 python 文件的文件。
我可能还会考虑在 src 目录中包含 init.py,然后在那里只有一个 py.typed 文件。
我已经为 Pip 创建了一个包,其中包含多个模块,我正在将其用于其他一些项目。在其中一个项目中,我最近添加了 MyPy,因为 Pylance 缺少一些潜在的错误,但是当我导入这些模块时,MyPy 将它们标记为错误,因为它们缺少 py.typed
文件。我已经将这些文件之一添加到每个子模块中,因此目录结构如下:
* MyRepo:
* src
| * modulea
| | * __init__.py
| | * modulea.py
| | * py.typed
| * moduleb
| | * __init__.py
| | * moduleb.py
| | * py.typed
* setup.cfg
我还在 setup.cfg
中指定要包含包数据,使用 include_package_data = True
标志。
[metadata]
# Other details
[options]
packages = find:
package_dir =
=src
python_requires = >=3.9.1
include_package_data = True
[options.packages.find]
where = src
然而,当我分发包时,它不包含任何 py.typed
文件。我不知道这是为什么,考虑到当我使用 pip install -e .
手动安装它时,我没有收到任何错误,这尤其令人困惑。我非常感谢任何解决此问题的帮助,因为我完全被难住了。
我不是 100% 确定这是正确的,因为我面前没有包裹,但我会尝试一下。
我相信由于 py.typed 不是 Python 文件,您需要明确指定要包含它。为此,在您的顶级包中,您需要 MANIFEST.in. See the MANIFEST.in link 作为通常默认包含在包分发中的默认文件 - py.typed 不在其中。在 MANIFEST.in 文件中,您可以编写如下一行:
global-include py.typed
我相信 include_package_data 设置为 true 会导致包管理器查看 MANIFEST.in 以查找任何其他需要分发的非 python 文件的文件。
我可能还会考虑在 src 目录中包含 init.py,然后在那里只有一个 py.typed 文件。