Python:导入包含的包

时间:2009-01-12 18:38:15

标签: python module package python-import

在驻留在包内的模块中,我需要使用在该包的__init__.py内定义的函数。我如何在包内的模块中导入包,所以我可以使用该功能?

在模块中导入__init__不会导入包,而是导入名为__init__的模块,导致两个具有不同名称的东西副本...

有没有pythonic的方法来做到这一点?

5 个答案:

答案 0 :(得分:43)

此外,从Python 2.5开始,可以进行相对导入。 e.g:

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

答案 1 :(得分:23)

这并不完全回答你的问题,但我建议你将函数移到__init__.py文件之外,然后转移到该包中的另一个模块中。然后,您可以轻松地将该功能导入到其他模块中。如果需要,您可以在__init__.py文件中包含导入该语句的导入语句(导入包时)。

答案 2 :(得分:5)

如果软件包的名称为testmod且您的init文件是testmod/__init__.py,并且软件包中的模块是submod.py,那么从submod.py文件中,您应该只是能够说import testmod并使用你在testmod中定义的任何你想要的东西。

答案 3 :(得分:1)

我不完全确定情况如何,但这可能会解决您的“不同名称”问题:

import __init__ as top
top.some_function()

或者也许?:

from __init__ import some_function
some_function()

答案 4 :(得分:1)

在Django中,文件manage.py有from django.core.management import execute_manager,但execute_manager不是模块。它是__init__.py目录的management模块中的一个函数。