62

パッケージ内にあるモジュールでは、そのパッケージ内で定義された関数を使用する必要があり__init__.pyます。パッケージ内に存在するモジュール内にパッケージをインポートして、その機能を使用するにはどうすればよいですか?

モジュール内にインポート__init__すると、パッケージはインポートされませんが、代わりに という名前のモジュールがインポートされ__init__、名前の異なるものの 2 つのコピーが作成されます...

これを行うためのpythonicな方法はありますか?

4

5 に答える 5

48

また、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
于 2009-01-12T19:52:19.120 に答える
23

これはあなたの質問に正確に答えるものではありませんが、関数を__init__.pyファイルの外に移動し、そのパッケージ内の別のモジュールに移動することをお勧めします。その後、その関数を他のモジュールに簡単にインポートできます。__init__.py必要に応じて、 (パッケージのインポート時に) その関数をインポートするファイルに import ステートメントを含めることもできます。

于 2009-01-12T18:40:53.740 に答える
5

パッケージに名前が付けられ、それに従ってtestmodinit ファイルがありtestmod/__init__.py、パッケージ内のモジュールがファイルsubmod.py内からのものである場合、testmod で定義されている必要なものを何でもsubmod.py言って使用できるはずです。import testmod

于 2009-01-12T19:13:51.613 に答える
1

状況が完全にはわかりませんが、これで「別の名前」の問題が解決する可能性があります。

import __init__ as top
top.some_function()

または多分?:

from __init__ import some_function
some_function()
于 2009-01-12T19:26:02.213 に答える