第二十章:模块与包
本章目标
完成本章学习后,你将能够:
- 创建和使用模块
- 组织代码为包
- 理解导入机制
- 管理项目结构
模块基础
什么是模块
模块是包含Python定义和语句的文件,文件名即模块名加.py。
# mymodule.py def greet(name): return f"Hello, {name}!" PI = 3.14159 class Calculator: def add(self, a, b): return a + b # 使用模块 import mymodule print(mymodule.greet("Alice")) print(mymodule.PI) calc = mymodule.Calculator()
导入方式
# 导入整个模块 import math print(math.sqrt(16)) # 导入特定内容 from math import sqrt, pi print(sqrt(16)) print(pi) # 使用别名 import numpy as np from math import sqrt as square_root # 导入所有(不推荐) from math import * # 相对导入(在包内) from . import module_a from .. import parent_module
包组织
包结构
my_package/
__init__.py
module_a.py
module_b.py
subpackage/
__init__.py
module_c.py
# __init__.py 文件内容 from .module_a import function_a from .module_b import ClassB __version__ = "1.0.0" __all__ = ['function_a', 'ClassB']
使用包
import my_package my_package.function_a() from my_package import ClassB obj = ClassB() from my_package.subpackage import module_c
模块搜索路径
import sys print(sys.path) # 模块搜索路径 # 添加自定义路径 sys.path.append('/path/to/modules') # 使用PYTHONPATH环境变量 # export PYTHONPATH=/path/to/modules:$PYTHONPATH
__name__和主程序
# mymodule.py def main(): print("Running as main program") if __name__ == "__main__": # 直接运行时执行 main() else: # 被导入时执行 print("Imported as module")
本章练习
1. 创建包含多个模块的包 2. 实现可执行的模块 3. 组织真实项目结构 4. 编写setup.py
下一章:第二十一章:虚拟环境