Python 3:导入由类似组件组成的模块名称。 AttributeError的

时间:2017-05-28 13:19:49

标签: python python-import

我有以下文件夹结构:

├── aaa
│   ├── __init__.py
│   ├── ttt
│   │   ├── aaa.py
│   │   └── __init__.py
│   └── ttt.py
├── __init__.py
├── t.py
└── ttt.py

主脚本 t.py

import sys
sys.path = ['.']
import ttt
import aaa.ttt
import aaa.ttt.aaa

print(ttt.get_name())
print(aaa.ttt.get_name2())
print(aaa.ttt.aaa.get_name3())

导入的脚本:

./ ttt.py

def get_name():
    return "ttt"

./ AAA / ttt.py

def get_name2():
    return "aaa/ttt"

./ AAA / TTT / AAA / ttt.py

def get_name3():
    return "aaa/ttt/aaa"

现在运行主脚本:

$ python -B t.py 
ttt
Traceback (most recent call last):
  File "t.py", line 10, in <module>
    print(aaa.ttt.get_name2())
AttributeError: module 'aaa.ttt' has no attribute 'get_name2'

这是什么问题?我使用的是Python 3.6.1。

修改

正如@AChampion评论的那样,我遇到了一个问题 aaa/ttt.pyaaa/ttt/__init__.py。但是,如果删除后者,我会在ModuleNotFoundError上获得import aaa.ttt.aaa

$ python -B t.py 
Traceback (most recent call last):
  File "t.py", line 7, in <module>
    import aaa.ttt.aaa
ModuleNotFoundError: No module named 'aaa.ttt.aaa'; 'aaa.ttt' is not a package

这是否意味着如果您在Python中有一个包aaa.bbb,那么您不能在名为aaa的包bbb中包含任何模块?这闻起来很糟糕,所以我想我必须在这里遗漏一些东西?

0 个答案:

没有答案