Python导入包有和没有它的命名空间

时间:2014-03-05 12:26:01

标签: python import package

我有一个名为sound的包,其目录结构如下:

sound/
|-- __init__.py
|-- interpreter.py
|-- blast.py

在我收到包裹之前,interpreter.py会使用blast.py命令导入import blast。现在有了这个包,我不得不说import sound.blast as blast

虽然我不介意这一点,但我希望能够同时使用该语句将sound包导入到其目录之外,还能运行{{ 1}}直接。但是,如果我直接运行interpreter.py,则会收到导入错误,指出interpreter.py不存在。

我目前的解决方案是这样的:

sound

但这感觉很难看。对此有更好的解决方案吗?

2 个答案:

答案 0 :(得分:1)

另一种解决方法是。

将以下行中的“try import”语句替换为interpreter.py文件。

import sys
sys.path.append("..")

import sound.blast

因此,父目录也将包含在路径中,然后在声音目录中导入sound.blast将不再是一个问题。

希望有所帮助

答案 1 :(得分:0)

sys.path.append("..")方法在我的程序中对于更复杂的命名空间实际上没有正常工作。我解决它的最好方法是:

if __package__ == 'sound':  
    import sound.blast  
else:  
    import blast

然后更复杂的命名空间工作,例如sound.blast.driver.specification