关于包:使用同级目录的python(3.4)中的绝对或相对导入

Absolute or Relative Imports in Python (3.4) with Sibling Directories

本问题已经有最佳答案,请猛点这里访问。

我的包要复杂得多,但是这里的所有东西都被剥离出来,并作为一个例子更容易阅读:

1
2
3
4
5
6
7
8
9
sound/                        
      __init__.py              
      formats/                
              __init__.py
              wavread.py
              wavwrite.py
      effects/                  
              __init__.py
              echo.py

(注意:我从官方教程中借用了这个结构)

我希望能够引用wavwrite.py中的echo.py。

在wavwrite.py中,我这样引用:

1
from ..effects import echo

我得到这个错误:

1
2
3
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中,我这样引用:

1
from effects import echo

1
import effects.echo as echo

我得到这个错误:

1
ImportError: No module named 'effects'

这一切对我来说都是正确的,基于我如何理解这应该起作用,这让我发疯。一定是我错过了一些简单的事情。


所以我在其他地方找到了答案,但我不喜欢:

1
2
3
4
5
from sys import path
from os.path import dirname as dir
path.append(dir(path[0]))

from effects import echo

这个功能,但它看起来很难看,而且似乎是不必要的。有人能改进一下吗?