如何用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
相关产品推荐
相关产品推荐

