Alpine 3.1に基づいたDockerコンテナにnumpyをインストールしようとしています。次のDockerfileを使用しています。
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
は同じエラーを返します。
不足している設定/インストール手順はありますか?
numpy
からpypi
をインストールする必要がない場合は、Alpineリポジトリからインストールできます。パッケージの名前はpy-numpy
であり、testing
リポジトリにあります。 here を参照してください。私のために働く最小限のDockerfile
の例
FROM Alpine:3.2
ADD repositories /etc/apk/repositories
RUN apk add --update python python-dev gfortran py-pip build-base py-numpy@community
repositories
ファイルの内容
http://dl-cdn.alpinelinux.org/Alpine/v3.2/main
@community http://dl-cdn.alpinelinux.org/Alpine/Edge/community
私はこれについて少し苦労していますが、簡単に言えば、本当に面倒な価値があるかどうか尋ねることをお勧めします。 Numpyは、pandas、gpus、scipyなどのスタックにアイテムを追加し始めると非常に大きくなるため、Alpineでビルドする利点は限られています。とにかくこのライブラリ。
それが言われたので、私はそれをするイメージを一緒に投げました。ビルド時の依存関係として、musl-dev、linux-headers、およびg ++が必要でした。また、スタックの後半でEdgeからopenblasを追加する必要があるため、そこからの依存関係も必要になる可能性があります。しかし、私はちょうど3つの元のライブラリを追加すると信じています
apk --no-cache add musl-dev linux-headers g++
取得しているgccエラーを防ぐのに十分なはずです。 https://hub.docker.com/r/o76923/Alpine-numpy-stack/ で画像を表示できます
これを試して:
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
私のdocker images
によると、これは約311MBです。
FROM python:3.6-Alpine
RUN apk add g++
RUN pip install numpy
(その間python:3.6
は単独で約900MBです)
Gccをインストールしないでみましたか?競合する可能性がありますか?わからない。これは最小のnumpyインストールとして私のために働いて、共有したかったです。
パッケージがAlpineリポジトリで利用可能になりました:py3-numpy
。のように機能していませんでしたが.
実際、py3-numpy
はライブラリを/usr/lib/python3.7/site-packages
directoryにインストールしますが、デフォルト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
locatedサイトパッケージに設定することで問題を修正しました。
FROM python:3-Alpine
RUN apk add --update --no-cache py3-numpy
ENV PYTHONPATH=/usr/lib/python3.7/site-packages