繁体   English   中英

带有和不带有命名空间的Python导入包

[英]Python import package with and without it's namespace

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

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

在获得软件包之前, interpreter.py将使用命令import blast导入blast.py 现在,对于该软件包,我不得不说import sound.blast as blast

尽管我对此不介意,但我希望既可以使用该语句将sound包导入其目录之外,也可以直接运行interpreter.py 但是,如果我直接运行interpreter.py ,则会收到导入错误,提示该sound不存在。

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

try:
    import sound.blast
except ImportError:
    import blast

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

另一个解决方法是。

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

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

import sound.blast

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

希望能帮助到你

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

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

然后可以使用更复杂的名称空间,例如sound.blast.driver.specification

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM