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

如何用find_packages()打包子目录文件?解决xlsx文件未被包含问题

为什么file4.xlsx没被打包?怎么解决?

这是Python打包时很常见的问题——find_packages() 函数的作用是帮你找到所有包含__init__.py的目录作为Python包,但默认只会打包这些包里的.py文件,像.xlsx这类非Python资源文件不会自动被纳入打包范围,哪怕它们在Python包目录里。

解决方法有两种常用方案,你可以根据需求选择:

方案1:用MANIFEST.in配置(适合源码分发场景)

编辑你已有的MANIFEST.in文件,添加对这个xlsx文件的包含规则:

# 精确指定单个文件
include country/folder1/folder2/file4.xlsx

# 如果folder2里还有其他同类型文件,也可以用通配符批量包含
# recursive-include country/folder1/folder2 *.xlsx

然后在setup.py的setup()函数里加上include_package_data=True参数,确保打包工具会读取MANIFEST.in的规则:

setup(
    # 你的其他配置:name, version, author...
    packages=get_packages(),
    include_package_data=True,
    # 其他参数...
)

方案2:在setup.py中直接配置package_data(更精准控制)

如果你想在代码里明确指定哪些包包含哪些资源文件,可以在setup()函数里添加package_data参数:

setup(
    # 你的其他配置...
    packages=get_packages(),
    package_data={
        # 键是Python包的导入路径(不是文件系统路径)
        'country.folder1.folder2': ['file4.xlsx'],
        # 要是有多个文件,也可以用通配符:['*.xlsx', '*.json']
    },
    include_package_data=True,
    # 其他参数...
)

验证是否生效

执行python setup.py sdist生成源码包,然后解压生成的.tar.gz文件,检查country/folder1/folder2/下是否存在file4.xlsx;或者用pip install -e .安装开发版,然后去你的Python环境的site-packages目录下找到对应包,确认文件已被包含。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:38:45