我在导入模块时遇到问题。 如果我使用,
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.
苹果是一个包。我可以导入其他包。
答案 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