我从绝对导入切换到相对导入,我的包不再导入

2024-06-16 12:27:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个Python包,workingnotworking。包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

我想找一个有知识的人来解释为什么绝对导入有效而相对导入无效

(第二,我愿意接受关于如何解决对话框和视图之间的相互依赖性的建议,正是这些建议让我一开始就陷入了这个棘手的困境。)


Tags: infrompyimport内容initmainline