Python で ModuleNotFoundError を解決する
モジュールは、Python プログラムを開発する上で重要です。 モジュールを使用すると、コードベースのさまざまな部分を分離して、管理を容易にすることができます。
モジュールを操作するときは、モジュールがどのように機能し、コードにインポートする方法を理解することが重要です。 この理解や間違いがなければ、さまざまなエラーが発生する可能性があります。
そのようなエラーの一例は ModuleNotFoundError
です。 この記事では、Python 内で ModuleNotFoundError
を解決する方法について説明します。
正しいモジュール名を使用して Python で ModuleNotFoundError
を解決する
index.py
と file.py
の 2つのファイルを使用して単純な Python コードベースを作成し、file.py
を index.py
ファイルにインポートします。 両方のファイルは同じディレクトリ内にあります。
file.py
ファイルには以下のコードが含まれています。
class Student:
def __init__(self, firstName, lastName):
self.firstName = firstName
self.lastName = lastName
index.py
ファイルには以下のコードが含まれています。
import fiIe
studentOne = fiIe.Student("Isaac", "Asimov")
print(studentOne.lastName)
では、index.py
を実行してみましょう。 コード実行の出力は以下のとおりです。
Traceback (most recent call last):
File "c:\Users\akinl\Documents\Python\index.py", line 1, in <module>
import fiIe
ModuleNotFoundError: No module named 'fiIe'
ModuleNotFoundError
があります。 よく見ると、インポート ステートメントに誤植があり、file
が fIe
のように記述されており、l
が大文字の I
に置き換えられていることがわかります。
したがって、間違った名前を使用すると、ModuleNotFoundError
がスローされる可能性があります。 モジュール名を書くときは注意してください。
それでは、修正してコードを実行してみましょう。
import file
studentOne = file.Student("Isaac", "Asimov")
print(studentOne.lastName)
コードの出力:
Asimov
また、from
キーワードを使用して import
ステートメントを書き直し、import
を Student
クラスだけにすることもできます。 これは、モジュール内に存在するすべての関数、クラス、およびメソッドをインポートしたくない場合に役立ちます。
from file import Student
studentOne = Student("Isaac", "Asimov")
print(studentOne.lastName)
前回と同じ出力が得られます。
正しい構文を使用して Python で ModuleNotFoundError
を解決する
別のモジュールをインポートするときに間違った構文を使用すると、特に別のディレクトリでモジュールを操作するときに、ModuleNotFoundError
を取得できます。
前のセクションと同じコードを使用して、さらに複雑なコードベースを作成してみましょう。 このコードベースを作成するには、以下のプロジェクト構造が必要です。
Project/
data/
file.py
welcome.py
index.py
この構造により、file
および welcome
モジュールを収容する data
パッケージができました。
file.py
ファイルには、以下のコードがあります。
class Student:
def __init__(self, firstName, lastName):
self.firstName = firstName
self.lastName = lastName
welcome.py
には、以下のコードがあります。
def printWelcome(arg):
return "Welcome to " + arg
index.py
には、file
と welcome
をインポートしようとするコードが含まれており、クラス Student
と関数 printWelcome
を使用しています。
import data.welcome.printWelcome
import data.file.Student
welcome = printWelcome("Lagos")
studentOne = Student("Isaac", "Asimov")
print(welcome)
print(studentOne.firstName)
index.py
を実行した結果:
Traceback (most recent call last):
File "c:\Users\akinl\Documents\Python\index.py", line 1, in <module>
import data.welcome.printWelcome
ModuleNotFoundError: No module named 'data.welcome.printWelcome'; 'data.welcome' is not a package
コードは、サブモジュールの簡単なバインディング の from
キーワードまたは __init__.py
を使用する代わりに、ドット演算子を直接使用して、関数 printWelcome
とクラス Student
をインポートしようとしました。 これを行うと、ModuleNotFoundError
がスローされます。
ModuleNotFoundError
を防止し、関数とクラスを直接インポートするために、正しい import
ステートメント構文を使用しましょう。
from data.file import Student
from data.welcome import printWelcome
welcome = printWelcome("Lagos")
studentOne = Student("Isaac", "Asimov")
print(welcome)
print(studentOne.firstName)
コードの出力:
Welcome to Lagos
Isaac
data
パッケージ内のモジュール (file
と welcome
) をその親名前空間にバインドできます。 これを行うには、__init__.py
ファイルが必要です。
__init__.py
ファイルでは、パッケージ内のすべてのモジュールとその関数、クラス、またはオブジェクトをインポートして、簡単に管理できるようにします。
from .file import Student
from .welcome import printWelcome
これで、index.py
をより簡潔に、親の名前空間 data
への適切なバインディングで記述できます。
from data import Student, printWelcome
welcome = printWelcome("Lagos")
studentOne = Student("Isaac", "Asimov")
print(welcome)
print(studentOne.firstName)
出力は、最後のコード実行と同じになります。
ModuleNotFoundError
エラー メッセージを回避するには、間違った import
ステートメントやタイプミスがないことを確認してください。
Olorunfemi is a lover of technology and computers. In addition, I write technology and coding content for developers and hobbyists. When not working, I learn to design, among other things.
LinkedIn関連記事 - Python ModuleNotFoundError
関連記事 - Python Error
- AttributeError の解決: 'list' オブジェクト属性 'append' は読み取り専用です
- AttributeError の解決: Python で 'Nonetype' オブジェクトに属性 'Group' がありません
- AttributeError: 'generator' オブジェクトに Python の 'next' 属性がありません
- AttributeError: 'numpy.ndarray' オブジェクトに Python の 'Append' 属性がありません
- AttributeError: Int オブジェクトに属性がありません
- AttributeError: Python で 'Dict' オブジェクトに属性 'Append' がありません