在Docker Alpine上安装seaborn

11

我正在尝试使用这个Dockerfile安装seaborn

FROM alpine:latest

RUN apk add --update python py-pip python-dev 

RUN pip install seaborn

CMD python
我遇到的错误与 numpyscipy(由seaborn所需)有关。 它以以下内容开头:

/tmp/easy_install-nvj61E/numpy-1.11.1/setup.py:327: UserWarning: Unrecognized setuptools command, proceeding with generating Cython sources and expanding templates

以以下内容结尾:

File "numpy/core/setup.py", line 654, in get_mathlib_info

RuntimeError: Broken toolchain: cannot link a simple C program

Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-build-DZ4cXr/scipy/

The command '/bin/sh -c pip install seaborn' returned a non-zero code: 1

你有任何想法如何解决这个问题吗?

1个回答

24

要解决这个错误,您需要安装gccapk add gcc

但是,由于numpy、matplotlip和scipy有几个依赖项,您将会遇到新的错误。您还需要安装gfortranmusl-devfreetype-dev等。

这是一个基于您最初的Dockerfile的文件,它将安装这些依赖项以及seaborn

FROM alpine:latest

# install dependencies
# the lapack package is only in the community repository
RUN echo "http://dl-4.alpinelinux.org/alpine/edge/community" >> /etc/apk/repositories
RUN apk --update add --no-cache \ 
    lapack-dev \ 
    gcc \
    freetype-dev

RUN apk add python py-pip python-dev 

# Install dependencies
RUN apk add --no-cache --virtual .build-deps \
    gfortran \
    musl-dev \
    g++
RUN ln -s /usr/include/locale.h /usr/include/xlocale.h

RUN pip install seaborn

# removing dependencies
RUN apk del .build-deps

CMD python
你会注意到我使用apk-del .build-deps来移除依赖项以限制镜像的大小(http://www.sandtable.com/reduce-docker-image-sizes-using-alpine/)。
个人经验是我还需要安装ca-certificates,但似乎你没有遇到这个问题。
注意:你也可以从 python:2.7-alpine 镜像构建你的镜像,以避免自己安装Python和pip。

太棒了,这起作用了。构建容器花了很长时间,但最终完成了(重量为693.3 MB)。感谢您提供出色的答案(解决了我的问题,也教会了我一些关于Docker最佳实践的知识)。 - e h
1
@emh 不客气,我也必须构建包含scipy的映像,我确认从头开始构建需要很长时间。保持它们小也很难。至少它们比基于Ubuntu的映像要小! - Céline Aussourd
我在测试存储库中找不到 lapack-dev(使用 python:alpine docker 镜像别名代替 python:3.6-alpine),因此我需要使用 http://dl-4.alpinelinux.org/alpine/latest-stable/community 来获取 lapack-dev 包。 - Shadi
@shadi 你说得对,这个包已经移动到社区仓库了,我会更新答案。 - Céline Aussourd
最近numpy被更新了,编译失败了。如此处所述,您可以执行pip install numpy==1.14.3,但是请注意,如果您开始安装pandas,它将再次尝试带来最新版本的numpy - Bulat

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接