我有一个名为spam的包,其中包含在同一个包中的__init__.py中的变量_eggs,在boiler.py中,我有类Boiler。
在Boiler中,我希望在包的__init__.py文件中引用_eggs。有没有办法可以做到这一点?
发布于 2011-02-03 15:07:38
检索该值的最合适方法是通过显式的相对导入:
from . import _eggs但是,要记住的一件事是,以下命令行调用将无法工作:
python spam/boiler.py这不起作用的原因是解释器无法将任何直接执行的文件识别为包的一部分,因此相对导入将失败。
但是,通过将当前工作目录设置为包含"spam“文件夹的目录,您可以将该模块执行为:
python -m spam.boiler这为解释器提供了足够的信息来识别boiler.py在模块层次结构中的位置,并正确地解析相对导入。
这只适用于Python2.6或更高版本-以前的版本根本不能处理从main的显式相对导入。(有关详细信息,请参阅PEP 366 )。
如果您只是从另一个文件执行import spam.boiler,那么这应该适用于任何允许显式相对导入的Python版本(尽管Python2.5可能需要from __future__ import absolute_imports才能正确启用此功能)
https://stackoverflow.com/questions/4882960
复制相似问题