====== 第二十章:模块与包 ======
===== 本章目标 =====
完成本章学习后,你将能够:
* 创建和使用模块
* 组织代码为包
* 理解导入机制
* 管理项目结构
===== 模块基础 =====
==== 什么是模块 ====
模块是包含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
下一章:[[python_course:chapter21|第二十一章:虚拟环境]]