ヘッダーは非常に理解しにくいかもしれませんが、できる限り説明します。
SubModule
合計 3 つのファイルを含むフォルダーがあります。
__init__.py
Class1.py
Class2.py
の中__init__.py
で、私はこれを手に入れました:
import Class1
import Class2
def main():
c1 = Class1.Class1()
c2 = Class2.Class2()
if __name__ == "__main__":
main()
そして、すべてエラーなく正常に動作し、c1 と c2 を適切に使用できます。
SubModule
フォルダーを他のモジュールの (と呼びましょう) フォルダーの下に移動しようとすると、問題が発生しMainModule
ます。したがって、次のようになります。
MainModule\__init__.py
MainModule\SubModule\__init__.py
MainModule\SubModule\Class1.py
MainModule\SubModule\Class2.py
今、次のようにインポートしようとするSubModule
とMainModule\__init__.py
:
import SubModule
c1 = SubModule.ClassOne.ClassOne()
c2 = SubModule.ClassTwo.ClassTwo()
これでうまくいくと思います。ただし、 を実行すると、次MainModule\__init__.py
のエラーが発生します SubModule\__init__.py
。
Traceback (most recent call last):
File "C:\...\MainModule\__init__.py", line 1, in <module>
import SubModule
File "C:\...\MainModule\SubModule\__init__.py", line 1, in <module>
import Class1
ImportError: No module named 'Class1'
ご覧のとおり、エラーは から発生し、 があることがわかりimport Class1
ますNo module named 'Class1'
。これは、パスがSubModule.Class1
ただではなく、現在になっている原因Class1
です。これに変更することで、このエラーを取り除くことができますSubModule\__init__.py
:
import SubModule.Class1
import SubModule.Class2
ただし、 を実行してSubModule
単独で使用することはできなくなりました。SubModule\__init__.py
import Class1
import SubModule.Class1
これは私を夢中にさせています。インポートを一般化する方法はありますか?どのモジュールが SubModule をインポートするかは問題ではありませんか?