Установка 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