Python(3.4)中的绝对或相对导入与兄弟目录[重复]

Posted

技术标签:

【中文标题】Python(3.4)中的绝对或相对导入与兄弟目录[重复]【英文标题】:Absolute or Relative Imports in Python (3.4) with Sibling Directories [duplicate] 【发布时间】:2015-01-16 07:11:24 【问题描述】:

我的包要复杂得多,但这里的所有内容都被剥离并更易于阅读作为示例:

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

(注:这个结构是从the official tutorial借来的)

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

wavwrite.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”,效果包和 wavwrite 在同一个包“格式”中可能会起作用 @TanveerAlam,我实际上尝试过“from effects import echo”和“import effects.echo as echo”,都产生结果“ImportError: No module named 'effects'” 导入应该类似于'from .effects import echo' 【参考方案1】:

于是我找到了答案elsewhere on SO,但我不喜欢它:

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

from effects import echo

这个功能,但是看起来很丑,看起来应该是没必要的。任何人都可以对此进行改进吗?

【讨论】:

以上是关于Python(3.4)中的绝对或相对导入与兄弟目录[重复]的主要内容,如果未能解决你的问题,请参考以下文章

在Python中以绝对路径或者相对路径导入文件(或模块)的方法

Python3 中 的 绝对导入 与 相对导入

python3绝对路径,相对路径

Python 导入相对路径

如何在 Python 模块中正确使用相对或绝对导入?

绝对路径与相对路径问题