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

GitLab流水线构建Python Wheel时缺失指定文件夹及数据

解决GitLab流水线中Python Wheel打包忽略manifest.in的问题
  • 检查Git是否忽略了目标文件夹
    GitLab CI拉取代码时只会包含Git追踪的文件,如果skolnado/myfolder1里的文件没被Git追踪(比如在.gitignore中被排除,或未执行git add提交),CI环境里根本不存在这些文件,自然无法打包进去。
    操作步骤:

    1. 本地执行git check-ignore skolnado/myfolder1/*,排查是否有被忽略的文件
    2. 确保目标文件夹下所有需要打包的文件都已通过git add添加并提交到仓库
  • 统一CI与本地的setuptools版本
    不同版本的setuptools对manifest.in的解析逻辑可能存在差异,本地正常但CI异常大概率是版本不匹配导致的。
    操作步骤:

    1. 本地执行pip show setuptools记录当前版本号
    2. 在GitLab CI的依赖安装脚本或requirements.txt中指定固定版本,例如pip install setuptools==<你的本地版本>
  • 改用package_data显式指定(替代或补充manifest.in)
    部分CI环境下include_package_data=True结合manifest.in的配置可能出现兼容性问题,直接在setup.py中用package_data显式声明更可靠:

    setup(
        # 其他原有配置...
        package_data={
            'skolnado': ['myfolder1/**/*'],
        },
        include_package_data=True,
    )
    

    注意:路径是相对于包目录skolnado的,**/*表示递归包含该文件夹下所有子文件与子目录

  • 确认CI流水线的工作目录
    确保CI执行打包命令时处于项目根目录(即setup.py与manifest.in所在目录),如果CI脚本中切换了目录,会导致找不到manifest.in配置文件。
    操作步骤:在CI脚本的打包命令前添加pwd确认当前路径,或通过cd命令切换到正确的项目根目录

  • 用现代打包工具替代setup.py bdist_wheel
    旧的setup.py打包方式兼容性较差,改用build工具更稳定,它会自动处理pyproject.toml、setup.cfg等现代配置文件:

    1. CI环境中安装build工具:pip install build
    2. 替换打包命令为:python -m build --wheel
      同时可将manifest.in的配置迁移到pyproject.toml中,示例:
    [tool.setuptools.package-data]
    "skolnado" = ["myfolder1/**/*"]
    
  • 在CI中添加文件存在性验证
    在打包前先检查目标文件夹是否存在,避免因代码拉取失败导致的文件缺失问题。例如在CI脚本中添加:

    ls -la skolnado/myfolder1/
    

    如果输出为空,说明CI环境中无目标文件,回到第一步排查Git追踪情况

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 11:06:26