上一章我们学习了 Python 错误与异常,让程序更稳定健壮、从容应对运行时错误。本章将学习模块与包,掌握代码复用、避免命名冲突、工程化组织代码的核心方法,从单文件编程迈向模块化、包化开发,为大模型项目工程化架构打下坚实基础。
12.1 模块概述
Python 中以.py 结尾的源文件就是一个模块(Module),模块内可包含变量、函数、类等代码,用于实现某一特定功能。
- 3、避免名称冲突,同名变量 / 函数可放在不同模块
12.2 创建模块
模块名区分大小写,不能与 Python 标准模块重名。
# 模块名:my_add.pynum = 100def add(a, b): """求两个数的和""" return a + b
12.3 导入模块
Python 提供 4 种导入方式,满足不同使用场景。
12.3.1 全部导入 import
导入模块所有成员,通过模块名。成员名访问,同一模块仅导入一次。
# 导入模块import my_add# 使用模块成员print(my_add.add(1, 2)) # 3print(my_add.num) # 100# 起别名简化调用import my_add as a1print(a1.add(1, 2))
12.3.2 局部导入 from import
仅导入指定成员,直接用成员名访问;未导入成员不可用,重名成员后导入覆盖先导入。
# 仅导入add函数from my_add import add print(add(1, 2)) # 3# print(num) # 报错:未导入num# 别名区分重名成员from my_add import num as a1from my_multi import num as m1print(a1) # 100print(m1) # 200
12.3.3 全局导入 from import *
导入模块内所有非单下划线开头的成员,简洁但易冲突。
from my_add import *print(add(1, 2))print(num)
12.3.4 模块搜索顺序
导入模块时,Python 按以下路径查找:
# 查看模块搜索路径import sysprint(sys.path)# 临时添加搜索路径sys.path.append("./..")
12.3.5 all 控制导入范围
仅对from ... import *生效,限定可导入的成员。
# my_add.py__all__ = ["num", "add"] # 仅允许导入num和addnum = 100num1 = 200 # 无法被*导入
12.3.6 name 避免测试代码执行
- 1、文件直接运行:
__name__ == "__main__" - 2、文件作为模块导入:
__name__ == 模块名
# my_add.pydef add(a, b): return a + b# 仅直接运行时执行测试代码if __name__ == "__main__": print(add(10, 20)) # 30
12.4 dir () 内置函数
dir()用于查看对象的属性、方法或当前作用域的所有名称。
# 查看模块成员import mathprint(dir(math))# 查看对象成员class MyClass: def __init__(self): self.x = 1obj = MyClass()print(dir(obj))
12.5 包概述
包是管理模块命名空间的文件夹,必须包含__init__.py文件,用包名.模块名区分层级,适合管理多个关联模块。
sound/ # 顶级包├── __init__.py # 包初始化文件├── formats/ # 子包├── effects/ # 子包└── filters/ # 子包
12.6 创建包
- 1、新建文件夹作为包,必须添加
__init__.py(可空)
graphic/ # 包├── __init__.py├── circle.py # 圆形计算模块└── rectangle.py # 矩形计算模块
# circle.pyPI = 3.1415926def area(radius): return PI * radius * radius
12.7 导入包
3 种常用导入方式,灵活调用包内模块成员。
12.7.1 全局导入
import graphic.circleprint(graphic.circle.area(10))
12.7.2 导入包内模块
from graphic import circleprint(circle.area(10))
12.7.3 导入模块成员
from graphic.circle import areaprint(area(10))
12.7.4 all 控制包导入
在__init__.py设置__all__,限定from ... import *可导入的模块。
# graphic/__init__.py__all__ = ["circle"]
12.8 常用标准库
Python 自带的内置库,开箱即用,覆盖开发常用功能:
12.9 引入第三方库
Python 官方库无法满足需求时,使用pip安装第三方库。
12.9.1 pip 常用命令
# 查看已安装库pip list# 安装库pip install 包名# 卸载库pip uninstall 包名# 国内镜像加速(清华源)pip install -i https://pypi.tuna.tsinghua.edu.cn/simple/ 包名
12.9.2 PyCharm 可视化安装
12.10 打包自己的库并安装
将自定义包打包,可本地安装或分享使用。
- 1、安装依赖:
pip install setuptools
from distutils.core import setupsetup( name="graphic", version="1.0", py_modules=["graphic.circle", "graphic.rectangle"],)
3、执行打包:python setup.py sdist
- 4、本地安装:
pip install 打包文件路径
本章核心总结
- 1、模块:.py 文件即模块,实现代码复用、避免命名冲突
- 2、导入:import/from import/from import *,按需选择,__all__控制范围
- 3、包:带__init__.py 的文件夹,层级化管理模块
- 4、name:区分直接运行 / 模块导入,保护测试代码
- 5、库管理:标准库直接用,第三方库 pip 安装,自定义包可打包发布
掌握模块与包,你就能用工程化思路组织大模型项目代码,让项目结构清晰、易于维护、方便协作。