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

使用setup.cfg为Python包包含数据文件夹时,安装后仅部分文件存在的问题排查

解决setuptools打包时数据文件夹文件未完全分发的问题

根据你的描述,我推测问题大概率出在文件匹配规则的局限性上,另外也有几个其他可能的点需要排查,下面一步步来分析和解决:

1. 最可能的原因:匹配模式*.*无法覆盖所有文件

你在MANIFEST.in和setup.cfg里都用了*.*作为匹配规则,这个模式只能匹配带有扩展名的文件,但spacy的模型文件夹ru_core_news_sm-3.1.0里肯定存在不少没有扩展名的文件(比如vocab/strings、tokenizer/prefix_rules这类),还有子目录里的文件也无法被*.*递归匹配到。

修改方案:

  • 更新MANIFEST.in,把规则改成递归匹配所有文件:
    recursive-include test_project_name/ru_core_news_sm-3.1.0 **/*
    
  • 同步修改setup.cfg里的[options.package_data]配置:
    [options.package_data]
    test_project_name/ru_core_news_sm-3.1.0 = **/*
    

**/*这个模式会递归遍历目标文件夹下的所有子目录,匹配所有类型的文件(不管有没有扩展名)。

2. 检查是否有忽略规则干扰

如果你的项目里有.gitignore文件,setuptools在打包时可能会参考git的忽略列表(尤其是当你使用了setuptools-scm工具,或者setuptools的默认行为),导致某些文件被排除在外。

排查方法:

  • 临时注释掉.gitignore里的所有规则,重新打包测试,看是否缺失的文件被包含了。
  • 如果确实是.gitignore的问题,可以在MANIFEST.in里用include指令强制包含被忽略的文件,比如:
    include test_project_name/ru_core_news_sm-3.1.0/vocab/strings
    

3. 先验证打包内容,再安装

直接用pip install安装源码可能看不到中间过程,建议先打包成wheel包,检查包里的内容是否完整:

  1. 先更新打包工具:
    pip install --upgrade setuptools wheel build
    
  2. 生成包文件:
    python -m build
    
  3. 解压生成的wheel包(在dist目录下),查看test_project_name/ru_core_news_sm-3.1.0下的文件是否完整。如果这里已经缺失,那就是打包规则的问题;如果这里完整但安装后缺失,再排查pip安装的问题。

4. 清理旧安装缓存

有时候本地安装会有缓存残留,导致新修改的配置没有生效,可以先卸载旧包,清理缓存后重新安装:

pip uninstall -y test-project-name
pip cache purge
pip install path/to/base_project_name

按照上面的步骤修改后,应该就能完整分发所有数据文件了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 19:24:11