我尝试在基于Alpine 3.1的Docker容器中安装numpy。我使用以下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
字符串
这一直运行良好,直到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
型easy_install-2.7 numpy
给出相同的错误。
我是否遗漏了任何配置/安装步骤?
9条答案
按热度按时间kulphzqa1#
我自己在这方面也遇到了一些麻烦,长话短说,我鼓励你问问这是否真的值得。Numpy是巨大的,当你开始添加东西到堆栈像Pandas,gpus和scipy,所以在alpine上构建它的好处是有限的,使用Debian,Arch甚至Ubuntu的节省是相对温和的,当500 MB的空间在这个库上时。
话虽如此,我把它放在一起的图像。我需要musl-dev、linux-headers和g++作为构建时依赖项。我还需要从edge添加openblas,以便在堆栈中稍后添加,因此可能也需要一些依赖项。但我相信只要加上三个以前的图书馆
字符串
应该足以防止你得到的gcc错误。您可以在https://hub.docker.com/r/o76923/alpine-numpy-stack/上查看图像
hzbexzde2#
如果你不需要从
pypi
安装numpy
,你可以从alpine仓库安装它。包名为py-numpy
,位于testing
存储库中,请参阅here。适用于我的最小Dockerfile
示例字符串
repositories
文件的内容型
gev0vcfq3#
Alpine存储库中现在提供了一个包:
py3-numpy
。但是你不能马上使用它。py3-numpy
将库安装到/usr/lib/python3.8/site-packages
目录中,但默认Python模块路径不使用它:字符串
这可以通过将
$PYTHONPATH
环境变量设置为/usr/lib
中site-packages
的路径来修复:型
uttx8gqw4#
根据我的
docker images
,这个大约是311MB:字符串
(同时
python:3.6
本身约为900MB)你有没有试过不安装gcc?可能会有冲突?不确定。这一个对我来说是一个最小的numpy安装,并希望分享。
ndh0cuux5#
Alpine是用musl构建的,它与python轮子不兼容。这意味着所有依赖项都应该通过apk安装,或者应该手动编译。为了更流畅地体验python pypi依赖项,使用debian,裁剪到最小大小(python:slim)作为起点看起来更理想:
字符串
123Mb
这种方法比公认的答案简单得多,所得图像比其他答案更紧凑。
kx7yvsdv6#
试试这个:
字符串
y1aodyip7#
通过优化,例如在构建后删除构建依赖项和删除不需要的测试(它们在这里是因为我们正在构建模块,而不仅仅是安装它):
字符串
结果大小约为157MB。
l3zydbqr8#
标准PyPI轮在Alpine上不工作
标准C库,几乎每个C程序都需要它,
包括Python。但是Alpine Linux使用musl,那些二进制wheel是针对glibc编译的,因此Alpine禁用了Linux wheel
支持。
大大加快了安装时间。但是如果你使用的是Alpine Linux,你需要编译每个Python包中的所有C代码。
得双曲余切值.
运行apk --update add gcc libc-dev libffi-dev build-base freetype-dev libpng-dev openblas-dev
但是Alpine构建速度较慢,图像更大。
python:slim
而不是python:alpine
,因为不值得麻烦 *x6h2sr289#
只需使用预安装了numpy的docker镜像:https://hub.docker.com/r/adreeve/python-numpy/