使 python3 子包模块可用于在主包命名空间中导入

Make python3 subpackage module available for import in main package namespace

我有以下目录结构

mainpackage
├── __init__.py
└── subpackage
    ├── __init__.py
    └── module.py

Module.py 包含

def test():
    print("test called")

使用 python3 我希望使 module.py 模块可用于在 mainpackage 命名空间中导入。到目前为止,我的主包 __init__.py 文件看起来像这样

from .subpackage import module

我希望能够打电话

import mainpackage.module

但这抛出

ImportError: No module named 'mainpackage.module'

为了清楚起见,我不是希望将测试函数导入主包命名空间——我想要整个模块。这可能吗 ?任何帮助将不胜感激。

以这种方式导入 from mainpackage.subpackage import module 并且您不需要 from .subpackage import module 在初始化文件中

据我所知,您无法像您尝试的那样在主包的命名空间中提供子包的模块:

import mainpackage.module

mainpackage 的子目录中查找模块,而不是在任何其他(更深的)子目录中。

您在 mainpackage\__init.py__ 中尝试的是正确的。你的

from .subpackage import module 

将使该模块在 mainpackage 级别上可用。如果您输入 IPython console

import mainpackage
mainpackage.module

将给出以下输出

<module 'mainpackage.subpackage.module' from 'your\path\mainpackage\subpackage\module.py'>

但是import mainpackage.module还是不行。如果您现在想使用 module 作为实例,您必须使用

from mainpackage import module

这将允许您像这样使用您的函数

module.test