Python构建时Manifest.in已指定的yaml文件被忽略如何解决?
Python打包时yaml资源文件被忽略的解决方案
你当前的MANIFEST.in配置本身规则已经覆盖了yaml文件的包含要求,问题通常出在打包工具的配套配置缺失,按以下步骤排查修复即可:
1. 开启资源文件包含开关
MANIFEST.in仅负责将文件纳入源码包(sdist),如果没有开启配套配置,构建wheel包或安装时非.py文件会被默认过滤:
- 若使用传统
setup.py配置:在setup()函数中添加参数include_package_data=True - 若使用
setup.cfg配置:在[options]块下添加配置项include_package_data = True - 若使用PEP 621标准的
pyproject.toml配置:在[tool.setuptools]块下添加配置项include-package-data = true
2. 确认子目录为可识别的包结构
检查mypackage/resources目录下是否存在空的__init__.py文件,缺少该文件时setuptools不会将该目录识别为包的子模块,内部的资源文件会被直接忽略。
3. 冗余配置清理(可选)
你当前MANIFEST.in里的recursive-include mypackage *.yaml已经递归包含了mypackage下所有子目录的yaml文件,单独的include mypackage/resources/about.yaml属于重复规则,可直接删除不影响效果。
验证方法
构建完成后执行以下命令验证文件是否被正确打包:
- 检查源码包:
tar tf dist/<你的包名+版本号>.tar.gz - 检查wheel包:
unzip -l dist/<你的包名+版本号>.whl
内容的提问来源于stack exchange,提问作者Der edle weiße Ritter
相关产品推荐
相关产品推荐

