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?
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
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/
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
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.
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-packages
directory 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/lib
packages de sites localisés:
FROM python:3-Alpine
RUN apk add --update --no-cache py3-numpy
ENV PYTHONPATH=/usr/lib/python3.7/site-packages