【问题标题】:Problem building docker with numpy and pandas over arm64在 arm64 上使用 numpy 和 pandas 构建 docker 时出现问题
【发布时间】:2019-04-28 14:35:48
【问题描述】:

我正在尝试在我的 ARM64 rasperry pi 中使用 docker-compose 构建一个 docker 映像,但这似乎是不可能的。

这是我的 dockerfile:

FROM python:3.6-slim

RUN apt-get update && apt-get -y install python3-dev 

RUN apt-get -y install python3-numpy
RUN apt-get -y install python3-pandas

ENTRYPOINT ["python3", "app.py"]

好像没问题,但是app.py运行的时候报错:“Module numpy not found”,pandas模块也是这样。

如果我尝试使用 pip 安装 numpy 和 pandas:

RUN pip install numpy pandas

它给了我一个错误,或者更常见的是,覆盆子只是被冻结了,我必须拔掉它才能恢复。

我已经尝试使用不同版本的 python 作为源图像,还使用了几个 ubuntu 图像并安装了 python。

知道如何在 docker 中为我的树莓派 (ARM64) 安装 numpy 和 pandas 吗?

谢谢

【问题讨论】:

  • dpkg -L python3-numpy 查看 numpy 是否在您的 python3 路径中。
  • 这是一个复杂的环境。机器人当然,尝试添加命令RUN pip3 install -U numpy
  • 你确定你的树莓派是 ARM64 的吗?使用 Raspbian 作为 32 位操作系统的 Raspberry Pi 非常典型。无论如何,这不是重点。 pip install 对我有用,但预计至少要等待半小时(即使是 Raspberry Pi 3!),我不确定添加 pandas 是否会将其增加到多个小时。如果您使用足够好的电源并给予足够的时间,pip 应该最终会结束。
  • 是的,我确定。我在 Raspberry 上使用 64 位操作系统。无论如何,使用 pip 安装 pandas 和 numpy 需要很长时间,以至于大多数时候树莓都会死掉。我会用我找到的解决方案来回答我自己的问题。

标签: python pandas numpy docker arm64


【解决方案1】:

问题似乎出在 python 版本上。我使用的是 python3.6 docker 映像,但是 python3-numpy 和 python3-pandas 包都需要 python3.5,因此当安装这些包时,还会安装新版本的 python。这就是为什么当我尝试导入这些模块时,python 解释器找不到它们,因为它们是为另一个 python 版本安装的。

最后我使用通用 docker debian 映像解决了这个问题,并自己安装了 python3.5 而不是使用 python docker 映像。

FROM debian:stretch-slim

RUN apt-get update && apt-get -y dist-upgrade
RUN apt-get -y install build-essential libssl-dev libffi-dev python3.5 libblas3 libc6 liblapack3 gcc python3-dev python3-pip cython3
RUN apt-get -y install python3-numpy python3-sklearn
RUN apt-get -y install python3-pandas

COPY requirements.txt /tmp/

RUN pip3 install -r /tmp/requirements.txt

【讨论】:

    【解决方案2】:

    (免责声明:Raspberry Pi 3 B+ 可能太慢,无法安装像 numpy 这样的大型依赖项)

    这个 Dockerfile 在 Raspberry Pi 3 B+ 上为我工作,软件版本:Linux raspberrypi 5.10.63-v7+(考虑更新它)

    FROM python:3.9-buster
    
    WORKDIR /
    
    COPY requirements.txt requirements.txt
    RUN pip3 install -r requirements.txt
    

    我不确定,但我认为它也有助于清理 docker,即使用以下命令删除所有图像和容器:

    警告:此命令会删除所有图像和容器!

    $ docker container prune
    $ docker image prune -a
    

    或者完全重置 Docker(同时删除卷和网络):

    $ docker system prune --volumes
    

    【讨论】:

      【解决方案3】:

      我建议创建requirements.txt 文件。 在里面你可以声明要安装的包。

      `Dockerfile':

      FROM python
      
      COPY app.py /workdir/
      COPY requirements.txt /workdir/
      
      WORKDIR /workdir
      
      RUN pip install --trusted-host pypi.python.org -r requirements.txt
      
      CMD python app.py
      

      编辑

      我创建 Dockerfile 导入 pandas lib 然后检查它是否工作:

      cat Dockerfile 
      FROM python
      
      COPY app.py /workdir/
      
      WORKDIR /workdir
      
      RUN python -m pip install pandas
      
      CMD python app.py
      

      【讨论】:

      • 事实上,在我实际的 dockerfile 中,我使用的是 requirements.txt 文件。为了清楚起见,我没有在问题中使用它。无论如何,它不会改变任何东西。 “Pip install”(是否使用需求文件)不起作用。
      猜你喜欢
      • 2013-08-31
      • 2019-11-01
      • 2020-08-01
      • 2021-05-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多