第5章:模块与包(Modules and Packages)
一、导读
1.1 本章学习目标
第5章讲解 Python 的模块和包系统。模块是代码组织的基本单位,包是模块的集合。
1.2 为什么第五章如此重要
模块和包是大型 Python 项目的基础。理解它们才能组织好代码结构。
1.3 核心问题引导
模块如何创建和导入?
包的结构是什么?
相对导入和绝对导入有什么区别?
__init__.py 的作用是什么?
二、核心概念详解
5.1 模块
python
# 创建模块:my_module.py
def greet(name):
return f"Hello, {name}!"
PI = 3.14159
# 导入模块
import my_module
print(my_module.greet("Alice"))
print(my_module.PI)
# 导入特定内容
from my_module import greet, PI
# 别名
import my_module as mm
from my_module import greet as g5.2 包
my_package/
├── __init__.py
├── module1.py
├── module2.py
└── subpackage/
├── __init__.py
└── module3.pypython
# 导入包中的模块
from my_package import module1
from my_package.subpackage import module3
# 使用 __init__.py 简化导入
# my_package/__init__.py
from .module1 import func1
from .module2 import func2
# 现在可以
from my_package import func1, func25.3 导入机制
python
# 绝对导入(推荐)
from my_package.module1 import func
# 相对导入
from .module1 import func # 同级
from ..module2 import func # 上级
from .subpackage.module3 import func # 子包
# sys.path 和导入顺序
import sys
sys.path.insert(0, "/custom/path")
import my_module三、实战案例
5.1 项目结构
my_project/
├── setup.py
├── README.md
├── src/
│ └── my_package/
│ ├── __init__.py
│ ├── core/
│ │ ├── __init__.py
│ │ ├── engine.py
│ │ └── utils.py
│ ├── api/
│ │ ├── __init__.py
│ │ └── routes.py
│ └── config.py
└── tests/
├── __init__.py
└── test_core.py四、本章小结
模块是代码组织的基本单位,包是模块的集合。使用绝对导入,合理使用 __init__.py 简化导入。
五、思考与练习
模块和包有什么区别?
相对导入和绝对导入如何选择?
__init__.py 的作用是什么?
如何组织大型项目的代码结构?
如何处理循环导入?