如何指定Python库版本解决Airflow Docker镜像构建耗时过长问题
问题1:RUN set -ex指令段触发google_cloud_os_login安装的原因
你执行的是带gcp扩展的apache-airflow安装命令pip install apache-airflow[gcp]==${AIRFLOW_VERSION},其中gcp扩展对应的依赖包为apache-airflow-providers-google,该包的官方依赖声明中直接包含google-cloud-os-login组件。
pip会自动拉取安装目标包的全量传递依赖,哪怕你没有显式声明该组件,也没有在这一步安装其他Google云相关依赖,也会触发该包的下载安装流程。近期google-cloud-os-login发布了多个新版本,传递依赖的版本匹配规则没有收紧的情况下,pip需要回溯的版本数量大幅增加,就出现了构建耗时从数分钟暴涨到1小时以上的问题。
问题2:指定版本加快镜像构建的方案
pip新版依赖解析器耗时过长的核心原因是缺少明确的版本约束,需要回溯所有历史版本匹配依赖规则,可通过以下两种方式解决:
- 在安装airflow的同一条指令中直接固定
google-cloud-os-login的版本,将原安装命令修改为:
解析器拿到明确的版本约束后会直接安装对应版本,不会进行全量版本回溯。pip install apache-airflow[gcp]==${AIRFLOW_VERSION} google-cloud-os-login==<目标版本号> - 提前准备依赖约束文件,将所有需要固定版本的依赖写入
constraints.txt,安装时添加-c参数调用约束文件:
该方案适合需要固定多个依赖版本的场景,可统一管理所有约束规则,避免后续新增依赖时再次出现解析耗时过长的问题。pip install apache-airflow[gcp]==${AIRFLOW_VERSION} -c constraints.txt
内容的提问来源于stack exchange,提问作者Canovice
相关产品推荐
相关产品推荐

