gpt4 book ai didi

Python 在我的包中找不到模块

转载 作者:行者123 更新时间:2023-11-28 16:37:01 25 4
gpt4 key购买 nike

我一定是遗漏了一些关于用 Python 构建包的非常基本的东西。当我按照 https://docs.python.org/2/tutorial/modules.html#packages 的指南创建包时并导入它,Python 找不到任何模块。例如,假设我创建了具有以下结构的包 holygrail:

  • chalice /
    • __初始化__.py
    • 骑士.py

我将 __init__.py 留空,因为文档说我可以,而且我只是想制作一个基本包作为开始。在 knights.py 中我有:

def say():
print 'Ni!'

如果我尝试 import holygrail,Python 不会给出任何错误,但是 holygrail.knights.say() 会导致 Python 告诉我“'module'对象 [holygrail] 没有属性 'knights'。”但是,如果我通过 from holygrail import knights 专门导入骑士,则 knights.say() 会起作用。此外,holygrail.knights.say() 也可以。

我尝试添加行

__all__  = ['knights']

在 __init__.py 文件中,但这并没有改变行为。

如何构造一个包,以便 import package 加载所有模块,允许像 package.module.function() 这样的语句?

最佳答案

Python 不会隐式导入整个包层次结构。您必须使用 __init__.py 文件明确说明要在包的哪个级别导入什么。

当您在 __init__.py 中设置 __all__ = ['knights'] 时,它仅适用于该模块的 import all 语句,例如:

>>> import holygrail
>>> holygrail.knights.say()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'knights'

>>> from holygrail import *
>>> knights.say()
Ni!

它还可以充当全部导入 的过滤器,仅从模块中导入指定的内容。

要在 import holygrail 上自动导入 knights,您必须将 import knightsfrom 。将骑士 ( intra-package or relative import ) 导入 __init__.py。您必须明确地对每个模块执行相同的操作。

关于Python 在我的包中找不到模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24788869/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com