パッケージ内にあるモジュールでは、そのパッケージの__init__.py
内で定義された関数を使用する必要があります。パッケージ内にあるモジュール内にパッケージをインポートするにはどうすればよいので、その機能を使用できますか?
モジュール内に__init__
をインポートしてもパッケージはインポートされませんが、代わりに__init__
という名前のモジュールがインポートされ、異なる名前の2つのコピーが作成されます...
これを行うPythonの方法はありますか?
また、Python 2.5以降では、相対的なインポートが可能です。例:
from . import foo
http://docs.python.org/tutorial/modules.html#intra-package-references からの引用:
Python 2.5で始まり、上記の暗黙的な相対インポートに加えて、importステートメントの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
である場合、submod.py
ファイル内から、次のことができるはずです。 import testmod
と言い、testmodで定義されているものは何でも使います。
私は状況が何であるか完全にはわかりませんが、これはあなたの「異なる名前」の問題を解決するかもしれません:
import __init__ as top
top.some_function()
または多分?:
from __init__ import some_function
some_function()
Djangoでは、manage.pyファイルにはfrom Django.core.management import execute_manager
がありますが、execute_manager
はモジュールではありません。これは、management
ディレクトリの__init__.py
モジュール内の関数です。