绝对路径导入“来自路径导入*”有效,但不“导入路径为”

时间:2020-08-03 09:30:57

标签: python python-3.x python-3.6 python-import

我刚刚开始从事一个项目,其中导入结构是我从未见过的。

这是包装的结构

 foo/
    __init__.py
    bar/
        __init__.py
        module1.py
        module2.py

这是bar/__init__.py的内容:

from .module1 import *
from .module2 import *

module1.py仅向module2导入(为空),但是使用其在项目中的绝对路径:

from foo.bar.module2 import *

foo目录内部运行代码时,我可以毫无问题地导入module1

python -c "import foo.bar.module1" # This will raise no error

但是,有人告诉我,从模块中使用import *是不好的做法(除了使代码难以阅读),所以我决定通过以下方式替换foo/bar/module1.py中的导入:

import foo.bar.module2 as module2

但是,在尝试执行python命令时,我现在得到了AttributeError

python -c "import foo.bar.module1"
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/Users/loicm/test_structure/foo/bar/__init__.py", line 1, in <module>
    from .module1 import *
  File "/Users/loicm/test_structure/foo/bar/module1.py", line 1, in <module>
    import foo.bar.module2 as mod
AttributeError: module 'foo' has no attribute 'bar'

我很困惑,因为根据我的理解,不同的导入命令将是等效的,因此,如果其中一个引发错误,第二个也将如此

(我知道我可以不导入from ... import *而不导入*来使它工作,但是并不能解释为什么不起作用)

0 个答案:

没有答案