Python プログラム

Python実行時に【ImportError: No module named 'pytest'】

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・機械学習・深層学習アプリのつくり方

新品価格
¥3,456から
(2019/5/2 10:55時点)


システムエンジニアランキング

-Python, プログラム
-,

© 2024 pedalclecleの自転車操業 Powered by AFFINGER5