【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に書いてなかったモジュールは読み込んでくれないとか。
推測するならそんなところなんだけど、そんなのあり得るのかな。

う~ん、出来たからよいものの...謎です。

\ 最新情報をチェック /

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください