使用Jenkins inbound agent Alpine镜像构建Docker镜像遇license_file弃用错误
问题解决:PyYAML编译失败(license_file弃用 + cython_sources错误)
问题根源
你的错误本质是PyYAML 5.4.1源码包与新版setuptools(>=60.0.0)不兼容,同时Python3.11对旧版PyYAML的编译支持存在问题:
- setuptools 60+版本弃用了
license_file参数,但PyYAML 5.x的setup.cfg仍在使用该参数 - 旧版PyYAML源码编译依赖Cython,但构建环境缺少相关配置,导致触发
AttributeError: cython_sources
解决方案(任选其一)
方案1:安装系统预编译的PyYAML,跳过源码编译
在apk add阶段直接安装Alpine官方提供的预编译PyYAML包,避免pip从源码编译:
RUN apk add --no-cache \ docker=${DOCKER_PACKAGE_VERSION} \ python3 \ py-pip \ py3-yaml \ # 新增:安装系统预编译的PyYAML libc-dev \ gcc \ python3-dev \ cmd:pip3 \ musl-dev && \ pip3 install pip --upgrade && \ pip3 install -U \ 'aws-sam-cli>=1.20' \ 'boto3>=1.14.0' \ 'botocore>=1.18.63' \ 'awscli>=1.19.10' \ 'aws-lambda-builders>=1.2.0' \ 'cfn-lint>=0.47' \ 'docker-compose>=1.25.5' \ --no-cache-dir --ignore-installed PyYAML && \ # 新增:忽略已安装的PyYAML,避免pip覆盖系统包 apk --purge --no-cache del \ gcc \ python3-dev \ musl-dev \ libc-dev
方案2:固定setuptools到兼容旧版参数的版本
在pip升级后,先安装低版本setuptools,再安装其他依赖:
RUN apk add --no-cache \ docker=${DOCKER_PACKAGE_VERSION} \ python3 \ py-pip \ libc-dev \ gcc \ python3-dev \ cmd:pip3 \ musl-dev && \ pip3 install pip --upgrade && \ pip3 install setuptools<60.0.0 && \ # 固定setuptools到59.x版本,兼容旧版license_file参数 pip3 install -U \ 'aws-sam-cli>=1.20' \ 'boto3>=1.14.0' \ 'botocore>=1.18.63' \ 'awscli>=1.19.10' \ 'aws-lambda-builders>=1.2.0' \ 'cfn-lint>=0.47' \ 'docker-compose>=1.25.5' \ --no-cache-dir && \ apk --purge --no-cache del \ gcc \ python3-dev \ musl-dev \ libc-dev
方案3:升级aws-sam-cli到兼容PyYAML 6.x的版本
如果业务允许,将aws-sam-cli的版本约束提高到>=1.70.0(该版本开始支持PyYAML 6.x),新版PyYAML已修复license_file兼容问题:
RUN apk add --no-cache \ docker=${DOCKER_PACKAGE_VERSION} \ python3 \ py-pip \ libc-dev \ gcc \ python3-dev \ cmd:pip3 \ musl-dev && \ pip3 install pip --upgrade && \ pip3 install -U \ 'aws-sam-cli>=1.70.0' \ # 升级到支持PyYAML 6.x的版本 'boto3>=1.14.0' \ 'botocore>=1.18.63' \ 'awscli>=1.19.10' \ 'aws-lambda-builders>=1.2.0' \ 'cfn-lint>=0.47' \ 'docker-compose>=1.25.5' \ --no-cache-dir && \ apk --purge --no-cache del \ gcc \ python3-dev \ musl-dev \ libc-dev
验证
修改Dockerfile后重新构建,即可跳过PyYAML的源码编译步骤,完成依赖安装。
内容的提问来源于stack exchange,提问作者Shaktimaan
相关产品推荐
相关产品推荐

