ヘッダーは非常に理解しにくいかもしれませんが、できる限り説明します。
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__.pyimport Class1import SubModule.Class1
これは私を夢中にさせています。インポートを一般化する方法はありますか?どのモジュールが SubModule をインポートするかは問題ではありませんか?