【Django】ModuleNotFoundError: No module named ‘allauth’ 対処法

プログラミング
Masa
Masa

こんにちは!Masaです。

今回はかなり悩んだエラーの原因と解決方法を解説します!

この記事はこんな方におすすめ
  • No module named ‘allauth’が解決できずに悩んでいる人
  • python -m やpip について理解を深めたい人

エラー内容:No module named ‘allauth’

Djangoで認証機能を追加する際に、django-allauthを使用しようとしました。

いざ、マイグレーションを行うと、以下のエラーメッセージが出ました。

ModuleNotFoundError: No module named ‘allauth’

実際ModuleNotFoundErrorはよくあるので、調べたらすぐ原因出てくるだろと思っていましたが意外と解決方法書いてないんですね。

調べた中であった解決策としては

  • settings.pyでのどこかの部分にミスがあった、
  • INSTALLED_APPでカンマ付け忘れ
  • 仮想環境から出て(deactivate)して、pip install django-allauthした(これはよくわかりません)
  • django-allauthを1回pip unsitallする

などがあったのですが、自分はこれでは解決せず(やってないものがあればやってみてください!)

解決策:python -m pip install django-allauth

そこで色々調べていくうちにたどり着いた解決策が、以下のコマンドでdjango-allauthをインストールすることでした。

python -m pip install django-allauth

自分はこれが原因だとわかりましたが、なぜこれで解決するかわからないのは気持ち悪いので色々調べてみました!

python -m とは?

仮想環境を作成する際、python -m を当たり前かのように使用していましたが、自分は”-m”がわかっていませんでした。

調べた結果、”-m”はインタフェースオプションと呼ばれるものらしいです。
このインタフェースオプションは”-c”や”-h”など約20種類あります。

今回は”-m”に限定して調べていきます。
”-m”はモジュール(パッケージ)を実行するために使うオプションだそうです。

モジュールは”×××.py”のように.pyが拡張子のファイルのことで、×××がモジュール名です。
test.pyを実行したければ以下のコマンドを使用します。

python -m test

仕組みはちょっと難しいので、より詳しく調べて別記事で解説したいと思います。

まずは”-m”の意味を簡単に理解することができました。

pipに関して

次にpipに関してです。
普段何気なくpipを使ってるけど、実際詳しいことはわからない人多いんじゃないでしょうか(自分もです。。。)

pipとはPythonパッケージを管理するためにツールです。

パッケージには、

  1. Python 公式が配布しているもの
  2. 公式じゃないもの(サードパーティが配布しているもの)

の、2種類に分かれます。

Python公式のパッケージはPythonをインストールするときに自動でついてくるらしいのですが、サードパーティが配布しているものはついてきません。

そこで、pipを使用してサードパーティ製のパッケージをインストールするということになります!

pipの詳しい使い方は別記事で解説します。(ネット上にいっぱい転がってますしね!)

ちなみにPythonパッケージの管理ツールは他にもあり、代表的なのはcondaやeasy_installです。

脱線!モジュール、ライブラリ、パッケージ等の違いを確認

ここまでをおさらいすると、

  • “python -m”コマンド:モジュールを実行するコマンド
  • “pip”: パッケージを管理するツール

でした。
さらにPythonにはライブラリやもクラスなどがあるのでまとめてみましょう。

この図の通り、モジュールはパッケージの中の一部です。
つまりモジュールの集合がパッケージとなります。

その他もこの図を参考んにして整理してみてください。

結論:python -m pip installは何してる?

ここまででもよくわからなかったので調べたところ、python -m pip installpip installもパッケージをインストールするという意味では同じでした。

  • python -m pip install <package>
  • pip install <package>

ただ、pythonとpipのバージョンが違った場合問題が生じます

理由は長くなるので別記事で紹介しまが、結論だけ言うと、

  • python -m pip install:実行されるpythonにインストールされる
  • pip install :実行されるPythonにインストールされない可能性がある

とのことなので、python -m pip installを常時使用する方が無難だということでした。

実際、自分もpip installではエラーが起きていたので実行するpythonにインストールされてなった可能性があります。

まとめ

今回はModuleNotFoundError: No module named ‘allauth’ について探っていきました。

結論として、allauthのみならず、パッケージインストール時のインストール先の理解が少しだけ深まりました。

ちなみにこの書籍で勉強している時に今回のエラーが起きました。
書籍内ではパッケージのインストールをPyCharmで行っていたため、コマンドで行っている人は引っかかりそうです。

コメント

タイトルとURLをコピーしました