包含包中的引用对象?

时间:2011-02-03 05:54:27

标签: python namespaces python-3.x

我有一个包spam,其中包含_eggs中的变量__init__.py。在同一个包中,在boiler.py中,我有一个类{{1} }}

Boiler中,我想在包的Boiler文件中引用_eggs。有没有办法可以做到这一点?

1 个答案:

答案 0 :(得分:1)

检索该值的最合适方法是通过显式相对导入:

from . import _eggs

但是,要记住的一件事是,以下命令行调用将无法工作:

python spam/boiler.py

这不起作用的原因是解释器无法将任何直接执行的文件识别为包的一部分,因此相对导入将失败。

但是,将当前工作目录设置为包含“spam”文件夹的目录,您可以将模块执行为:

python -m spam.boiler

这为解释器提供了足够的信息来识别boiler.py在模块层次结构中的位置并正确解析相对导入。

这仅适用于Python 2.6或更高版本 - 以前的版本根本无法处理来自 main 的显式相对导入。 (有关血淋淋的详细信息,请参阅PEP 366。)

如果您只是从另一个文件执行import spam.boiler,那么这应该适用于允许显式相对导入的任何Python版本(尽管Python 2.5可能需要from __future__ import absolute_imports才能正确启用此功能)< / p>