パッケージ内にあるモジュールでは、そのパッケージ内で定義された関数を使用する必要があり__init__.py
ます。パッケージ内に存在するモジュール内にパッケージをインポートして、その機能を使用するにはどうすればよいですか?
モジュール内にインポート__init__
すると、パッケージはインポートされませんが、代わりに という名前のモジュールがインポートされ__init__
、名前の異なるものの 2 つのコピーが作成されます...
これを行うためのpythonicな方法はありますか?
パッケージ内にあるモジュールでは、そのパッケージ内で定義された関数を使用する必要があり__init__.py
ます。パッケージ内に存在するモジュール内にパッケージをインポートして、その機能を使用するにはどうすればよいですか?
モジュール内にインポート__init__
すると、パッケージはインポートされませんが、代わりに という名前のモジュールがインポートされ__init__
、名前の異なるものの 2 つのコピーが作成されます...
これを行うためのpythonicな方法はありますか?
また、Python 2.5 以降では、相対インポートが可能です。例えば:
from . import foo
http://docs.python.org/tutorial/modules.html#intra-package-referencesからの引用:
Python 2.5 以降では、上記の暗黙的な相対インポートに加えて、インポート ステートメントの from module import name 形式を使用して明示的な相対インポートを記述できます。これらの明示的な相対インポートでは、先頭のドットを使用して、相対インポートに含まれる現在および親のパッケージを示します。たとえば、周囲のモジュールから、次を使用できます。
from . import echo
from .. import formats
from ..filters import equalizer
これはあなたの質問に正確に答えるものではありませんが、関数を__init__.py
ファイルの外に移動し、そのパッケージ内の別のモジュールに移動することをお勧めします。その後、その関数を他のモジュールに簡単にインポートできます。__init__.py
必要に応じて、 (パッケージのインポート時に) その関数をインポートするファイルに import ステートメントを含めることもできます。
パッケージに名前が付けられ、それに従ってtestmod
init ファイルがありtestmod/__init__.py
、パッケージ内のモジュールがファイルsubmod.py
内からのものである場合、testmod で定義されている必要なものを何でもsubmod.py
言って使用できるはずです。import testmod
状況が完全にはわかりませんが、これで「別の名前」の問題が解決する可能性があります。
import __init__ as top
top.some_function()
または多分?:
from __init__ import some_function
some_function()