我最近一直在编写相当多的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
包的几个子文件夹中时,可以使用。
答案 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
命名空间外部获得,即使它实际上可能深埋在某些复杂的结构中。