【问题标题】:Make python3 subpackage module available for import in main package namespace使 python3 子包模块可用于在主包命名空间中导入
【发布时间】:2019-03-28 17:05:06
【问题描述】:

我有以下目录结构

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

Module.py 包含

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

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

from .subpackage import module

我希望能够打电话

import mainpackage.module

但这会引发

ImportError: No module named 'mainpackage.module'

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

【问题讨论】:

    标签: python python-3.x python-import importerror


    【解决方案1】:

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

    import mainpackage.module
    

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

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

    from .subpackage import module 
    

    将使模块在mainpackage 级别上可用。如果你在 IPython 控制台中输入

    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
    

    【讨论】:

      【解决方案2】:

      from mainpackage.subpackage import module这种方式导入它,你不需要在init文件中from .subpackage import module

      【讨论】:

      • 我知道你可以这样做,但它不能在 mainpackage 命名空间中使用。我想调用 import mainpackage.module
      • 你在主包中有另一个文件使用子包吗?
      • 暂时没有
      • 只需调用import mainpackage.subpackage.module,因为在mainpackage init 文件中导入的内容没有任何区别,python 仍然会抛出错误。基本上你想导入导入,但这不起作用
      猜你喜欢
      • 1970-01-01
      • 2012-05-28
      • 2018-03-07
      • 2021-01-06
      • 2017-02-25
      • 2017-05-28
      • 2021-03-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多