親フォルダのサブフォルダから相対的にモジュールをインポートする 質問する

親フォルダのサブフォルダから相対的にモジュールをインポートする 質問する

このようなディレクトリ構造の場合

main/
    common/
        foo.py
    A/
        src/
            bar.py

Pythonの相対輸入fooからインポートするにはどうbarすればいいですか? パスに追加することで実用的な解決策を見つけましたが、これは見苦しいです。importPython 2.7 で単純に 1 つだけを実行する方法はありますか?

これはこの質問のより複雑なバージョンです:

親フォルダからモジュールをインポートする

ベストアンサー1

正しい相対インポートは次のようになります。

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

あなたのコメントに答えると、 の意味は.スクリプトがどこから実行されたかによって変わるのではなく、パッケージ構造が何であるかによって変わります。

おすすめ記事