我正在阅读这里的Python模块文档:https://docs.python.org/3/tutorial/modules.html#packages并尝试了解包内引用:https://docs.python.org/3/tutorial/modules.html#intra-package-references使用sound
示例创建相同的目录结构并将所有文件保留为空原来。根据链接文档:
当包被组织成子包时(与示例中的声音包一样),您可以使用绝对导入来引用兄弟包的子模块。例如,如果模块sound.filters.vocoder需要使用
sound.effects
包中的echo模块,则可以使用from sound.effects import echo
。
但是,当我在本地计算机上尝试此操作时,将sound/filters/vocoder.py
的内容设置为:
from sound.effects import echo
按以下方式运行:
$python vocoder.py
我收到错误:
Traceback (most recent call last):
File "vocoder.py", line 1, in <module>
from sound.effects import echo
ImportError: No module named sound.effects
如果我进入sound
目录并在iPython shell中尝试以下操作并尝试导入包:
In [2]: import filters.vocoder
---------------------------------------------------------------------------
ImportError Traceback (most recent call last)
<ipython-input-2-0217a888946e> in <module>()
----> 1 import filters.vocoder
/home/rootavish/sound/filters/vocoder.py in <module>()
----> 1 from sound.effects import echo
ImportError: No module named sound.effects
或
In [3]: import sound.filters.vocoder
---------------------------------------------------------------------------
ImportError Traceback (most recent call last)
<ipython-input-3-09d9adcc27d8> in <module>()
----> 1 import sound.filters.vocoder
ImportError: No module named sound.filters.vocoder
我还有问题。
那我在这里错过了什么?我认为绝对导入是使用子包时的方法。