Python(3.4)中的绝对或相对导入与同级目录

3

我的软件包要复杂得多,但这里是一个简化的例子,以便更容易阅读:

sound/                         
      __init__.py               
      formats/                 
              __init__.py
              wavread.py
              wavwrite.py
      effects/                  
              __init__.py
              echo.py

(注:我从官方教程中借用了这个结构)
我想要能够从中引用。
在中,我通过以下方式进行引用:
from ..effects import echo

我收到了这个错误:

File "C:\sound\formats\wavwrite.py", line 1, in <module>
   from ..effects import echo
SystemError: Parent module '' not loaded, cannot perform relative import

我有一个朋友建议我尝试使用绝对导入,但在这种情况下,我遇到了不同的问题。
wavwrite.py中,我是这样引用的:
from effects import echo

或者

import effects.echo as echo

我得到了这个错误:

ImportError: No module named 'effects'

这在我看来似乎是正确的,基于我对它应该如何工作的理解。但它让我感到很疯狂。一定有些简单的东西我没注意到。

尝试使用 "from effects import echo",因为effects包和wavwrite在同一个名为“formats”的包中,这可能会起作用。 - Tanveer Alam
@TanveerAlam,我实际上尝试过“from effects import echo”和“import effects.echo as echo”,但两者都产生了“ImportError: No module named 'effects'”的结果。 - raiderrobert
导入应该像这样:'from .effects import echo' - Anurag_user3239660
1个回答

1

我在Stack Overflow上找到了一个答案,但我不喜欢它:

from sys import path
from os.path import dirname as dir
path.append(dir(path[0]))

from effects import echo

这个函数能够正常运行,但是看起来很丑陋,而且似乎是不必要的。有没有人能够改进一下?

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接