結論から言うと、import エラーが出たときは、モジュール名、ファイルの場所、実行している場所を順番に確認すると原因を絞りやすいです。
Pythonでファイルを分け始めると、ModuleNotFoundError や ImportError に出会うことがあります。
エラー文だけを見ると難しく感じますが、多くの場合は「名前が違う」「見える場所にない」「実行場所が想定と違う」のどれかです。
この記事では、import エラーが起きる代表的な原因と、実務で確認する順番を整理します。
この記事でわかること
完成コード
完成コードは次の通りです。
try:
from pathlib import Path
except ImportError as error:
print(f"読み込みに失敗しました: {error}")
else:
report_dir = Path("reports")
report_file = report_dir / "sales.txt"
print(report_file)自作モジュールでエラーが出る場合は、次のような構成を確認します。
project/
main.py
report_tools.pymain.py から同じフォルダの report_tools.py を読み込むなら、基本形は次の通りです。
from report_tools import create_reportコードのポイント
このコードでは、import に失敗した場合の見方を意識するために、try と except を使っています。
ImportErrorは、読み込みに失敗したときに関係する例外です- 標準ライブラリの
pathlibは通常そのまま読み込めます - 自作モジュールでは、ファイル名や実行場所の影響を受けやすくなります
- エラーが出たら、まずエラーメッセージに出ている名前を確認します
実務では、エラーを握りつぶすよりも、原因を読み取ることが大切です。
この記事の完成コードは例外の形を確認するための短い例で、実際の調査では表示されたエラーメッセージをよく読みます。
コードを順番に説明します
主要な処理を分けて説明します。
1. 読み込みに失敗したときの例外を確認します
try:
from pathlib import Path
except ImportError as error:
print(f"読み込みに失敗しました: {error}")try の中で import を行い、失敗した場合は except ImportError で受けています。ImportError は、モジュールや名前の読み込みに失敗したときに関係する例外です。
実際には、標準ライブラリの pathlib で失敗することはほとんどありません。
ここでは、import も例外の対象になることを確認するための例として見てください。
2. モジュール名とファイル名を確認します
from report_tools import create_report自作モジュールでよくあるのは、ファイル名と import している名前がずれているケースです。
たとえば、ファイル名が report_tool.py なのに report_tools と書いていると、Pythonは目的のファイルを見つけられません。
また、ファイル名にハイフンを使うと import しにくくなります。
自作モジュールのファイル名は、英小文字とアンダースコアで付けると扱いやすいです。
3. 実行場所とフォルダ構成を確認します
project/
main.py
report_tools.pymain.py と report_tools.py が同じフォルダにある場合、基本的には from report_tools import create_report で読み込めます。
それでも失敗する場合は、どのフォルダから python main.py を実行しているかを確認します。
パッケージ構成にしている場合は、from sales.report import create_report のように、フォルダ名も含めて指定する必要があります。
ファイルを移動したあとに import 文を直し忘れることも、よくある原因です。
実務で使うときのポイント
実務で import エラーが出たときは、次の順番で見ると原因を切り分けやすいです。
- エラーメッセージに出ているモジュール名を確認する
- ファイル名、フォルダ名、関数名のスペルを確認する
main.pyをどの場所から実行しているか確認する- 自作ファイルが標準ライブラリと同じ名前になっていないか確認する
- パッケージ構成に変えたあと、
import文を更新したか確認する
特に、csv.py や json.py のような名前で自作ファイルを作ると、標準ライブラリと衝突して思わぬ読み込みになります。
便利そうな短い名前ほど、既存のモジュール名と重なっていないか注意が必要です。
第5章で学んだ import、自作モジュール、パッケージ構成を理解しておくと、エラーが出ても落ち着いて原因を探せます。
次の第6章では、標準ライブラリを実務の処理に活用していきます。