44

I'm trying to install numpy in a docker container based on Alpine 3.1. I'm using the following Dockerfile:

FROM alpine:3.1
RUN apk add --update make cmake gcc g++ gfortran
RUN apk add --update python py-pip python-dev
RUN pip install cython
RUN pip install numpy

This runs fine until pip install numpy when I get the following error:

error: Command "gcc -fno-strict-aliasing -Os -fomit-frame-pointer -DNDEBUG -Os -fomit-frame-pointer -fPIC -Inumpy/core/include -Ibuild/src.linux-x86_64-2.7/numpy/core/include/numpy -Inumpy/core/src/private -Inumpy/core/src -Inumpy/core -Inumpy/core/src/npymath -Inumpy/core/src/multiarray -Inumpy/core/src/umath -Inumpy/core/src/npysort -I/usr/include/python2.7 -Ibuild/src.linux-x86_64-2.7/numpy/core/src/private -Ibuild/src.linux-x86_64-2.7/numpy/core/src/private -Ibuild/src.linux-x86_64-2.7/numpy/core/src/private -c build/src.linux-x86_64-2.7/numpy/core/src/npymath/ieee754.c -o build/temp.linux-x86_64-2.7/build/src.linux-x86_64-2.7/numpy/core/src/npymath/ieee754.o" failed with exit status 1

easy_install-2.7 numpy gives the same error.

Are there any config/installation steps I'm missing?

4

8 回答 8

42

我自己在这方面遇到了一些麻烦,长话短说,我鼓励你问问这是否真的值得麻烦。当您开始向堆栈中添加诸如 pandas、gpus 和 scipy 之类的东西时,Numpy 是巨大的,因此在 alpine 上构建它的好处是有限的,当您的空间为 500MB 时,使用 Debian、Arch 甚至 Ubuntu 所节省的费用相对较少无论如何,这个图书馆。

话虽如此,我拼凑了一张可以做到这一点的图像。我需要作为构建时依赖项 musl-dev、linux-headers 和 g++。我还需要从边缘添加 openblas 以在堆栈中稍后添加某些内容,因此可能也需要其中的一些依赖项。但我相信只需添加三个以前的库

apk --no-cache add musl-dev linux-headers g++

应该足以防止您遇到的 gcc 错误。您可以在https://hub.docker.com/r/o76923/alpine-numpy-stack/查看图像

于 2016-11-03T16:50:14.423 回答
39

如果您不需要numpy从安装pypi,您可以从 alpine 存储库安装它。包已命名py-numpy并位于testing存储库中,请参见此处Dockerfile对我有用的最小示例

FROM alpine:3.2
ADD repositories /etc/apk/repositories
RUN apk add --update python python-dev gfortran py-pip build-base py-numpy@community

repositories文件内容

http://dl-cdn.alpinelinux.org/alpine/v3.2/main
@community http://dl-cdn.alpinelinux.org/alpine/edge/community
于 2015-10-29T21:14:11.570 回答
14

Alpine 存储库中现在提供了一个包:py3-numpy. 但是您将无法立即使用它。

py3-numpy将库安装到/usr/lib/python3.8/site-packages目录中,但默认 Python 模块路径不使用它:

$ docker run -it python:3.8-alpine sh
/ # apk add --update --no-cache py3-numpy
/ # python
>>> import numpy
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'numpy'
>>> import sys
>>> sys.path
['', '/usr/local/lib/python38.zip', '/usr/local/lib/python3.8', '/usr/local/lib/python3.8/lib-dynload', '/usr/local/lib/python3.8/site-packages']

这可以通过将环境变量设置为in$PYTHONPATH的路径来解决:site-packages/usr/lib

FROM python:3.8-alpine

RUN apk add --update --no-cache py3-numpy
ENV PYTHONPATH=/usr/lib/python3.8/site-packages
于 2019-08-13T21:50:03.623 回答
5

根据我的说法,这个大约是 311MB docker images

FROM python:3.6-alpine
RUN apk add g++ 
RUN pip install numpy

(同时python:3.6本身是~900MB)

您是否尝试过不安装 gcc?可能是矛盾的?没有把握。这对我来说是一个最小的 numpy 安装,并想分享。

于 2019-03-22T07:07:03.583 回答
1

通过优化,例如在构建后删除构建依赖项和删除不需要的测试(它们在这里是因为我们正在构建模块,而不仅仅是安装它):

FROM frolvlad/alpine-python3

RUN apk add --no-cache \
        --virtual=.build-dependencies \
        g++ file binutils \
        musl-dev python3-dev cython && \
    apk add libstdc++ openblas && \
    ln -s locale.h /usr/include/xlocale.h && \
    pip install numpy && \
    rm -r /root/.cache && \
    find /usr/lib/python3.*/ -name 'tests' -exec rm -r '{}' + && \
    find /usr/lib/python3.*/site-packages/ -name '*.so' -print -exec sh -c 'file "{}" | grep -q "not stripped" && strip -s "{}"' \; && \
    rm /usr/include/xlocale.h && \
    apk del .build-dependencies

结果大小~157MB。

于 2020-01-12T13:49:48.800 回答
1

尝试这个:

RUN apk --no-cache --update-cache add gcc gfortran python python-dev py-pip build-base wget freetype-dev libpng-dev openblas-dev
RUN ln -s /usr/include/locale.h /usr/include/xlocale.h
RUN pip install pandas
于 2018-01-18T17:40:38.117 回答
1

Alpine 是用 musl 构建的,与 python 轮子不兼容。这意味着要么所有依赖项都应该通过 apk 安装,要么应该手动编译。对于 python pypi 依赖项的更流畅体验,使用 debian 看起来更优化,裁剪到最小大小 (python:slim) 作为起点:

FROM python:slim
CMD pip install numpy

123MB

这种方法比接受的答案简单得多,并且生成的图像比其他答案更紧凑。

于 2022-02-01T14:58:13.027 回答
0

只需使用预装了 numpy 的 docker 映像:https ://hub.docker.com/r/adreeve/python-numpy/

于 2021-09-06T21:18:30.147 回答