【Docker×Django】後入れしたpandas がModuleNotFoundErrorになった
【Docker×Django】後入れしたpandas がModuleNotFoundErrorになった
これはとりあえず解決できた方法としてメモしておこうと思います。
「やったら直った」というレベルで根本解決とは異なるかもしれません。
発生していた症状
#views.py import logging import time import pandas
これでpandasに対してモジュールが無いと怒られました。
でもモジュールはインストールされているのでこれらのコマンド達にはちゃんと反応があります。
pip show pandas pip freeze pip list
インストール名とモジュール名が違う?
多くの方のお手本を参考にさせて頂く限りそれもなさそう。
アンインストールして再インストールも実行してみましたが結果は変わらず。
で、Docker再構築してみようかと発想したのですが、これが上手くいきました。
変更したPythonのDockerfile
FROM python:3.8
#FROM python:3.8-buster
# 作成したユーザーに切り替える
#USER ${DOCKER_USER}
# ユーザーを作成
ARG UID=1000
RUN useradd -m -u ${UID} 901_system-Ad03n
RUN mkdir /code
WORKDIR /code
ADD requirements.txt /code/
RUN pip install --upgrade pip \
&& pip install -r requirements.txt
ADD . /code/
RUN apt update; apt -y upgrade \
&& apt-get install -y vim \
&& apt install -y gnupg \
&& wget -q -O - https://dl.google.com/linux/linux_signing_key.pub | apt-key add - \
&& wget -q https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb \
&& apt install -y ./google-chrome-stable_current_amd64.deb \
&& apt clean \
&& rm -rf /var/lib/apt/lists/ \
&& rm google-chrome-stable_current_amd64.deb
RUN pip install selenium chromedriver-binary~=$(/usr/bin/google-chrome --version | perl -pe 's/([^0-9]+)([0-9]+\.[0-9]+).+/$2/g') \
&& pip install django-allauth
■requirements.txt
asgiref==3.2.7 Django==3.0.5 pytz==2020.1 sqlparse==0.3.1 uwsgi==2.0.18 mysqlclient==1.4.6 certifi==2020.11.8 cffi==1.14.4 chardet==3.0.4 cryptography==3.2.1 cycler==0.10.0 defusedxml==0.6.0 django-allauth==0.44.0 idna==2.10 kiwisolver==1.3.1 matplotlib==3.3.3 numpy==1.19.4 oauthlib==3.1.0 pandas==1.1.4 Pillow==8.0.1 pycparser==2.20 PyJWT==1.7.1 pyparsing==2.4.7 requests==2.25.0 requests-oauthlib==1.3.0 six==1.15.0 urllib3==1.26.2
FROM python:3.8-busterを辞めてbusterで自動的にインストールされていたモジュールをrequirements.txtに書き出しました。
sudo /usr/local/bin/docker-compose up -d --build
起動が終わってから pandas を書いたページを読み込んでみたらエラー無し。
結局何が原因だったのだろう...。
まとめ
コンテナ構築時にbusterやrequirements.txtに書いてなかったモジュールは読み込んでくれないとか。
推測するならそんなところなんだけど、そんなのあり得るのかな。
う~ん、出来たからよいものの...謎です。


