Python 导入不一致的行为

标签 python import module

我有一个像这样的 py 文件,它出错了。

from world import acme

def make_stuff_happen():
    acme.account.foo()       # Works
    acme.subscription.bar()  # FAIL: "module 'object' has no attribute 'subscription'"

make_stuff_happen()

但这行得通!

from world import acme 
from world.acme import subscription

def make_stuff_happen():
    acme.account.foo()  # Works
    subscription.bar()  # Now this works.

make_stuff_happen()

我只能说 WTF,这可能是什么原因造成的? acme.accountacme.subscription 的行为至少应保持一致。

谢谢!

Update- acme文件夹的文件夹结构:

acme
|-- __init__.py
|-- account.py
|-- catalog.py
|-- core.py
|-- proxy.py
|-- subscription.py
`-- utils.py

__init__.py 是完全空白的。

最佳答案

子模块在模块文件夹中的 __init__.py 文件中被引用。 acme__init__.py 中似乎未引用 subscription

但是,当您执行 import world.acme.subscription 时,它知道在不与 __init__.py 交谈的情况下继续挖掘该文件夹。

根据您对__init__.py的描述为空,您应该在__init__.pyimport subscription

有关如何设置模块的更多信息,请参阅 documentation .有一个设置声音模块的很好的例子。

关于Python 导入不一致的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3320467/

相关文章:

Python:使用 __import__ 时执行相对导入?

csv - 如何在Odoo的csv导入中覆盖 "ir.sequence"字段?

python - python源代码中的sys模块在哪里?

python - Flask-Mail 队列消息被发送到不同的电子邮件

python - 如何检查设备是否已连接 Pyserial

python - 使用 psycopg2 复制到带有 ARRAY INT 列的表

python绝对导入子模块失败

android - 如何在monkeyrunner测试文件中导入一个py文件函数

来自工厂设计的 JavaScript 模块而不是类

python - 从长数据绘制 Pandas 的数据透视表