Python 导入名为与祖父母包相同的模块

Python 导入名为与祖父母包相同的模块,python,flask,Python,Flask,在Python2.6.6中,我有一个名为与其祖辈相同的模块。我的项目结构(使用Flask的web应用程序)大致如下所示: panel/ run.py panel/ __init__.py database.py views/ __init__.py root.py dash.py panel.py users/ __init__.py models.py 请注意,run.py旁边的包

在Python2.6.6中,我有一个名为与其祖辈相同的模块。我的项目结构(使用Flask的web应用程序)大致如下所示:

panel/
  run.py
  panel/
    __init__.py
    database.py
    views/
      __init__.py
      root.py
      dash.py
      panel.py
    users/
      __init__.py
      models.py
请注意,run.py旁边的包名是panel。我还有一个名为panel.views.panel的模块。如果从panel/_init__;upy.py中导入panel.views.panel,请使用以下三种样式之一:

from panel.views import panel
from panel.views import panel as panel_view
import panel.views.panel as panel_view
导入panel.py后,我的其他导入都不起作用。例如,panel.users.models尝试导入database.py,并引发此回溯:

Traceback (most recent call last):
  File "run.py", line 5, in <module>
    from panel import app
  File "/opt/www/panel/panel/__init__.py", line 8, in <module>
    from panel.views import root
  File "/opt/www/panel/panel/views/root.py", line 9, in <module>
    from panel import database;
ImportError: cannot import name database
回溯(最近一次呼叫最后一次):
文件“run.py”,第5行,在
从面板导入应用程序
文件“/opt/www/panel/panel/__init__uuu.py”,第8行,在
从panel.views导入根目录
文件“/opt/www/panel/panel/views/root.py”,第9行,在
从面板导入数据库;
ImportError:无法导入名称数据库
我在#pocoo IRC频道采访了一些人,从他们的描述来看,问题是从views/root.py中,Python认为
import panel.database
意味着从它旁边的panel.py导入
database

但这对我来说没有意义,因为它勾勒出了(看起来像什么)这个确切的问题,并将绝对导入设置为默认值以修复此问题。我使用的是Python 2.6.6,因此这应该是默认值。不过为了确定,我添加了来自uuu future uuuu import absolute u import的行
,但这并没有什么区别;导入database.py时发生相同的错误


重命名panel.py解决了这个问题,但是,我非常想知道为什么它在编写时不起作用,特别是如果我能做些什么来让它起作用的话。

你说你添加了来自uuu future\uuuuuu import absolute\u import
的行
,但你没有说是添加到哪个文件中的。确保将其添加到root.py


python教程的这一部分解释了您的情况:

请不要这样做。。。糟糕的风格…通常“糟糕的风格”和“无法以那种方式工作”之间是有区别的,即使是糟糕的风格,我也想理解为什么它不起作用。将这一行添加到root.py似乎已经解决了我的问题。但我不明白为什么,因为绝对导入应该是我的Python版本(2.6.6)的默认值。在PEP I链接中,Python 2.5需要导入绝对导入。同样来自PEP,“在Python2.6中,任何导致包内导入的import语句都将引发DeprecationWarning…”您对此有何评论?