Docker构建Python alpine3.7镜像报No module named 'versioneer'如何解决
问题原因
- 你当前Dockerfile中
RUN pip install versioneer被注释,构建时不会执行安装,编译numpy等包时找不到对应模块触发报错。 - 即便取消注释,alpine镜像默认没有安装源码编译科学计算包所需的系统依赖,仍然会出现安装失败的问题。
- 你当前的依赖安装顺序不合理,versioneer需要在numpy等依赖编译前完成安装,否则编译阶段仍然无法调用。
修复方案
方案1:继续使用alpine镜像
先安装系统构建依赖,再按顺序安装Python依赖,参考Dockerfile如下:
FROM <custom registry>/python:alpine3.7 # Copy local code to the container image. ENV APP_HOME app WORKDIR $APP_HOME COPY . . # 安装alpine下编译科学计算包所需的系统依赖 RUN apk add --no-cache gcc gfortran musl-dev g++ linux-headers # 先安装versioneer,再安装其他Python依赖 RUN pip install versioneer RUN pip install Flask google-auth google-cloud-storage numpy pandas sklearn ENV PORT 8080 CMD ["python", "app_hello.py"]
注:datetime是Python标准库,无需单独通过pip安装,单独安装可能触发第三方同名包冲突,可直接从依赖列表移除。
方案2:切换为debian系Python镜像(更推荐)
debian系镜像使用glibc,可以直接拉取PyPI上预编译的numpy、pandas等包的wheel文件,无需源码编译,构建速度更快、依赖问题更少,参考Dockerfile如下:
FROM <custom registry>/python:3.7-slim # Copy local code to the container image. ENV APP_HOME app WORKDIR $APP_HOME COPY . . RUN pip install versioneer RUN pip install Flask google-auth google-cloud-storage numpy pandas sklearn ENV PORT 8080 CMD ["python", "app_hello.py"]
内容的提问来源于stack exchange,提问作者Ayan Biswas
相关产品推荐
相关产品推荐

