如何让pip-compile基于Docker预装TensorFlow版本匹配相关依赖版本
问题原因
默认pip-compile不会将镜像中已经预装的TensorFlow版本作为依赖约束,会默认拉取所有生态包的最新稳定版,不同生态包的最新版对TensorFlow的版本要求出现了互斥:你报错中tensorflow-serving-api==2.7.0要求TensorFlow >=2.7.0,而同期最新的tensorflow-transform==1.3.0要求TensorFlow <2.7,因此出现版本冲突。
解决方案
无需修改requirements.in,仅需要调整Dockerfile中的构建逻辑,动态将已预装的TensorFlow版本作为硬约束传给pip-compile即可:
修改你的Dockerfile的RUN指令为以下内容:
RUN python -m pip install pip-tools && \ # 动态生成TensorFlow版本约束文件 python -c "import tensorflow; print(f'tensorflow=={tensorflow.__version__}')" > /tmp/tf_constraint.txt && \ # 编译依赖时传入约束,强制匹配已安装的TensorFlow版本 pip-compile requirements.in --constraint /tmp/tf_constraint.txt && \ python -m pip install -r requirements.txt
原理解释
--constraint是pip-tools原生支持的约束参数,会强制要求所有依赖的版本都满足约束文件内的规则,不会修改约束文件中指定的包版本- 动态生成约束文件的逻辑直接读取镜像里已经安装的TensorFlow版本,完全适配你传入的
TF_VERSION构建参数,不需要手动维护任何版本号
修改后无论你传入什么版本的TF_VERSION作为构建参数,pip-compile都会自动查找对应兼容的TensorFlow生态包版本,不会再出现版本冲突问题。
内容的提问来源于stack exchange,提问作者BioGeek
相关产品推荐
相关产品推荐

