私はここで Python の考え方に反対するかもしれませんが、私にとっては、パッケージ (または任意のプロジェクト フォルダー システム) に関して言えば、パッケージの内容は、PYTHONPATH
.
たとえば、次の階層を考えてみましょう。
somewhere/
foo/
__init__.py
bar/
__init__.py
foo/
__init__.py
somewhere
が にPYTHONPATH
あり、ここに他に何もない場合somewhere/bar/__init__.py
、単純な を実行する場合、まったく見知らぬ人ではなく、その子をパス変数からインポートする必要があるimport foo
と思います。独自のシステム内で何かが見つからない場合は、Path に移動する必要があります。bar
somewhere/bar/foo
somewhere/foo
ただし、私のテストでは、PYTHONPATH
直接の子孫に勝っているように見えますが、これは残念なことです。なぜなら、それは強力で柔軟性に欠けるシステムであり、階層の DAG の性質を適切に尊重していないからです。兄弟ではなく、先祖や完全な関係のない子供たちが最初に来ます。しかし、外すPYTHONPATH
といきなり中を使ってしまいfoo
ますbar
。
私は何か間違ったことをしているだけですか、それともPythonは本当にこのように機能しますか? 私が思うように機能させるためにできることはありますか?を削除するsomewhere/bar/foo
と、パスを調べることができますが、インスタンス変数がクラス変数をオーバーライドするのと同じように、を明示的にfoo
inにするbar
と、それを使用する必要があります。