苦苦挣扎,了解python包和import语句

时间:2013-02-20 08:17:39

标签: python

我有这样的包

sound/
    __init__.py
   effects/
       __init__.py
       echo.py
   formats/
      __init__.py
     avi.py

在avi.py里面我有像这样的导入语句

from sound.effects import echo

此代码抛出 No Module Named sound.effect 错误

pythondocs我明白这是可能的。我正在搜索stackoverflow 并找到相关的问题和答案,但我无法理解它们。

请帮我解决这个问题。

谢谢,

Prawyn。

3 个答案:

答案 0 :(得分:2)

如果文件夹名称为effects,您为什么要尝试从effect导入?请改为from sound.effects import echo

另外,为什么要尝试从内部导入echo

答案 1 :(得分:2)

如果您从avi.py文件夹中运行formats,并且未调整PYTHONPATH,则Python将无法找到effects包。尝试从声音目录外部运行代码,修改PYTHONPATH环境变量,使其包含sound生存的目录,或者在运行时更改PYTHONPATH(请参阅例如this link)。

答案 2 :(得分:1)

我将假设sound.effect是一个拼写错误,而且是sound.effects。如果是这种情况,那么问题可能是由于您的项目结构。

如果您的项目的根级别是sound,如图中所示,并且已将其添加到PYTHONPATH(或任意数量的其他安装方法),那么Python将无法知道查找sound(因为没有相对于名为sound的根目录的目录。)

因此,通常您会看到包结构,例如:

sound/
    README
    LICENSE
    setup.py
    sound/
        __init__.py

......等等。

使用您当前的目录结构(如果我的假设是正确的),那么实际工作的导入是from effects import echo