【问题标题】:Confused about Python sub-sub-packages对 Python 子子包感到困惑
【发布时间】:2012-01-04 03:15:24
【问题描述】:

正如标题所说,我对子子包感到困惑。我的包结构如下:

draw \
    __init__.py

    base \
        __init__.py
        utils.py
        events.py
        master.py
        basegui.py

现在,draw.base.events 的第一行如下:

import draw.base.utils as _utils

draw.base的第一行是:

from draw.base.events import Event, RenderEvent, InputEvent, MouseEvent, KeyboardEvent

只需使用 IDLE 检查代码中的 SyntaxErrors:

import draw.base as base

给出以下AttributeError

Traceback (most recent call last):
  File "<pyshell#0>", line 1, in <module>
    import draw.base
  File "Z:\Eigene Dateien\Eigene Dokumente\Python\draw\base\__init__.py", line 4, in <module>
    import draw.base.events as events
  File "Z:\Eigene Dateien\Eigene Dokumente\Python\draw\base\events.py", line 10, in <module>
    import draw.base.utils  as _utils
AttributeError: 'module' object has no attribute 'base'

谁能给我解释一下是什么问题?

【问题讨论】:

  • draw.base 是单独的文件吗?否则,我不明白您所说的“draw.base 的第一行是...”是什么意思。
  • 我相信他的意思是draw/base/__init__.py的第一行

标签: python module packages


【解决方案1】:

为了在draw.base.events 中导入draw.base.utils,Python 需要导入现在正在导入的draw.base,所以还没有draw.base。您可以在draw.base.events 中将import draw.base.utils 替换为import utils(您也可以在2.7、3.x 中使用from ..base import utilsfrom __future__ import absolute_import)来打破循环。

【讨论】:

  • 使用import draw.base &lt;&lt;newline&gt;&gt; import draw.base.utils 也不起作用,使用import .utils 也不起作用(包括future 导入)。 (Python 2.7)
  • 我必须在draw\__init__.py 中导入draw.base 吗?
  • import draw.base 无论如何都不会工作。 import .utils是语法错误,只能作为from ..base import utils使用。
  • 我想避免使用from xx import yy,因为我更喜欢其他语法。但是没有办法,我明白了。 ;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多