构建arm64架构的docker时出现numpy和pandas问题

4
我可以帮助您翻译这段内容。如下:

我正试图在我的 ARM64 树莓派上使用 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时会出现错误:"找不到numpy模块",pandas模块也是同样的错误。

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

RUN pip install numpy pandas

我遇到了错误,或者更普遍的情况是树莓派会卡死,需要拔插电源来恢复。

我尝试使用不同版本的Python和几个Ubuntu映像,并安装Python,但问题仍然存在。

有什么方法可以在ARM64的树莓派上通过Docker安装NumPy和Pandas吗?

谢谢。


运行命令 dpkg -L python3-numpy 查看 numpy 是否在你的 python3 路径中。 - atline
这是一个复杂的环境。不确定的话,尝试添加命令 RUN pip3 install -U numpy - Charles Xu
你确定你的树莓派是ARM64架构吗?对于使用Raspbian的树莓派来说,32位操作系统是相当典型的。无论如何,这并不是重点。pip install 对我来说可以工作,但是需要等待至少半个小时(即使是树莓派3!),而且我不确定添加pandas是否会将等待时间增加到数小时。如果你使用足够好的电源供应器并给予足够的时间,pip 最终应该会结束。 - MariusSiuram
是的,我确定。我在树莓派上使用64位操作系统。无论如何,使用pip安装pandas和numpy需要很长时间,大多数情况下树莓派都会死机。我将用我找到的解决方案回答自己的问题。 - Jesus Benavent
3个回答

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

0

(免责声明: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

-2

我建议创建一个 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库,然后检查它是否正常工作:

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”(使用要求文件或不使用)都不起作用。 - Jesus Benavent

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接