2

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

 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. 

苹果是一个包。我可以导入其他包。

4

2 回答 2

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模块appleapple您需要通过将其导入包中来使其可用__init__.py;添加一个from . import juice,或使用绝对导入,如from fruit.apple import juice.

于 2013-02-08T10:53:59.110 回答
0

尝试:

 from fruit.apple import juice as j
于 2013-02-08T10:54:03.773 回答