包含包中的引用对象?

2024-03-29 02:31:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个包spam,它包含变量_eggs__init__.py中,在boiler.py,我有类Boiler。你知道吗

Boiler中,我想引用包的__init__.py文件中的_eggs。有没有办法让我这么做?你知道吗


Tags: 文件pyboilerinitspameggs办法
1条回答
网友
1楼 · 发布于 2024-03-29 02:31:43

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

from . import _eggs

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

python spam/boiler.py

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

但是,如果将当前工作目录设置为包含“spam”文件夹的目录,则可以按以下方式执行模块:

python -m spam.boiler

这就给了口译员足够的信息来识别锅炉.py位于模块层次结构中,并正确解析相对导入。你知道吗

这只适用于Python2.6或更高版本—以前的版本根本无法处理main的显式相对导入。(见PEP 366了解血淋淋的细节)。你知道吗

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

相关问题 更多 >