"不要重复造轮子"是 Python 社区的信条。标准库提供开箱即用的能力,几十万个第三方包通过 pip 一键安装。会用模块和包管理,你的 Python 才真正接入了整个生态。本文讲清 import 机制、自定义模块和 pip 的日常操作。
1. 模块与 import 的多种写法
一个 .py 文件就是一个模块。导入方式有四种,按需选择:
import math # 方式1:导入整个模块
print(math.sqrt(16))
from datetime import datetime # 方式2:导入具体名字
print(datetime.now().strftime("%Y-%m-%d"))
from collections import Counter as C # 方式3:起别名
print(C("hello"))
import os, sys # 方式4:一次导入多个
优先用方式 1 和 2:避免 from math import * 污染命名空间,也不要导入后不用。
2. 自定义模块与 __name__ 守卫
自己写模块时,if __name__ == "__main__": 是必备守卫:被导入时不执行测试代码,直接运行时才执行:
# 文件:utils.py
def add(a, b):
"""两数相加"""
return a + b
def multiply(a, b):
return a * b
if __name__ == "__main__":
print(add(2, 3))
print(multiply(2, 3))
# 文件:main.py(与 utils.py 同目录)
import utils
print(utils.add(10, 5))
print(utils.multiply(3, 4))
包就是带 __init__.py 的目录,用 from 包 import 模块 导入。
3. 标准库精选
| 模块 | 用途 | 常用函数/类 |
|---|---|---|
| os / pathlib | 文件与目录操作 | Path, os.getcwd() |
| json | JSON 序列化 | json.loads / dumps |
| re | 正则表达式 | re.search / findall |
| collections | 增强容器 | Counter, defaultdict |
| datetime | 日期时间 | datetime.now() |
| random | 随机数 | random.randint |
4. pip 安装与管理包
pip 是 Python 官方的包管理器,日常命令就几条:
# 安装包
pip install requests
# 指定版本安装
pip install requests==2.32.3
# 查看已安装
pip list
# 查看某个包的信息
pip show requests
# 卸载
pip uninstall requests
国内网络慢时,可临时用镜像源:pip install requests -i https://pypi.tuna.tsinghua.edu.cn/simple。
5. 虚拟环境:项目隔离的底线
不同项目依赖不同版本的包,直接装全局会互相打架。虚拟环境为每个项目建立独立的包目录,这是工程实践的第一课:
# 创建虚拟环境
python3 -m venv myenv
# 激活(Windows)
myenv\Scripts\activate
# 激活(Linux / macOS)
source myenv/bin/activate
# 把项目依赖导出/还原
pip freeze > requirements.txt
pip install -r requirements.txt
更现代的方案是 uv 或 poetry,但 venv + requirements.txt 依然是最通用的入门组合。
6. 第三方库实战:requests
装好包之后立刻用起来。以最流行的 HTTP 库 requests 为例:
import requests
resp = requests.get("https://api.github.com", timeout=5)
print(resp.status_code)
data = resp.json()
print(data.get("current_user_url"))
# 带查询参数和请求头
params = {"q": "python", "per_page": 3}
headers = {"User-Agent": "CodeLab"}
r = requests.get("https://api.github.com/search/repositories",
params=params, headers=headers, timeout=10)
print([item["full_name"] for item in r.json().get("items", [])])
💡 学习建议:给自己定个小目标——写一个 10 行以内的脚本,用 requests 抓取一个公开 API 的数据并用 json 模块保存到文件。这一趟下来,模块、pip、异常处理全都会了。