我有像this这样的包结构:
sound/
├── effects
│ ├── echo.py
│ ├── __init__.py
│ └── reverse.py
├── formats
│ ├── __init__.py
│ ├── waveread.py
│ └── wavewrite.py
└── __init__.py
然后,为了自动加载子模块
echo
和reverse
,我将以下导入语句添加到我的effects/__init__.py
文件中from . import echo
from . import reverse
但是,在导入
sound.effects
之后,尝试访问echo
和reverse
时仍然出现NameError:>>> import sound.effects
>>> echo
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'echo' is not defined
>>> reverse
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'reverse' is not defined
我想念什么吗?
最佳答案
是。您导入了sound.effects
,但不会将effects
的内容带入当前的名称空间。您仍然需要在以下位置引用它们:sound.effects.echo
和sound.effects.reverse
。
如果只想按名称引用它们,则需要导入这些名称:
from sound.effects import echo, reverse