89477


# 状況

main.pyからsub1.pyを明示的な相対インポートで呼び出そうとすると、ImportErrorが発生してしまいます。

なぜsubパッケージの相対インポートは失敗してしまうのでしょうか？

## 実行内容

[code]

    $ python3 main.py 
    Traceback (most recent call last):
      File "main.py", line 1, in <module>
        from .sub import sub1
    ImportError: attempted relative import with no known parent package
    
[/code]

## フォルダ構成

[code]

    .
    ├── __init__.py
    ├── main.py
    └── sub
        ├── __init__.py
        └── sub1.py
    
[/code]

## ファイル

main.py

[code]

    from .sub import sub1
    
    sub1.greet()
    
[/code]

sub1.py

[code]

    def greet():
        print('this is sub1')
    
[/code]


CC BY-SA 4.0
2022-06-19T12:20:10.147
89474
2022-06-19T13:55:06.843
2022-06-19T13:09:27.400
9616
9616
question
python
相対インポートを行おうとするとエラーが発生する


下記で良いかと思います。

`from sub import sub1`


CC BY-SA 4.0
2022-06-19T13:47:57.887
89477
2022-06-19T13:47:57.887
39819
89474
answer


`from .sub import sub1`のような明示的な相対インポートを使いたいときには、親ディレクトリを作る必要があるようです。

今回の例では親ディレクトリは存在していないため、`main.py`からsubパッケージを呼び出す方法としては、`from sub import
sub1`という絶対インポート方式での呼び方が適切。


CC BY-SA 4.0
2022-06-19T13:55:06.843
89479
2022-06-19T13:55:06.843
9616
89474
answer