正しい相対インポートは次のようになります。
from ...common import foo
ただし、相対インポートは 1 つのパッケージ内でのみ機能することを意図しています。がパッケージの場合main
、ここで相対インポートを使用できます。がパッケージでない場合main
は、できません。
したがって、でスクリプトを実行し、次の/main/
ようなことを行っているimport A.src.bar
場合、その相対インポートは「トップレベル パッケージを超えて相対インポートを試行しました」で失敗します。これは、相対インポートがトップレベル パッケージの外にあるものをインポートしようとしているためA
です。
ただし、 でスクリプトを実行して の/
ようなことをしている場合、はパッケージになっているimport main.A.src.bar
ため、その相対インポートは成功します。main
その場合、次の 2 つが同等になります。
from ...common import foo
from main.common import foo
あなたのコメントに答えるには: の意味は.
、スクリプトがどこから実行されたかによって変わりません。パッケージの構造によって変わります。