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

配置MANIFEST.in与setup.py后,data_folder未被纳入site-packages的问题排查

问题:Python包安装后data_folder未被包含的排查与解决

你已经做了不少正确的基础配置,但data_folder还是没被打包到安装包中,大概率是因为setuptools对数据文件的处理需要更明确的声明,或者存在缓存、路径匹配的问题。下面是一步步的排查和修复方法:

1. 优化MANIFEST.in的匹配规则

你的MANIFEST.in语句include src/pkg/folder2/data_folder/*路径是对的,但可以改成递归匹配来避免遗漏子文件(如果后续有新增的话):

recursive-include src/pkg/folder2/data_folder *

这条语句会包含data_folder下的所有文件及子目录内容。

2. 在setup.py中显式配置package_data

include_package_data=True虽然会读取MANIFEST.in,但有时候setuptools需要更明确的包级数据绑定。在setup.py中添加package_data参数:

from setuptools import setup, find_packages

setup(
    # 你的其他核心配置(name, version, author等)
    package_dir={"": "src"},
    packages=find_packages("src"),
    include_package_data=True,
    # 新增包数据声明
    package_data={
        # 键是子包的完整名称(从src下的根包开始)
        "pkg.folder2": ["data_folder/*"]
    }
)

这里的"pkg.folder2"是你的子包名称,"data_folder/*"是相对于该包目录的文件路径,明确告诉setuptools要把这个目录下的文件作为pkg.folder2包的一部分。

3. 清理构建缓存,重新打包安装

旧的构建缓存经常会导致新配置不生效,先删除缓存文件:

rm -rf build/ dist/ *.egg-info

然后重新构建并安装包:

python setup.py sdist bdist_wheel
pip install dist/*.whl

4. 确保依赖setuptools而非distutils

如果你的setup.py导入的是distutils,它对include_package_data和package_data的支持非常有限。一定要开头导入setuptools:

# 正确的导入方式
from setuptools import setup, find_packages
# 避免使用:from distutils.core import setup

为什么之前的配置没生效?

include_package_data=True的作用是让setuptools读取MANIFEST.in的规则,但它依赖工具正确识别包结构,且容易受旧缓存干扰。显式配置package_data相当于给setuptools一个明确的指令,直接把数据文件绑定到对应包上,避免了路径匹配的模糊性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 19:52:47