web-dev-qa-db-fra.com

Installer numpy sur Docker Alpine

J'essaie d'installer numpy dans un conteneur docker basé sur Alpine 3.1. J'utilise le Dockerfile suivant:

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

Cela fonctionne bien jusqu'à ce que pip install numpy lorsque j'obtiens l'erreur suivante:

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 donne la même erreur.

Y a-t-il des étapes de configuration/d'installation qui me manquent?

21
TDN169

Si vous n'avez pas besoin d'installer numpy depuis pypi, vous pouvez l'installer à partir des référentiels Alpine. Le package est nommé py-numpy et se trouve dans le référentiel testing, voir ici . Minimal Dockerfile exemple qui fonctionne pour moi

FROM Alpine:3.2
ADD repositories /etc/apk/repositories
RUN apk add --update python python-dev gfortran py-pip build-base py-numpy@community

Contenu du fichier repositories

http://dl-cdn.alpinelinux.org/Alpine/v3.2/main
@community http://dl-cdn.alpinelinux.org/Alpine/Edge/community
25
ziky

J'ai eu un peu de mal avec cela moi-même et, pour faire court, je vous encourage à demander si cela en vaut vraiment la peine. Numpy est énorme lorsque vous commencez à ajouter des éléments à la pile comme des pandas, des gpus et des scipy, donc les avantages de le construire sur Alpine sont limités, les économies sur l'utilisation de Debian, Arch ou même Ubuntu sont relativement modestes lorsque 500 Mo de votre espace sont allumés. cette bibliothèque de toute façon.

Cela dit, j'ai jeté une image qui le fait. J'avais besoin comme dépendances au moment de la construction musl-dev, linux-headers et g ++. J'ai également fini par avoir besoin d'ajouter des openblas d'Edge pour quelque chose plus tard dans la pile, il est donc possible que certaines dépendances de cela soient également requises. Mais je pense que l'ajout des trois anciennes bibliothèques avec

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

devrait être suffisant pour éviter l'erreur gcc que vous obtenez. Vous pouvez voir l'image sur https://hub.docker.com/r/o76923/Alpine-numpy-stack/

25
James Endicott

Essaye ça:

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
1
Gil Margolin

Celui-ci fait environ 311 Mo selon mon docker images:

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

(Pendant ce temps python:3.6 est ~ 900 Mo seul)

Avez-vous essayé de ne PAS installer gcc? Cela pourrait être contradictoire? Pas certain. Celui-ci a fonctionné pour moi en tant qu'installation numpy minimale et voulait partager.

0
Multihunter

Un package est désormais disponible dans le référentiel Alpine: py3-numpy. Bien que cela ne fonctionnait pas comme dans.

Effectivement, py3-numpy installe les bibliothèques dans /usr/lib/python3.7/site-packagesdirectory mais par défaut Python ne l'utilise pas:

$ 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']

J'ai résolu le problème par les paramètres $PYTHONPATH variable d'environnement à /usr/libpackages de sites localisés:

FROM python:3-Alpine

RUN apk add --update --no-cache py3-numpy
ENV PYTHONPATH=/usr/lib/python3.7/site-packages
0
Faylixe