我试图在基于Alpine 3.1的docker容器中安装numpy。我使用以下Dockerfile:
return builder.parse(input);
当我收到以下错误时,此问题运行正常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
:
pip install numpy
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
会出现同样的错误。
我是否缺少任何配置/安装步骤?
答案 0 :(得分:23)
如果您不需要从numpy
安装pypi
,则可以从alpine存储库安装它。包名为py-numpy
,位于testing
存储库中,请参阅here。最适合我的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
答案 1 :(得分:22)
我自己一直遇到一些麻烦,长话短说,我会鼓励你问这是否真的值得麻烦。当你开始在堆栈中添加像pandas,gpus和scipy这样的东西时Numpy是巨大的,所以在高山上构建它的好处是有限的,当你的500GB空间开启时,使用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/
查看图片答案 2 :(得分: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
答案 3 :(得分:1)
Alpine存储库py3-numpy
中现在有一个软件包。尽管它无法正常工作。
实际上,py3-numpy
将库安装到/usr/lib/python3.7/site-packages
目录中,但是默认的Python模块路径不使用它:
$ docker run -it python:3-alpine sh
/ # apk add --update --no-cache py3-numpy
...
/ # python
>>> import numpy
>>> ... module not found ...
>>> import sys
>>> sys.path
['', '/usr/local/lib/python37.zip', '/usr/local/lib/python3.7', '/usr/local/lib/python3.7/lib-dynload', '/usr/local/lib/python3.7/site-packages']
我通过将$PYTHONPATH
环境变量设置为/usr/lib
个位于站点包中来解决此问题:
FROM python:3-alpine
RUN apk add --update --no-cache py3-numpy
ENV PYTHONPATH=/usr/lib/python3.7/site-packages
答案 4 :(得分:0)
根据我的MsgBox
,这大约是311MB:
magento2
(与此同时,docker images
本身约为900MB)
您是否尝试未安装gcc?可能会发生冲突?不确定。这个对我来说是最小的numpy安装,想与大家分享。
答案 5 :(得分:0)
具有优化功能,例如在构建后删除构建依赖关系并删除不需要的测试(它们在这里是因为我们正在构建模块,而不仅仅是安装它):
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。