このようなディレクトリ構造を考えると
main/
common/
foo.py
A/
src/
bar.py
Python の相対インポートfooを使用してからインポートするにはどうすればよいbarですか? パスに追加することで実用的なソリューションを手に入れましたが、これは醜いです。importPython 2.7でシングルを簡単に処理する方法はありますか?
これは、この質問のより複雑なバージョンです。
このようなディレクトリ構造を考えると
main/
common/
foo.py
A/
src/
bar.py
Python の相対インポートfooを使用してからインポートするにはどうすればよいbarですか? パスに追加することで実用的なソリューションを手に入れましたが、これは醜いです。importPython 2.7でシングルを簡単に処理する方法はありますか?
これは、この質問のより複雑なバージョンです。
正しい相対インポートは次のようになります。
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
あなたのコメントに答えるには: の意味は.、スクリプトがどこから実行されたかによって変わりません。パッケージの構造によって変わります。