python - 我的 Python 多模块包不会与 py.typed 文件一起分发

标签 python pip setuptools python-packaging

我已经为 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 。请参阅MANIFEST.in通常默认情况下包含在包分发中的默认文件的链接 - py.typed 不在那里。在 MANIFEST.in 文件中,您可以编写一行,例如:

global-include py.typed

我相信 include_package_data 设置为 true 会导致包管理器查看 MANIFEST.in 中是否有任何需要分发的非 Python 文件的其他文件。

我也可能会考虑在 src 目录中包含 init.py,然后在那里只包含一个 py.typed 文件。

关于python - 我的 Python 多模块包不会与 py.typed 文件一起分发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70921421/

相关文章:

python - 使用 pip install 运行自定义代码失败

python - 关于Django教程官方part3 html代码的问题

python - 如何从 python 生成 reST/sphinx 源?

python - 持续检测到 Django 1.7.2 迁移更改

Python:pip 尝试安装到/bin 目录

python - 如何使用 setuptools 将 Python 标记添加到 bdist_wheel 命令?

python - 运行总计的列表理解

python - 为什么 Django 1.0.x 无法从 PyPI 安装?

python-3.x - 修复 WSL 上的 Python3 pip 安装

python - 为什么不在 PyPI 上使用 setup.py 元数据?