【问题标题】:Nested Package: AttributeError: module 'app' has no attribute嵌套包:AttributeError:模块'app'没有属性
【发布时间】:2016-02-23 17:09:27
【问题描述】:

我刚刚学习 python,来自 C# 和 Java 背景,我对导入系统感到很困惑。只是为了学习目的尝试运行一个简单的测试,但得到一个错误 AttributeError: module 'app' has no attribute 'example'

请看下面的代码,有人能解释一下为什么会抛出错误吗?我似乎只在包内有包时遇到此问题,如包“app”中包含的包“example”的实例所示

run.py

import app

app/__init__.py

import app.example

app/example/__init__.py

import app.example.a

app/example/a.py

import app.example.b
print("TESTING: " + str(app.example.b)) #error is thrown on this line

app/example/b.py

print("LOADED B")

抛出错误:

"C:\Program Files\Python 3.5\npwc-services\Scripts\python.exe" C:/Users/xxxxxxxx/PycharmProjects/untitled1/run.py
Traceback (most recent call last):
LOADED B
  File "C:/Users/xxxxxxxx/PycharmProjects/untitled1/run.py", line 1, in <module>
    import app
  File "C:\Users\xxxxxxxx\PycharmProjects\untitled1\app\__init__.py", line 1, in <module>
    import app.example
  File "C:\Users\xxxxxxxx\PycharmProjects\untitled1\app\example\__init__.py", line 1, in <module>
    import app.example.a
  File "C:\Users\xxxxxxxx\PycharmProjects\untitled1\app\example\a.py", line 2, in <module>
    print("TESTING: " + str(app.example.b))
AttributeError: module 'app' has no attribute 'example'

Process finished with exit code 1

目录结构:

【问题讨论】:

  • app/__init__.py 中尝试import .example,然后将其与其他模块和包一起使用。您需要在包中进行相对导入,而不是绝对导入。
  • 谢谢,直到您提到它,我才知道相对导入是可能的,但是您提供的确切语法不适用于 Python 3。我不得不这样做: from . example.app 导入一个
  • 更正,我最终使用 from 。导入示例,这似乎直接等同于您在评论中提供的内容。

标签: python


【解决方案1】:

运行.py

import app

app/init.py

from .example.app import a # or b or ...

【讨论】:

    猜你喜欢
    • 2020-02-04
    • 2017-05-30
    • 2019-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-12
    • 1970-01-01
    • 2018-04-14
    相关资源
    最近更新 更多