Python打独立SDK包时,如何将非.py的CSV、Parquet文件纳入分发包
非.py附属文件未打入Python分发包的解决方案
核心问题定位
你当前配置无效的原因有两个:
package_data的键使用了发行版名称(eu-taxonomy-sdk带连字符,本身不符合Python包命名规范,也不是你通过find_packages(where='src')扫描到的实际导入包名),导致setuptools完全无法匹配到对应包目录,配置直接失效。- 仅通过
package_data配置无法保证sdist源码分发包会包含非.py文件,老版本setuptools的源码打包逻辑默认仅扫描.py文件,需要补充MANIFEST.in规则。
具体实现步骤
1. 确认实际Python包名
你的项目配置了package_dir={'': 'src'}和find_packages(where='src'),先查看src目录下的实际包目录名(例如通常是eu_taxonomy_sdk这类下划线格式,Python包名不允许连字符),后续所有路径配置都基于这个实际包名。
2. 修正setup.py中的package_data配置
把原配置里的package_data键替换为实际包名,路径写相对于包根目录的规则,支持通配符匹配需要的CSV、Parquet等文件:
# 假设实际包名为 eu_taxonomy_sdk,替换为你自己的实际包名即可 package_data={ 'eu_taxonomy_sdk': [ 'config/*', # 匹配包根目录下config文件夹内的所有文件 'category/config/*', # 匹配category子包下config文件夹内的所有文件 # 如需递归匹配所有子目录的指定后缀文件,可追加: # '**/*.csv', '**/*.parquet' ] }
3. 新增MANIFEST.in文件(项目根目录与setup.py同级)
这个文件用来指定源码分发包(sdist)需要额外包含的非.py文件,内容示例:
# 递归包含src目录下所有后缀为csv、parquet的文件 recursive-include src *.csv *.parquet # 或者直接指定需要打包的config目录 # graft src/eu_taxonomy_sdk/config # graft src/eu_taxonomy_sdk/category/config
4. 重新生成分发包
清理旧的打包缓存后重新执行命令:
# 清理旧的build/dist目录、egg-info缓存 rm -rf build dist *.egg-info src/*.egg-info # 重新生成源码包 python setup.py sdist # 如需生成wheel包可追加 python setup.py bdist_wheel
验证方式
解压生成的dist/xxx.tar.gz源码包,查看对应config目录下的CSV、Parquet文件是否存在即可确认配置生效。
内容的提问来源于stack exchange,提问作者Abhishek Patil
相关产品推荐
相关产品推荐

