我有两个Python包,working
和notworking
。包working
具有以下结构和内容:
working/
__init__.py # from . import views
dialogs.py # import views
views/
__init__.py # from . import main
main.py # from .. import dialogs
包notworking
在结构和内容上是相同的,但有一个例外:它“修复”了working/dialogs.py
中显示的非相对导入。因为我们不想意外导入错误的views
模块,对吧?:
notworking/
__init__.py # from . import views
dialogs.py # from . import views # That's better! Right?
views/
__init__.py # from . import main
main.py # from .. import dialogs
通过这个'改进',模块notworking
不再导入:
Python 2.7.6 (default, Jun 22 2015, 17:58:13)
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import notworking
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "notworking/__init__.py", line 2, in <module>
from . import views
File "notworking/views/__init__.py", line 2, in <module>
from . import main
File "notworking/views/main.py", line 2, in <module>
from .. import dialogs
File "notworking/dialogs.py", line 2, in <module>
from . import views
ImportError: cannot import name views
我希望知识渊博的人解释为什么绝对导入有效并且相对导入不起作用。
(其次,我愿意接受有关如何解决对话框和视图之间相互依赖关系的建议,这些建议让我首先进入了这个粘性检票口。)