Python:导入包含包
在驻留在包内的模块中,我需要使用该包的 __init__.py 中定义的函数。 我如何在驻留在包内的模块中导入包,以便我可以使用该功能?
在模块内部导入 __init__
不会导入包,而是导入一个名为 __init__
的模块,导致两个具有不同名称的副本......
有没有一种Pythonic的方法来做这个?
In a module residing inside a package, i have the need to use a function defined within the __init__.py
of that package. how can i import the package within the module that resides within the package, so i can use that function?
Importing __init__
inside the module will not import the package, but instead a module named __init__
, leading to two copies of things with different names...
Is there a pythonic way to do this?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
此外,从 Python 2.5 开始,可以进行相对导入。 例如:
引用 http://docs.python.org/tutorial/modules .html#intra-package-references:
从Python 2.5开始,除了上述隐式相对导入之外,您还可以使用 import 语句的 from module import name 形式编写显式相对导入。 这些显式相对导入使用前导点来指示相对导入中涉及的当前包和父包。 例如,从周围的模块中,您可以使用:
Also, starting in Python 2.5, relative imports are possible. e.g.:
Quoting from http://docs.python.org/tutorial/modules.html#intra-package-references:
Starting with Python 2.5, in addition to the implicit relative imports described above, you can write explicit relative imports with the from module import name form of import statement. These explicit relative imports use leading dots to indicate the current and parent packages involved in the relative import. From the surrounding module for example, you might use:
这并不能完全回答您的问题,但我建议您将该函数移到 __init__.py 文件之外,并移到该包内的另一个模块中。 然后,您可以轻松将该函数导入到其他模块中。 如果需要,您可以在
__init__.py
文件中包含一个 import 语句,该语句也将导入该函数(当导入包时)。This doesn't exactly answer your question, but I'm going to suggest that you move the function outside of the
__init__.py
file, and into another module inside that package. You can then easily import that function into your other module. If you want, you can have an import statement in the__init__.py
file that will import that function (when the package is imported) as well.如果包名为
testmod
并且您的初始化文件是testmod/__init__.py
并且包中的模块是submod.py
那么在submod.py
文件中,您应该能够说import testmod
并使用 testmod 中定义的任何您想要的内容。If the package is named
testmod
and your init file is thereforetestmod/__init__.py
and your module within the package issubmod.py
then from withinsubmod.py
file, you should just be able to sayimport testmod
and use whatever you want that's defined in testmod.我不完全确定情况是什么,但这可能会解决您的“不同名称”问题:
或者也许?:
I'm not totally sure what the situation is, but this may solve your "different name" problem:
Or maybe?:
在 Django 中,manage.py 文件有
from django.core.management importexecute_manager
,但execute_manager
不是一个模块。 它是management
目录的__init__.py
模块中的一个函数。In Django, the file manage.py has
from django.core.management import execute_manager
, butexecute_manager
is not a module. It is a function within the__init__.py
module of themanagement
directory.