"不要重复造轮子"是 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()
jsonJSON 序列化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

更现代的方案是 uvpoetry,但 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、异常处理全都会了。