Python 模块与包

程序变大,不可能全写在一个文件里。Python 用模块(module)包(package)组织代码——一个 .py 文件就是一个模块,一个目录就是一个包。这一章讲清怎么写自己的模块、用别人的模块(标准库和第三方包)。

1. 模块是什么?

模块就是一个 .py 文件。文件里定义的函数、类、变量,别的文件可以 import 进来复用。这是 Python 代码复用的基本单位。

2. import 的四种写法

# 1. 导入整个模块
import math
print(math.pi)               # 3.141592653589793
print(math.sqrt(16))         # 4.0

# 2. 导入并起别名(长名字太累时用)
import numpy as np
# print(np.array([1, 2, 3]))  # 假设装了 numpy

import pandas as pd

# 3. 从模块导入特定的函数/常量
from math import pi, sqrt
print(pi)                    # 3.141592653589793
print(sqrt(16))              # 4.0

# 4. 从模块导入并起别名
from math import sqrt as square_root
print(square_root(16))       # 4.0

# 5. 导入模块的全部内容(用 *)
# ⚠ 强烈不推荐!会污染命名空间,容易名字冲突
# from math import *           # ❌ 不要这样写

新手要点:

3. 自己写一个模块

写模块就是写一个普通的 .py 文件。在项目目录下创建 mymath.py

# === file: mymath.py ===
"""自定义数学工具模块"""
PI = 3.14159

def circle_area(radius):
    """计算圆的面积"""
    return PI * radius * radius

def circle_perimeter(radius):
    """计算圆的周长"""
    return 2 * PI * radius

# 这行让模块既能被 import,也能直接运行
if __name__ == "__main__":
    # 只有直接运行本文件时才执行
    # 被 import 时不执行
    print(f"半径 5 的圆,面积 = {circle_area(5):.2f}")

if __name__ == "__main__": 是 Python 的经典惯用法:它让文件既能被 import,又能直接运行。被 import 时 __name__ 是模块名(不等于 "__main__"),这块代码不执行;直接 python mymath.py 运行时 __name__ 等于 "__main__",这块代码执行。测试代码、演示代码都该放这里

4. 使用自己的模块

# === file: main.py ===
# 导入自己写的模块(同目录下的 mymath.py)
import mymath

# 用模块名.函数 调用
area = mymath.circle_area(5)
print(f"面积:{area:.2f}")        # 78.54

# 也可以只导入特定函数
from mymath import circle_perimeter

perimeter = circle_perimeter(5)
print(f"周长:{perimeter:.2f}")    # 31.42

5. 包(package):多文件组织

项目更大时,把多个模块按目录分组,目录就叫。Python 3.3+ 的包不需要 __init__.py 也能用(普通命名空间包),但传统写法和大多数项目还是保留它。

# === 目录结构 ===
# myproject/
# ├── main.py
# └── utils/                  <- 包(目录 + __init__.py)
#     ├── __init__.py         <- 标识这是一个包(可空)
#     ├── string_utils.py
#     └── math_utils.py

# === utils/string_utils.py ===
def reverse(s):
    return s[::-1]

# === main.py ===
# 从包里导入子模块
from utils.string_utils import reverse

print(reverse("hello"))         # olleh

# 也可以导入整个包,用全路径访问
import utils.string_utils
print(utils.string_utils.reverse("Python"))   # nohtyP

6. 标准库(Python 的宝藏)

Python 被称为"自带电池(batteries included)"——标准库极其丰富,装好 Python 就有 200 多个模块。常用的记住下面几个:

# Python 标准库极其丰富,无需安装,直接 import

# 1. os:操作系统接口
import os
print(os.getcwd())              # 当前工作目录
# os.makedirs("test_dir", exist_ok=True)   # 创建目录
print(os.path.exists("."))      # True

# 2. sys:Python 解释器相关
import sys
print(sys.version)              # Python 版本信息
print(sys.platform)             # 平台 (darwin/linux/win32)

# 3. math:数学函数
import math
print(math.pi)                  # 3.141592653589793
print(math.factorial(5))        # 120  5 的阶乘
print(math.log(100, 10))        # 2.0  以 10 为底的对数

# 4. random:随机数
import random
print(random.randint(1, 100))   # 1~100 随机整数
print(random.choice(["红", "绿", "蓝"]))   # 随机选一个
print(random.shuffle([1,2,3,4,5]))  # 原地打乱(返回 None)

# 5. json:JSON 处理
import json
data = {"name": "小明", "age": 20}
s = json.dumps(data, ensure_ascii=False)
print(s)                        # {"name": "小明", "age": 20}

# 6. re:正则表达式
import re
phones = re.findall(r"\d{4}", "电话 1234 和 5678")
print(phones)                   # ['1234', '5678']

常用标准库速查:

7. pip:安装第三方包

Python 之所以强大,很大程度因为 PyPI(pypi.org)上有 50 万+ 第三方库。pip 是它们的包管理器。

# pip 是 Python 的第三方包管理器

# 1. 安装包
pip install requests            # HTTP 请求库
pip install numpy               # 科学计算
pip install pandas              # 数据分析
pip install flask               # Web 框架

# 2. 安装指定版本
pip install requests==2.31.0

# 3. 从 requirements.txt 批量安装
pip install -r requirements.txt

# 4. 升级包
pip install --upgrade requests

# 5. 卸载
pip uninstall requests

# 6. 查看已安装
pip list
pip show requests              # 查看某个包的详情

# === 安装后就能 import 用 ===
# import requests
# r = requests.get("https://api.github.com")
# print(r.status_code)         # 200

常用第三方库推荐:

8. requirements.txt:项目依赖清单

# requirements.txt:项目依赖清单
# 每行一个包名,可带版本号

requests==2.31.0
pandas>=2.0.0
numpy~=1.24.0
flask

# 生成方式:在项目目录运行
pip freeze > requirements.txt

# 别人拿到你的项目后,一键安装全部依赖
pip install -r requirements.txt

# 这是 Python 项目的事实标准
# 大部分 Python 项目根目录都有这个文件

小结

模块和包是组织代码的基础。重点掌握:import 四种写法__name__ == "__main__" 惯用法包的结构常用标准库(os/sys/math/random/json/re/collections)、pip 安装第三方包requirements.txt。下一篇看类与面向对象——组织更大规模代码的方式。

← 上一篇 Python 函数

下一篇 Python 类与面向对象

✈️💬