导入中的奇怪行为

时间:2013-02-08 10:49:52

标签: python package python-import

我在导入模块时遇到问题。 如果我使用,

 import fruit as f
 print f.apple.juice.CALORIES_INT

这很有效。 并且

 import fruit.apple.juice as j
 print j.CALORIES_INT

不起作用。它抛出AttributeError: 'module' object has no attribute 'apple'。有关如何调试它的任何建议吗?

我的目录结构如下:

fruit  
--- __init__.py  
--- apple  
---------__init__.py  
--------- juice.py  
---------------CALORIES_INT is a variable declared here  
--- orange  
--------- __init__.py  
--------- shake.py  
---------------trying to access CALORIES_INT here by importing it. 
苹果是一个包。我可以导入其他包。

2 个答案:

答案 0 :(得分:0)

您需要将from . import apple添加到__init__.py包的fruit文件中。或者,您可以在同一位置使用from fruit import apple

嵌套包不会自动作为父包的属性提供,这仅在显式导入嵌套包后才有效。

如果您先到import fruit.apple,那么import fruit; fruit.apple就可以了。或者您在apple文件中明确导入fruit/__init__.py嵌套包,以确保import fruit; fruit.apple始终适用于fruit包的用户。

同样适用于juice包中的apple模块;您需要通过apple__init__.py中导入它来使其可用;添加from . import juice,或使用from fruit.apple import juice之类的绝对导入。

答案 1 :(得分:0)

尝试:

 from fruit.apple import juice as j