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

Boiler中,我要引用软件包的_eggs文件中的__init__.py。有办法可以做到吗?

最佳答案

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

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才能正确启用此功能)

关于python - 引用对象包含在包中?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4882960/

10-08 21:53