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 を更新したほうがいいようです。