我一定遗漏了一些关于用Python构建包的基本知识。当我按照https://docs.python.org/2/tutorial/modules.html#packages的准则创建一个包并导入它时,Python找不到任何模块。例如,假设我使用以下结构创建包holygrail:
我把u init_uu.py留为空,因为文档上说我可以,而我只是试图创建一个基本的包来启动。在骑士.py我有:
def say():
print 'Ni!'
如果我尝试import holygrail
,Python不会给出任何错误,但是holygrail.knights.say()
会导致Python告诉我“'module”对象[holygrail]没有属性“knights”。但是,如果我通过from holygrail import knights
导入骑士,那么knights.say()
就可以了。另外,holygrail.knights.say()
也可以。在
我试着加上一行
^{pr2}$但这并没有改变行为。在
如何构造一个包,使import package
加载到所有模块中,并允许package.module.function()
之类的语句?在
将
import knights
添加到__init__.py
中。在您提供的链接声明“在最简单的情况下,
__init__.py
可能只是一个空文件…”您的示例不是最简单的情况,仅此而已。在Python不会隐式导入整个包层次结构。必须明确使用
__init__.py
文件在包的哪个级别导入什么。在当您在
__init__.py
中设置__all__ = ['knights']
时,它只适用于该模块的import all语句,例如:它还可以作为import all上的过滤器,只从模块中导入指定的内容。在
要使}(intra-package or relative import)放入
knights
自动导入到import holygrail
上,必须将import knights
或{__init__.py
。您必须对每个模块显式地执行相同的操作。在相关问题 更多 >
编程相关推荐