【python】自作ではないモジュールのimportに失敗する原因はこれかも?
ModuleNotFoundError: No module named 'html.parser'; 'html' is not a package

実際に発生したエラーは↑になります。モジュールがないというエラーでした。

from html.parser import HTMLParser

エラーが出ているソースを見ると、↑のようになっていました。「html/parser.py」から「HTMLParser」をインポートしているだけです。

このエラーを解決するために、環境変数にパスを通してみたりと少しハマったので、同じようなことが起きたときのために、記事にしておきます。

解決策

早速ですが、結論は自作で「html.py」を作っていたことが原因でした。

それによって、もちろん「parser.py」も「HTMLParser」も存在しなければ、「html」はフォルダでもありません。よって、モジュールがないというエラーが出たわけです。

ファイル名を変更するとエラーは出なくなり、正しくインポートすることができました

余談:気付いたきっかけ

コマンドプロンプトで自作pyファイルを実行していて発生したエラーです。その際画像ファイルを読み込むために、コマンドプロンプト起動後、cdコマンドでカレントディレクトリを自作pyがあるディレクトリに変更していました。そしてそこにhtml.pyファイルがあったため、発生しました。

エラー発生後もカレントディレクトリは変更せずにいろいろと調査していました。ふとDドライブ(python anacondaはCドライブ)だからエラーなのかなと思い、カレントディレクトリがCドライブの状態で「python」を起動し、「from html.parser import HTMLParser」を直打ちで試すと成功しました。

それでディレクトリを変えながら調査していると、html.pyファイルがあるディレクトリだけでエラーになっていることが判明し解決に至りました。

まとめ

ハマったときは大体後悔したくなる内容が多いです。エラーをしっかり見てなるべく早く解決したいですね。ハマっている間は何も進まないので…

コマンドプロンプトでPythonが動作しない場合

importがエラーになる他の理由