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 |
这个功能,但它看起来很难看,而且似乎是不必要的。有人能改进一下吗?