3

我有这个文件夹结构:

package/
    __init__.py
    misc/
        __init__.py
        tools.py
    subpackage/
        __init__.py
        submodule.py

我在submodule.py,我想进口misc.tools。我不想使用绝对导入来导入package.misc.tools,因为这样我的包只有在 PYTHONPATH 上时才能工作。所以我想使用相对进口。但是,我也希望导入的名称是misc.tools,而不仅仅是tools.

是否可以?

4

1 回答 1

6

关于什么...:

from .. import misc
from ..misc import tools as _

print misc.tools.__file__

正如确认的那样,这使得misc.tools可用,print并且具有正确的名称和内容。

不可避免地,它还会将一个模块绑定到某个裸名——我选择_了一个典型的“一次性裸名”,但当然del _,如果你愿意,你可以在此之后立即进行,这不会影响misc.tools.

此外,miscset in its __init__.py(或特别是 in tools.py)的任何其他属性都将可用,但是,如果裸名misc本身可用(如果需要复合名称misc.tools,则必须如此),那么它将不可避免地具有它构建的所有属性为自己(或从其他执行的代码为它外部构建)。

于 2009-11-04T02:40:07.943 回答