前言

最近在写一个Python的工具,为了使代码清晰易阅读,我分了若干个模块.模块间是有层次关系的,所以此时有必要引入"包(package)".

通过一个小的Demo展示了如何在包和模块间互相引用

Demo

代码树状图如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
└── relative_import
    ├── main.py
    ├── subpackage1
    │   ├── __init__.py
    │   ├── module_x.py
    │   └── module_y.py
    └── subpackage2
        ├── __init__.py
        └── module_z.py

3 directories, 6 files

其中main.py是入口,引用关系如下:

1
2
3
main-->module_x
module_x-->module_y
module_y-->module_z

我们囊括如下几种情况:

  • 引用子目录的模块
  • 引用同级模块
  • 引用不同目录的模块

包(Package)

包是若干模块的一个集合,一个文件夹变成包的方法就是在其中放入__init__.py文件.在导入包的时候,该文件将会首先执行文件.

所以,在我们的代码中,subpackage1和subpackage2是两个包.

模块(module)

模块,简而言之就是一个文件.文件名除去后缀就是模块名了.

函数和类

在导入后,使用中是不区分函数和类的.在后面的代码中,我们将会看到.

示例代码

下面是我写的小例子,满足了我开发中的分类需求. github Demo 在执行了main.py后,将会依次执行module_x,module_y,module_z中的代码.

参考资料

csdn 不同层级导入 python导入模块