Kev*_*ith 5 numpy docker docker-compose
我正在尝试在 docker 容器中安装一个 numpy 依赖项。(我的代码大量使用它)。在构建容器时,numpy 库根本不会安装并且构建失败。这是在操作系统 raspbian-buster/stretch 上。然而,这在 MAC OS 上构建容器时确实有效。
我怀疑某种与 python 相关的问题,但我一生都无法弄清楚如何使它工作。
我应该指出,从需求文件中删除 pip install numpy 并在 dockerfile 中它自己的 RUN 语句中使用它并不能解决问题。
Dockerfile:
FROM python:3.6
ENV PYTHONUNBUFFERED 1
ENV APP /app
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
RUN mkdir $APP
WORKDIR $APP
ADD requirements.txt .
RUN pip install -r requirements.txt
COPY . .
Run Code Online (Sandbox Code Playgroud)
requirements.txt 包含所有项目需求,即 numpy 的 amounf。
Step 6/15 : RUN pip install numpy==1.14.3
---> Running in 266a2132b078
Collecting numpy==1.14.3
Downloading https://files.pythonhosted.org/packages/b0/2b/497c2bb7c660b2606d4a96e2035e92554429e139c6c71cdff67af66b58d2/numpy-1.14.3.zip (4.9MB)
Building wheels for collected packages: numpy
Building wheel for numpy (setup.py): started
Building wheel for numpy (setup.py): still running...
Building wheel for numpy (setup.py): still running...
Run Code Online (Sandbox Code Playgroud)
编辑:
因此,在skybunk发表评论并建议前往官方文档后,我进行了更多调试,最终解决方案非常简单。感谢skybunk带给你所有的荣耀。好极了。
解决方案:
使用 alpine 并安装 python 安装包依赖项,在做 pip install 要求之前升级 pip。
这是我编辑的 Dockerfile - 显然工作......
FROM python:3.6-alpine3.7
RUN apk add --no-cache --update \
python3 python3-dev gcc \
gfortran musl-dev \
libffi-dev openssl-dev
RUN pip install --upgrade pip
ENV PYTHONUNBUFFERED 1
ENV APP /app
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
RUN mkdir $APP
WORKDIR $APP
ADD requirements.txt .
RUN pip install -r requirements.txt
COPY . .
Run Code Online (Sandbox Code Playgroud)
要在 python3 上使用 Numpy,我们首先查看官方文档以查找构建 Numpy 所需的依赖项。
主要需要安装这5个包及其依赖项:
POC 设置看起来像这样 -
Dockerfile:
FROM gliderlabs/alpine
ADD repositories.txt /etc/apk/repositories
RUN apk add --no-cache --update \
python3 python3-dev gcc \
gfortran musl-dev
ADD requirements-pip.txt .
RUN pip3 install --upgrade pip setuptools && \
pip3 install -r requirements-pip.txt
ADD . /app
WORKDIR /app
ENV PYTHONPATH=/app/
ENTRYPOINT python3 testscript.py
Run Code Online (Sandbox Code Playgroud)
存储库.txt
http://dl-5.alpinelinux.org/alpine/v3.4/main
Run Code Online (Sandbox Code Playgroud)
要求-pip.txt
numpy
Run Code Online (Sandbox Code Playgroud)
测试脚本.py
import numpy as np
def random_array(a, b):
return np.random.random((a, b))
a = random_array(2,2)
b = random_array(2,2)
print(np.dot(a,b))
Run Code Online (Sandbox Code Playgroud)
要运行此 - 克隆alpine,请使用“docker build -t gliderlabs/alpine”构建它。
构建并运行您的 Dockerfile
docker build -t minidocker .
docker run minidocker
Run Code Online (Sandbox Code Playgroud)
输出应该是这样的 -
[[ 0.03573961 0.45351115]
[ 0.28302967 0.62914049]]
Run Code Online (Sandbox Code Playgroud)
如果你想测试一下,这是git 链接