Установка numpy на Docker Alpine

Я пытаюсь установить numpy в контейнере докеров на основе Alpine 3.1. Я использую следующий файл Docker:

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 дает ту же ошибку.

Есть ли какие-либо шаги конфигурации/установки, которые мне не хватает?

Ответ 1

Если вам не нужно устанавливать numpy из pypi, вы можете установить его из альпийских репозиториев. Пакет называется 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 [email protected]

Содержимое файла repositories

http://dl-cdn.alpinelinux.org/alpine/v3.2/main
@community http://dl-cdn.alpinelinux.org/alpine/edge/community

Ответ 2

У меня были небольшие проблемы с этим, и, короче говоря, я бы посоветовал вам спросить, действительно ли это стоит хлопот. Numpy огромен, когда вы начинаете добавлять в стек такие вещи, как pandas, gpus и scipy, поэтому выгода от его построения на alpine ограничена, а экономия по сравнению с использованием Debian, Arch или даже Ubuntu относительно невелика, когда 500 МБ вашего пространства включено. эта библиотека в любом случае.

Сказав это, я собрал образ, который это делает. Мне нужны были зависимости времени сборки: musl-dev, linux-headers и g++. Мне также пришлось добавить openblas from edge для чего-то более позднего в стеке, так что вполне возможно, что некоторые зависимости от этого также потребуются. Но я считаю, что просто добавив три бывшие библиотеки с помощью

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

должно быть достаточно, чтобы предотвратить возникновение ошибки gcc. Вы можете просмотреть изображение на https://hub.docker.com/r/o76923/alpine-numpy-stack/

Ответ 3

Попробуйте следующее:

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

Ответ 4

Этот размер составляет около 311 МБ, согласно моему docker images:

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

(Между тем python:3.6 сам по себе составляет ~ 900 МБ)

Вы пробовали НЕ с установленным gcc? Это может быть противоречивым? Точно сказать не могу. Этот работал для меня как минимальная установка и хотел поделиться.

Ответ 5

Пакет теперь доступен в репозитории 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