如何构建模块以避免类似" import module.module.module"

时间:2015-03-23 23:37:31

标签: python module packages

我最近一直在编写相当多的Python代码,我正在努力弄清楚如何正确构建我的模块以允许简单导入。

我的模块结构如下:

/module
    /submod_1
        submod_1_class.py
    /submod_2
        submod_2_class.py

但我觉得必须使用以下内容导入submod_1_class.py内的课程非常烦人。

from module.submod_1.submod_1_class import class

我希望能够输入的是:

from module import class

我知道必须有一种方法可以让它更优雅,我浏览了site-packages文件夹并查看了numpy之类的流行模块,但我还没有能够弄清楚如何,例如:

import numpy
a = numpy.array([1,2,3,4,5])
numpy数组对象的定义深埋在numpy包的几个子文件夹中时,可以使用

1 个答案:

答案 0 :(得分:2)

您可以使用__init__.py文件来定义来自给定模块的import内容。例如,对您的结构进行非常简单的添加会从Class中提取submod_1_class,以便外部用户只需from module import Class

/module
    __init__.py
        from submod_1 import Class
    /submod_1
        __init__.py
            from submod_1_class import Class
        submod_1_class.py
    /submod_2
        submod_2_class.py

例如,在numpy中,顶级__init__.py包含a line,内容为:

from .core import *

这意味着/core/__init__.py中定义的所有内容都可以直接在numpy命名空间外部获得,即使它实际上可能深埋在某些复杂的结构中。