我遵循Python 3模块教程,我无法获得绝对或相对的包内导入工作。
具体来说,我从教程中复制了项目结构。sound文件夹位于我的主/home/user/目录中。所有项目文件(不包括filters/vocoder.py和effects/surround.py)都是空的,并且是使用touch生成的。
sound/ Top-level package
__init__.py Initialize the sound package
formats/ Subpackage for file format conversions
__init__.py
wavread.py
wavwrite.py
aiffread.py
aiffwrite.py
auread.py
auwrite.py
effects/ Subpackage for sound effects
__init__.py
echo.py
surround.py
reverse.py
filters/ Subpackage for filters
__init__.py
equalizer.py
vocoder.py
karaoke.py根据指令,filters/vocoder.py包含:
from sound.effects import echo执行此文件时,它将导致导入错误:
user@pc:~/sound$ python filters/vocoder.py
Traceback (most recent call last):
File "filters/vocoder.py", line 1, in <module>
from sound.effects import echo
ImportError: No module named 'sound'
user@pc:~/sound$ cd filters/
user@pc:~/sound/filters$ python vocoder.py
Traceback (most recent call last):
File "vocoder.py", line 1, in <module>
from sound.effects import echo
ImportError: No module named 'sound'同样,我在effects/surround.py中分别执行了以下每一行代码(我将行注释掉#并重新运行脚本):
from . import echo
from .. import formats
from ..filters import equalizer在执行时,其结果是:
user@pc:~/sound$ python effects/surround.py
Traceback (most recent call last):
File "effects/surround.py", line 1, in <module>
from . import echo
SystemError: Parent module '' not loaded, cannot perform relative import
user@pc:~/sound$ cd effects/
user@pc:~/sound/effects$ python surround.py
Traceback (most recent call last):
File "surround.py", line 1, in <module>
from . import echo
SystemError: Parent module '' not loaded, cannot perform relative import我做错了什么,为什么我不能让绝对和相对进口在我的包中工作呢?
下面是一个应该有助于复制项目的脚本:
mkdir ~/sound
touch ~/sound/__init__.py
mkdir ~/sound/formats
touch ~/sound/formats/__init__.py
touch ~/sound/folder/wavread.py
touch ~/sound/folder/wavwrite.py
touch ~/sound/folder/aiffread.py
touch ~/sound/folder/aiffwrite.py
touch ~/sound/folder/auread.py
touch ~/sound/folder/auwrite.py
mkdir ~/sound/effects
touch ~/sound/effects/__init__.py
touch ~/sound/folder/echo.py
touch ~/sound/folder/surround.py
touch ~/sound/folder/reverse.py
mkdir ~/sound/filters
touch ~/sound/filters/__init__.py
touch ~/sound/folder/equalizer.py
touch ~/sound/folder/vocoder.py
touch ~/sound/folder/karaoke.py
echo "from sound.effects import echo" >> ~/sound/filters/vocoder.py
echo "from . import echo" >> ~/sound/effects/surround.py
echo "from .. import formats" >> ~/sound/effects/surround.py
echo "from ..filters import equalizer" >> ~/sound/effects/surround.py发布于 2016-07-16 06:15:55
我只是在看教程。我不读到from sound.effects import echo应该像filters/vocoders.py一样工作。本教程中的内容是:
包的用户可以从包中导入各个模块,例如:
import sound.effects.echo因此,这就好像用户可以从当前目录引用sound目录一样。正如一些注释所述,要做到这一点,用户需要与sound位于同一个目录中,或者将sound目录添加到PATH变量中。如下所示:
import sys
sys.path.append( <path to sound> )
from sound.effects import echo另见:从相对路径导入模块
在接下来的教程中,他们会谈到您想要做的事情,即包内引用。您可以在不将sound添加到PATH的情况下使用此技术。
例如,从filters/vocoders.py模块导入echo应该是可行的。
from ..effects import echohttps://stackoverflow.com/questions/38408123
复制相似问题