在一个包中的一个模块中,我需要使用在该包的__init__.py
中定义的一个函数。我该如何在该包内的模块中导入该包,以便我可以使用该函数?
将__init__
导入模块中不会导入包,而是导入一个名为__init__
的模块,导致存在两个具有不同名称的复件...
有没有一种Pythonic的方法来做这件事?
在一个包中的一个模块中,我需要使用在该包的__init__.py
中定义的一个函数。我该如何在该包内的模块中导入该包,以便我可以使用该函数?
将__init__
导入模块中不会导入包,而是导入一个名为__init__
的模块,导致存在两个具有不同名称的复件...
有没有一种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
文件中添加一个导入语句,来在导入程序包时同时导入该函数。
如果包名为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
模块中的函数。