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

Docker容器中setuptools.package-data配置不生效问题求助

问题:GitLab CI/Docker构建wheel时无法包含package-data中的PNG图片

我有一个名为RecordEcos的项目,基于pyproject.toml实现多摄像头录制,用PySimpleGUI做极简界面,摄像头未连接时会显示占位PNG图片。

我在pyproject.toml中配置了package-data以确保图片被嵌入wheel包:

[tool.setuptools.package-data]
RecordEcos = ["*.png"]

本地ArchLinux环境(Python 3.11.8、build 1.1.1、setuptools 65.6.0)下一切正常,执行python -m build | grep Placeholder能看到图片被复制的日志,甚至不加这个配置也能正常打包图片。但推送到GitLab触发CI构建(使用python:3.11-alpine镜像),或者在本地Python 3.11的Docker镜像(alpine、slim、bookworm变体)中构建时,生成的wheel包里都没有这张图片。

GitLab CI配置如下:

build:
  stage: build
  image: python:3.11-alpine
  script:
    - pip install build
    - python -m build
  artifacts:
    untracked: false
    when: on_success
    expire_in: "30 days"
    paths:
      - dist/

排查方向与解决办法

  • 确认图片的存放路径
    确保PNG图片放在RecordEcos包目录下(和__init__.py同层级),setuptools的package-data仅识别包内文件。如果图片在子目录(比如RecordEcos/assets/),需修改配置:

    [tool.setuptools.package-data]
    RecordEcos = ["*.png", "assets/*.png"]
    
  • 检查MANIFEST.in文件
    如果项目存在MANIFEST.in,它会影响setuptools的文件收集逻辑。确保文件中包含:

    include RecordEcos/*.png
    

    若没有MANIFEST.in,可新建一个并添加上述内容,强制setuptools包含目标图片。

  • 锁定setuptools版本
    本地使用的是setuptools 65.6.0,但CI环境中pip安装build时会自动拉取最新版setuptools,不同版本的package-data处理逻辑可能存在差异。可以在CI脚本中指定版本:

    script:
      - pip install build setuptools==65.6.0
      - python -m build
    

    或者在pyproject.toml的build-system段锁定版本:

    [build-system]
    requires = ["setuptools==65.6.0", "wheel"]
    build-backend = "setuptools.build_meta"
    
  • 验证Git追踪状态
    确保PNG图片已被Git追踪(未被.gitignore排除),GitLab CI克隆代码时只会拉取已追踪的文件,若图片未被追踪,CI环境中根本不存在该文件,自然无法打包。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 14:18:29