Dockerでpython3+OpenCVの環境を整えてみる
Macbook air を購入したので、お試しがてらDockerでOpenCVの開発環境を整えてみようとしたらハマったので、その対処などをメモしておきます。
目次
やりたいこと
Dockerコンテナ上で、以下の環境を整える。
- Docker image : Ubuntu18.04:latest
- Python3
- OpenCV
環境
M1のMacbook向けのDocker desktop for M1がインストール済みであることを前提にしています。
$ system_profiler SPHardwareDataType Hardware: Hardware Overview: Model Name: MacBook Air Model Identifier: MacBookAir10,1 Chip: Apple M1 Total Number of Cores: 8 (4 performance and 4 efficiency) Memory: 16 GB System Firmware Version: 6723.50.2 $ docker --version Docker version 20.10.1, build 831ebeae96 $ docker-compose --version docker-compose version 1.27.4, build 40524192
環境構築開始
イメージの取得とコンテナ起動
まずはDocker Image取得して、コンテナを起動します。
今回はUbuntu18.04の最新イメージを利用しています。
$ docker run -it ubuntu:18.04
そうすると、コンテナ内に入ることができます。
フォルダ構成はこんな感じ。
root@a00000000z:/# ls bin boot dev etc home lib media mnt opt proc root run sbin srv sys tmp usr var
以降、特筆しない限りコンテナ内部のコマンド操作になります。
Python3 + OpenCVのインストール
まずはapt
を最新化します。
$ apt update -y $ apt upgrade -y
python3をインストールします。今回はお試しなので、最新版ではなくpython3としてインストールしたので、python3.6になっています。
$ apt install -y python3
続いて必要なツール類をインストールします。
$ apt install python3-dev python3-pip python3-setuptools -y
そして、pipでopencvをインストールしていきます。
ここで、色々エラーが出たりしました。めんどくせぇ。。。
$ python3 -m pip install opencv-python
エラー1つ目: skbuildモジュールがない !
skbuild
モジュールがないと怒られました。
ModuleNotFoundError: No module named 'skbuild'
なので、単純にskbuild
をインストールしてあげます。
これで1つ目は解決。ここで、インストールするモジュール名はscikit-build
になります。
$ python3 -m pip install scikit-build --<略>-- Successfully installed distro-1.5.0 packaging-20.8 pyparsing-2.4.7 scikit-build-0.11.1
エラー2つ目:Numpy関連部分でエラー!
skbuild
をインストールして、再度pip install opencv-python
をするとNumpy関連の部分でエラーが発生しました。Numpyを事前にインストールしておくかってことで、Numpyをインストール。
$ python3 -m pip install numpy
numpyをpipインストールする際のエラー
今度はまた別のエラーが。ぐぬぬ…。
以下のようなエラーが出てnumpyがインストールできない…
--<略>--
Command "/usr/bin/python3 -u -c "import setuptools, tokenize;file='/tmp/pip-build-mwnvdr7r/numpy/setup.py';f=getattr(tokenize, 'open', open)(file);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, file, 'exec'))" install --record /tmp/pip-dxshvpmv-record/install-record.txt --single-version-externally-managed --compile" failed with error code 1 in /tmp/pip-build-mwnvdr7r/numpy/
対処
pip
とsetuptools
を最新化する必要があったようです。
無事にnumpy
がインストールできました。
$ python3 -m pip install --upgrade pip setuptools $ python3 -m pip install numpy --<略>-- Successfully installed numpy-1.19.4
参考にしたサイト
いろんなサイトを参考にして解決を試した結果、こちらのサイトに記載があるように、pip
とsetuptools
を最新化したら解決しました。@Ray11187034(Twitter)さんありがとうございます!
OpenCVようやく入る
これでようやくopencvを入れることができました。
$ python3 -m pip install opencv-python --<略>-- Successfully installed opencv-python-4.4.0.46
ちゃんとインストールされているか確認します。 大丈夫そうですね。
$ python3 Python 3.6.9 (default, Oct 8 2020, 12:12:24) [GCC 8.4.0] on linux Type "help", "copyright", "credits" or "license" for more information. >>> import cv2 >>> cv2.__version__ '4.4.0'
コンテナからDocker ImageとDockerfileを作成
こちらのサイトを参考にして、今まで作成したコンテナからいつでも環境構築できるようにDockerfileを作成しました。
環境構築が終わったので、コンテナを終了させます。
$ exit # `Control+D`でも可
以降、特筆しない限りターミナルでのコマンド操作になります。
ここでは、コマンドのみ記載しますので詳細は上記サイトを確認してください。
# コンテナIDの確認 $ docker ps -a # Docker Imageの作成 $ docker container commit <container ID> <任意のimage name> # 作成したImageの確認 $ docker images # Dockerfileへ書き出し $ dfimage <docker image name>
これでDockerfileへも書き出すことができました!
Dockerfileをつくるとこんな感じ
FROM ubuntu:18.04 RUN apt update -y && apt upgrade -y RUN apt install -y python3 RUN apt install -y python3-dev python3-pip python3-setuptools RUN python3 -m pip install --upgrade pip setuptools RUN python3 -m pip install scikit-build numpy RUN yes 1 | python3 -m pip install opencv-python
終わり。 (最後適当になっちゃった。。。