python
主页 > 脚本 > python >

python自定义包的实现

2024-05-14 | 佚名 | 点击:

1. 代码目录

创建自定义包的时候,原理是当 python 检测到一个目录下存在 __init__.py 文件时,python 就会把它当成一个模块(module)。

下面这个例子是网上整理的代码,但是有些小改动,可以直接拿来就用。
看代码结构:

在这里插入图片描述

2. 每个目录的代码

parent 主目录

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

import sys

 

# 这一行需要放在最前面,也是最关键

# 将包含parent包的路径添加进系统路径

sys.path.append(r"..")

 

 

print('-----开始import-----\n')

 

import parent.pack2.mod2_1          # 第1种 引用方法

import parent.pack2.mod2_2 as p2m2  # 第2种 引用方法

from parent.pack.mod import *       # 第3种 引用方法

 

if __name__ == '__main__':

    print('-----开始main-----\n')

 

    # 第1种 引用的调用方法

    parent.pack2.mod2_1.func()

    # 第2种 引用的调用方法

    p2m2.func()

    # 第3种 引用的调用方法

    func()

     

    #  import 就会把注册在包 __init__.py 文件中 __all__ 列表中的子模块和子包导入到当前作用域中

    print('\npack2包中的模块有:')

    print(parent.pack2.__all__)

1

2

3

4

if __name__ == '__main__':

    print('parent 作为主程序运行')

else:

    print('parent 初始化')

pack 包

a. __init__.py

1

2

3

4

if __name__ == '__main__':

    print('作为主程序运行')

else:

    print('Pack初始化')

b. config.py

1

run = 9999

c. mod.py

1

2

3

4

5

6

7

8

# mod

def func():

    print('pack.mod.func()')

 

if __name__ == '__main__':

    print('mod 作为主程序运行')

else:

    print('mod 被另一个模块调用')

pack2 包

a. __init__.py

1

2

3

4

5

6

7

8

9

# Pack2 的 __init__.py

 

# __all__ 用于当前Pack2包是所包含的模块

__all__ = ["mod2_1", "mod2_2", "mod2_3"]

 

if __name__ == '__main__':

    print('Pack2作为主程序运行')

else:

    print('Pack2初始化')

b. mod2_1.py

1

2

3

4

5

6

7

8

9

10

11

12

# 这里导入上一级目录下的 pack 下面的 config 文件

from parent.pack  import config

 

# mod2

def func():

    print('pack2.mod2_1.func()')

    print("config: " + str(config.run))

 

if __name__ == '__main__':

    print('mod2_1 作为主程序运行')

else:

    print('mod2_1 被另一个模块调用')

c. mod_2.py

1

2

3

4

5

6

7

8

# mod2

def func():

    print('pack2.mod2_2.func()')

 

if __name__ == '__main__':

    print('mod2_2 作为主程序运行')

else:

    print('mod2_2 被另一个模块调用')

代码:

https://gitee.com/zhiyong47/vine/tree/master/effective_codes/parent

原文链接:
相关文章
最新更新