環境 基本 実践 モデル アップロード デプロイ

DjangoでError: No module namedが出てきたらPipfileの異常を疑う

最終更新日 2023.02.18

Django でデバッグモードをオンにしていると、モジュールがインストールされていないときに

Error: No module named

というエラーが表示されます。このエラーが出るということは、Django そのものはきちんとデプロイされて、しかも正常に動いているということです。

問題は、いくつかのモジュールが本番環境で正常にインストールされていないことにあります。「ローカルでインストールされているのに、本番でインストールされていない」という問題は Pipfile に問題がある可能性が高い。

結論:Pipenv をローカルでインストールして、ローカルで Pipfile(と Pipfile.lock)を更新する

この記事を読んでいる人はすでに venv で仮想環境を作り、そこで pip install しているでしょう。そして

pip freeze > requirements.txt

でインストールしたモジュールとそのバージョン一覧を requirements.txt に書きこんでいると思います。しかし Heroku などのサーバーは requirements.txt だけでなく、Pipfile でモジュールのインストールを確認しているようです。

Heroku は Pipfile(と Pipfile.lock)に書かれているモジュールに合わせて環境を自動的に作ります。

Procfile の更新方法

pipenv というパッケージ管理モジュールを使う。インストールは

pip install pipenv

です。そして

pipenv install -r requirements.txt

で Pipfile と Pipfile.lock を一度に更新してください。このコマンドを入力するためには、requirements.txt はあらかじめ作られていないといけない。

つまり Django 開発者は、pip install でインストールしたモジュールの情報を

pip freeze > requirements.txt

で requirements.txt で更新し、さらに

pipenv install -r requirements.txt

で Pipfile を更新したほうがいいようです。