90010


以下のようなディレクトリ構造があるとします。

[code]

    testApp
      |__ main.py
      |__ dirA
            |__ __init__.py
            |__ test.py
            |__ dirB
                  |__ __init__.py
                  |__ test2.py
    
[/code]

私は、それぞれのファイルに以下のようなコードを記述しました。

**main.py**

[code]

    import dirA
    dirA.dirB.test2.main_func()
    
[/code]

**dirA/ **init**.py**

[code]

    from . import test
    from * import dirB
    
[/code]

**dirA/test.py**

[code]

    def sample_func():
        print("sample func")
    
    def main_func():
        sample_func()
    
[/code]

**dirA/dirB/ **init**.py**

[code]

    from . import test2
    
[/code]

**dirA/dirB/test2.py**

[code]

    def sample_func2():
        print("sample func2")
    
    def main_func2():
        sample_func()
    
[/code]

しかし、これを実行すると以下のようなエラーが出ます。  
エラー内容は以下の通りです。

[code]

    $ python main.py
    Traceback (most recent call last):
      File "main.py", line 1, in <module>
        import dirA
      File "C:\Users\username\Documents\hold\testApp\dirA\__init__.py", line 2
        from * import dirB
             ^
    SyntaxError: invalid syntax
    
[/code]

最上位のディレクトリ直下にあるファイル内で、importの記述を1つだけにして2階層下までのファイルをimportするにはどのような記述をすればできるのでしょうか？

もしくは、このような記述方法が望ましくない場合、
**init**.py等を活用してスマートにimportするにはどういった記述をするのが適切なのでしょうか？


CC BY-SA 4.0
2022-07-15T23:15:48.930
90009
2022-07-15T23:46:47.927
36446
question
python
Pythonで多重階層下の.pyファイルインポートするにはどうすればいいか


`import`文の書き方が間違っているためエラーが発生しています。  
下記の書き方でimportの記述を1つだけにして2階層下の`test2`にアクセスできます。  
(記述を省略したファイルには変更ありません)

**main.py**

[code]

    import dirA
    dirA.dirB.test2.sample_func2()
    # sample func2
    
[/code]

**dirA/ **init**.py**

[code]

    from .dirB import *
    
[/code]

**dirA/dirB/ **init**.py**

[code]

    from . import test2
    
[/code]

参考資料:

  * [Pythonの相対インポートで上位ディレクトリ・サブディレクトリを指定](https://note.nkmk.me/python-relative-import/)


CC BY-SA 4.0
2022-07-15T23:46:47.927
90010
2022-07-15T23:46:47.927
9820
90009
answer