You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

已设置include_package_data=True,MANIFEST.in指定文件仍被忽略求助

问题原因

include_package_data=True的作用是包含Python包目录内的非代码文件(通过MANIFEST.in或版本控制系统自动检测的文件)。你的config目录位于项目根目录,不属于任何Python包(项目里只有superapp是合法Python包),所以setuptools不会将其识别为包数据,自然不会被打包进sdist和wheel。

解决方案

方案1:将config目录移入Python包内(推荐)

调整项目结构,把config放到superapp目录下:

.
├── MANIFEST.in
├── pyproject.toml
├── setup.cfg
├── setup.py
└── superapp
   ├── __init__.py
   ├── main.py
   └── config
      └── conf.yaml

修改MANIFEST.in内容:

graft superapp/config

此时include_package_data=True会正常生效,sdist和wheel都会包含这个包内的config目录。代码里读取配置时,建议用importlib.resources模块来获取文件路径,避免硬编码带来的问题。

方案2:使用data_files保留根目录config(适合全局配置场景)

如果不想移动目录,在setup.cfg的[options]块中添加data_files配置,指定文件的安装路径:

[options]
zip_safe = False
include_package_data=True
packages = find:
install_requires = 
    loguru
    pyyaml
data_files =
    (etc/superapp, config/conf.yaml)

这种方式会把conf.yaml安装到目标环境的etc/superapp目录下(虚拟环境对应路径为venv/etc/superapp)。注意代码运行时需要动态获取这个路径,比如通过环境变量或预设的安装路径来读取配置文件。

补充:只在sdist中包含根目录config

如果仅需要sdist包包含config目录,你的现有MANIFEST.in已经生效——执行python setup.py sdist后,解压生成的tar.gz文件里能看到config目录。但wheel格式默认只包含Python包相关文件,所以要让wheel也包含,必须采用上面两种方案之一。

内容的提问来源于stack exchange,提问作者brillenheini

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 15:15:33