62

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

在模块内部导入__init__不会导入包,而是导入名为 的模块__init__,导致两个不同名称的事物副本......

有没有一种pythonic方法可以做到这一点?

4

5 回答 5

48

此外,从 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
于 2009-01-12T19:52:19.120 回答
23

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

于 2009-01-12T18:40:53.740 回答
5

如果包被命名testmod并且您的初始化文件因此而被命名并且您testmod/__init__.py的包中的模块submod.py则来自submod.py文件中,那么您应该能够说出import testmod和使用在 testmod 中定义的任何您想要的东西。

于 2009-01-12T19:13:51.613 回答
1

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

于 2009-04-02T02:30:46.717 回答
1

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

import __init__ as top
top.some_function()

或者可能?:

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