GW中に機械学習の勉強をしようと購入した本を実行していた際、件名にある
ImportError: No module named 'pytest'
と出て処理が止まりました。出版社のHPのコードをダウンロードしてきても同じ事象。エラーの内容を見る限りpytestというもジュルがないとのことだったので、それをインストールすればいいかとおもい、方法をググって調べて試した結果をまとめておきます。
前提
今回のpythonの実行環境はDockerに作られているものです。
Dockerにjupyterをインストールし、それを使って本のコードを試しています。
自分はPythonは今回はじめて学ぶ初心者です。Hello Worldが分かる程度です。
出力されたエラーメッセージ
今回、発生したエラー最初に紹介したとおりです。画面キャプチャも載せておきます。
出版社にあったコードをダウンロードしてきても動作しなかったときには流石に焦りました。ただ、メッセージ自体は他の言語でもよくあるメッセージだったので、pytestがないんだな、じゃあ、ダウンロードしてインストールするか。と方法を調べ始めました。
pip → pytest の順番にインストールしても動作せず
調べた結果、pytestというライブラリが必要であり、それをインストールするときにはpipというプログラムが必要であることはわかりました。pipのインストールとpytestのインストールを下記のコマンドで実施しました(DockerのコンテナのOSはUbuntuでした)
apt-get install pip pip install -U pytest
インストールは難なく終わりました。しかし、jupyterでエラーが出たコードを再度実行しても問題は解消しませんでした。
Dockerfileの中身を見てみた。
次に疑ったのがDockerのコンテナ構築時にインストールしているモジュールが正しいのか確認しました。前提にもある通り、実行環境はDockerを使っています。なので、Python及び関連するライブラリのインストール設定もDockerfileの中にあると考え、ファイルの中身を確認しました。
FROM ubuntu:16.04 ENV LANG C.UTF-8 # install for PythonRUN set -x && \ apt-get update && \ apt-get install -y --no-install-recommends \ build-essential \ (中略) fonts-ipafont \ && \ apt-get clean && \ rm -rf /var/lib/apt/lists/* RUN set -x && \ # pip3 install --upgrade pip && \ pip3 --no-cache-dir install \ requests \ setuptools \ Pillow \ nose \ h5py \ ipykernel \ jupyter \ matplotlib \ mlxtend \ numpy \ pandas \ scipy \ sklearn \ seaborn \ opencv-python==3.4.0.12 \ tensorflow==1.5.0 \ keras==2.1.4 \ flask (以下、略)
そうすると、pipの代わりにpip3というものを使ってPythonのライブラリをインストールしている事がわかりました。あと、pytestもありませんでした。
なので、すぐに下記のコマンドでpytestのインストールをしました。
pip3 --no-cache-dir install pytest
インストールした結果、エラーが出たコードは動作しました。ただ、そもそもDockerのコンテナを起動した状態でライブラリをインストールするのはどうかコンテナの意味合いからしてもおかしい。Dockerfileでコンテナを生成する際にインストールされているべきであると考えて、Dockerfileの設定の見直しました。(下のコードの最後の1行をpip3でインストールするライブラリとして追加しました)
pip3 --no-cache-dir install \ requests \ setuptools \ Pillow \ nose \ h5py \ ipykernel \ jupyter \ matplotlib \ mlxtend \ numpy \ pandas \ scipy \ sklearn \ seaborn \ opencv-python==3.4.0.12 \ tensorflow==1.5.0 \ keras==2.1.4 \ flask \ pytest
結果としては正しく動きました。
今回の問題はDockerfileを作る際の漏れか、バージョンが上がったことによりpytestが必要になったのか、自分の環境の問題なのかいろいろ理由は考えられますが、この先も勉強を続けられそうです。
本でプログラムを勉強するときに困ることの典型パターンにハマりました。
プログラムの勉強本って、本を書き始めてから読者に届くまでに時間がかかるので、その間、言語やライブラリのバージョンアップなんかがあると、動かなくなることはよくあることです。
今回もそのパターンだと思い、出てきたエラーコードの内容をググってどうするべきか考えて対応しました。
肝心なことは、自分と全く同じシチュエーションで困っている人がいない限り、ググっても事象に一致する回答は見つかりません。なので、調べてもピッタリの回答が出ないようなら、ログの内容などからある程度、推測して試してみることも必要です。
問題発生 ↓ ググる ↓ 試す
というサイクルを繰り返さないと、自力での問題解決能力は高まらないと思います。
しかし、ホント、解決できてよかった。
ちなみに、困ったのはこの本。サンプルコードがたくさん乗っているので、最初に勉強するにはちょうどよいですよ。
![]() | すぐに使える! 業務で実践できる! Pythonによる AI・機械学習・深層学習アプリのつくり方 新品価格 |