armv7架构下构建含Miniconda3及谷歌云Python包的Docker镜像问题
问题解决方案
报错根因说明
你遇到的No module named 'google'报错本质是Python环境冲突:
基础镜像自带Python3.7,后续你通过Conda安装了Python3.6,默认调用的pip绑定的是全局Python3.7环境,谷歌相关包被安装到了3.7的依赖目录,Conda的3.6环境无法读取到对应包。另外你的业务脚本命名为bigquery.py,和官方模块重名,也会触发导入冲突。
问题1:armv7架构Miniconda3环境安装谷歌相关包方案
- 调用Conda环境内的pip安装依赖,避免包被安装到其他Python环境,可直接写pip的绝对路径
/root/miniconda3/bin/pip - 安装
google-crc32c时添加环境变量CRC32C_SW_MODE=auto,优先调用纯Python实现的逻辑,跳过C扩展编译环节,避免armv7架构下编译失败 - 将你的业务脚本
bigquery.py重命名为其他名称,避免和官方模块重名导致导入错误
修复后的Conda版本Dockerfile参考:
FROM python:3.7-buster WORKDIR /usr/src/app ENV PATH="/root/miniconda3/bin:${PATH}" ARG PATH="/root/miniconda3/bin:${PATH}" RUN wget http://repo.continuum.io/miniconda/Miniconda3-latest-Linux-armv7l.sh RUN mkdir /root/.conda RUN /bin/bash Miniconda3-latest-Linux-armv7l.sh -b RUN rm -f Miniconda3-latest-Linux-armv7l.sh RUN conda config --add channels rpi \ && conda install python=3.6 openblas blas numpy pandas scipy -y # 指定conda环境内的pip安装,开启纯Python实现crc32c RUN CRC32C_SW_MODE=auto /root/miniconda3/bin/pip install --upgrade pip \ && /root/miniconda3/bin/pip install "google-crc32c==1.1.2" google-cloud-bigquery # 业务脚本重命名为my_bigquery.py后再拷贝 COPY main_prog.py my_bigquery.py requirements.txt ./ CMD ["/root/miniconda3/bin/python", "main_prog.py"]
问题2:无需编译、不使用Miniconda3安装numpy、scipy、pandas方案
有两种成熟方案可选:
- 直接安装Debian官方预编译包
你用的基础镜像是Debian Buster,官方源已经提供了armv7架构预编译好的三个科学计算包,直接通过apt安装即可,无需编译,稳定性高:
RUN apt update && apt install -y --no-install-recommends python3-numpy python3-scipy python3-pandas && rm -rf /var/lib/apt/lists/*
- 使用armv7专属Python预编译源
专为树莓派/armv7维护的Python预编译包源,所有包都是已编译好的wheel格式,直接通过pip指定源安装即可,比默认源编译安装快10倍以上。
不用Miniconda3的完整Dockerfile参考:
FROM python:3.7-buster WORKDIR /usr/src/app # 安装预编译的科学计算包 RUN apt update && apt install -y --no-install-recommends \ python3-numpy \ python3-scipy \ python3-pandas \ && rm -rf /var/lib/apt/lists/* # 安装谷歌依赖 RUN pip install --upgrade pip \ && pip install --extra-index-url https://www.piwheels.org/simple \ "google-crc32c==1.1.2" google-cloud-bigquery COPY main_prog.py my_bigquery.py requirements.txt ./ CMD ["python", "main_prog.py"]
内容的提问来源于stack exchange,提问作者Ohaiomundo
相关产品推荐
相关产品推荐

