使用 python 3 和 numpy、scipy、pillow 和 matplotlib 在 Raspberry Pi 3B+ 上构建 docker 映像失败
Posted
技术标签:
【中文标题】使用 python 3 和 numpy、scipy、pillow 和 matplotlib 在 Raspberry Pi 3B+ 上构建 docker 映像失败【英文标题】:Building docker image on Raspberry Pi 3B+ with python 3 and numpy, scipy, pillow and matplotlib fails 【发布时间】:2022-01-21 06:34:05 【问题描述】:我有一个运行 Raspbian Buster 的 Raspberry Pi 3B+。我正在运行一个使用 tensorflow-lite 运行时和其他模块(如枕头、numpy 和 matplotlib)的深度学习应用程序。我一直在尝试构建一个 docker 容器来分发应用程序。我发现使用所需的库从 Dockerfile 构建映像非常具有挑战性,并且在周末尝试不同的基础映像并研究该问题后几乎没有进展。
这里是 Dockerfile 的内容:
FROM python:3.7
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . /app
## There is more after this
## to install tensorflow-lite runtime
## from copied-over .whl file.
## I have it left out
## as I have yet to progress beyond this point.
我得到:ERROR: No matching distribution found for numpy==1.16.2
这是我的需求清单:
numpy==1.16.2
paho-mqtt==1.5.1
picamera==1.13
Pillow==5.4.1
scipy==1.1.0
matplotlib==3.0.2
我从pip freeze > requirements.txt
获得了这些特定版本,位于应用程序正在运行的 Pi 上。
我尝试过的:
-
使用来自 docker hub 的不同基础镜像,包括一个来自 balena 的 armv7 与我的 Pi 上的设置相匹配(即带有 Python 3.7.4 的 Rasbian Buster)。
提取包含 numpy 的 docker 映像 (
docker pull ellerbach/tensor_pillow_flask
) 并尝试将其用作基础映像。
使用不同的 Raspberry Pi 3。
仍然没有进展。感谢你的帮助。错误信息全文为:
Step 4/5 : RUN pip install -r requirements.txt
---> Running in 6bee0e112272
Collecting numpy==1.16.2
Downloading numpy-1.16.2.zip (5.1 MB)
[91m ERROR: Command errored out with exit status 1:
command: /usr/local/bin/python -c 'import io, os, sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-o8ypxup1/numpy_0ed49f4dc38649d790838c7f052a364a/setup.py'"'"'; __file__='"'"'/tmp/pip-install-o8ypxup1/numpy_0ed49f4dc38649d790838c7f052a364a/setup.py'"'"';f = getattr(tokenize, '"'"'open'"'"', open)(__file__) if os.path.exists(__file__) else io.StringIO('"'"'from setuptools import setup; setup()'"'"');code = f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' egg_info --egg-base /tmp/pip-pip-egg-info-tax52vej
cwd: /tmp/pip-install-o8ypxup1/numpy_0ed49f4dc38649d790838c7f052a364a/
Complete output (4 lines):
running egg_info
creating /tmp/pip-pip-egg-info-tax52vej/numpy.egg-info
Running from numpy source directory.
error: [Errno 1] Operation not permitted
----------------------------------------
[0m[91mWARNING: Discarding https://files.pythonhosted.org/packages/cf/8d/6345b4f32b37945fedc1e027e83970005fc9c699068d2f566b82826515f2/numpy-1.16.2.zip#sha256=6c692e3879dde0b67a9dc78f9bfb6f61c666b4562fd8619632d7043fb5b691b0 (from https://pypi.org/simple/numpy/) (requires-python:>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*). Command errored out with exit status 1: python setup.py egg_info Check the logs for full command output.
[0m[91mERROR: Could not find a version that satisfies the requirement numpy==1.16.2 (from versions: 1.3.0, 1.4.1, 1.5.0, 1.5.1, 1.6.0, 1.6.1, 1.6.2, 1.7.0, 1.7.1, 1.7.2, 1.8.0, 1.8.1, 1.8.2, 1.9.0, 1.9.1, 1.9.2, 1.9.3, 1.10.0.post2, 1.10.1, 1.10.2, 1.10.4, 1.11.0, 1.11.1, 1.11.2, 1.11.3, 1.12.0, 1.12.1, 1.13.0rc1, 1.13.0rc2, 1.13.0, 1.13.1, 1.13.3, 1.14.0rc1, 1.14.0, 1.14.1, 1.14.2, 1.14.3, 1.14.4, 1.14.5, 1.14.6, 1.15.0rc1, 1.15.0rc2, 1.15.0, 1.15.1, 1.15.2, 1.15.3, 1.15.4, 1.16.0rc1, 1.16.0rc2, 1.16.0, 1.16.1, 1.16.2, 1.16.3, 1.16.4, 1.16.5, 1.16.6, 1.17.0rc1, 1.17.0rc2, 1.17.0, 1.17.1, 1.17.2, 1.17.3, 1.17.4, 1.17.5, 1.18.0rc1, 1.18.0, 1.18.1, 1.18.2, 1.18.3, 1.18.4, 1.18.5, 1.19.0rc1, 1.19.0rc2, 1.19.0, 1.19.1, 1.19.2, 1.19.3, 1.19.4, 1.19.5, 1.20.0rc1, 1.20.0rc2, 1.20.0, 1.20.1, 1.20.2, 1.20.3, 1.21.0rc1, 1.21.0rc2, 1.21.0, 1.21.1, 1.21.2, 1.21.3, 1.21.4)
[0m[91mERROR: No matching distribution found for numpy==1.16.2
[0m[91mWARNING: You are using pip version 21.2.4; however, version 21.3.1 is available.
You should consider upgrading via the '/usr/local/bin/python -m pip install --upgrade pip' command.
[0m
【问题讨论】:
你能从你的 RPI 中 curl pypi.org/project/numpy 吗? @richardec 你的意思是这样的:curl https://pypi.org/project/numpy
?这会在 pi 上以及带有 docker exec
的 docker 容器内部拉出一个 html 页面。希望我正确理解了您的建议。
你做到了。我只是想确保 RPI 可以连接到 PyPI。
能否将pip
的完整输出粘贴到问题中?
@richardec 你的意思是 Dockerfile 中的FROM python
吗? tensorflow-lite 运行时仅适用于少数版本的 Python,例如 3.7。当然,我会尝试发布更新。谢谢你的建议。
【参考方案1】:
通过使用不同基础图像的反复试验过程来解决这个问题,直到我找到一个可行的。这完成了工作:
FROM arm32v7/python:3.7.10-buster
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . /app
需求清单有:
numpy==1.16.2
paho-mqtt==1.5.1
picamera==1.13
Pillow==5.4.1
scipy==1.1.0
matplotlib==3.0.2
为了安装 tensorflow-lite 运行时,我在 docker 容器中使用了 pip 安装程序以及来自 Google 的“.whl”文件的本地副本。我将此文件包含在根据 Dockerfile 复制的 app 文件夹中。现在我有了一个满足所有先决条件的 docker 容器。
感谢您的宝贵时间和建议。
【讨论】:
克星!实际上,根据我看到的帖子,我打算建议 buster...以上是关于使用 python 3 和 numpy、scipy、pillow 和 matplotlib 在 Raspberry Pi 3B+ 上构建 docker 映像失败的主要内容,如果未能解决你的问题,请参考以下文章
Ubuntu16.04使用pip3和pip安装numpy,scipy,matplotlib