This question already has answers here:
Imports in __init__.py and `import as` statement
                                
                                    (4个答案)
                                
                        
                                2年前关闭。
            
                    
我的文件系统结构:


main.py
lib/


__init__.py
subpackage/


__init__.py
app.py
sched.py




main.py:

import lib.subpackage


lib / __ init__.py为空。

lib / subpackage / __ init__.py:

import lib.subpackage.sched
import lib.subpackage.app


lib / subpackage / app.py:

import lib.subpackage.sched as foo


lib / subpackage / sched.py为空。



我收到此错误:

Traceback (most recent call last):
  File "c:\Users\logix\Desktop\code_\from_linux\dbg\main.py", line 1, in <module>
    import lib.subpackage
  File "c:\Users\logix\Desktop\code_\from_linux\dbg\lib\subpackage\__init__.py", line 2, in <module>
    import lib.subpackage.app
  File "c:\Users\logix\Desktop\code_\from_linux\dbg\lib\subpackage\app.py", line 1, in <module>
    import lib.subpackage.sched as foo
AttributeError: module 'lib' has no attribute 'subpackage'


我从命令行使用Python 3.6.4。

有任何想法吗?

最佳答案

使用别名时,这是导入机制中的一个已知错误;报告为issue #23203


  从包中导入子{module,package}的别名会在导入时引发AttributeError。
  
  我们有三个嵌套的包:foo-> bar-> bazbar包导入foo.bar.baz。我们尝试import foo.bar。除非我们尝试为foo.bar.baz导入中的foo.bar别名加上import ... as ...语法,否则这将很好地工作。


该错误修正是Python 3.7的一部分(当前仅在alpha版本中)。

解决方法是使用相对导入:

from . import sched as foo

10-08 07:59
查看更多