前面讲了自己写函数,上一篇讲了 Python 自带的内置函数。但绝大多数实战代码,会在文件顶部出现这种东西:
import re
import requests
from bs4 import BeautifulSoup这些就是库(library)和模块(module)——一大堆别人写好的代码,你 import 进来就能用。Python 的生产力 90% 来自库,不是来自自己写。
但对 vibe-coder 来说,真正的问题不是”怎么 import”,而是:
- 这个库是干啥的?AI 为什么选它?
- 它是标准库(Python 自带,默认安全),还是第三方(要
pip install,有风险)? pip install那一行,我敢不敢按回车?
这一篇把这三件事讲清。
先看全景
| 类型 | 装在哪 | 怎么用 | 风险 |
|---|---|---|---|
| 标准库(stdlib) | 装 Python 时自带 | import re | 几乎为零(Python 官方维护) |
| 第三方库 | 要先 pip install 下载 | pip install requests → import requests | 有供应链风险(下面讲) |
模块(module) 和 库(library) 的区别:模块是单个 .py 文件,库是一堆模块的合集。日常对话两个词常混用,不用纠结。
import 语法:5 行学完
# 1. 整个模块全导进来
import statistics
statistics.mean([1, 2, 3]) # 调用时要写 模块名.函数名
# 2. 只导某个函数(调用时不用再写模块名)
from statistics import mean
mean([1, 2, 3])
# 3. 导多个函数,逗号分隔
from statistics import mean, median
# 4. 第三方库:先装再用
# 命令行: pip install requests
import requests就这些。语法本身没难度,真正的功课是认识库和评估风险。
标准库:按用途记重点模块
不用装、随便用、安全。安全分析师天天用的几个:
| 用途 | 模块 | 干啥 |
|---|---|---|
| 文本搜索 | re | 正则表达式,搜日志里的模式(失败登录、IoC、邮箱) |
| CSV 文件 | csv | 读写 .csv(导出报告、解析告警) |
| JSON | json | 解析 API 响应、读 结构化日志 |
| 文件/路径 | os / pathlib | 遍历目录、改路径 |
| 批量匹配文件 | glob | glob.glob("logs/*.log") 找一批文件 |
| 时间戳 | time / datetime | 解析日志时间、计算间隔 |
| 统计 | statistics | mean() / median() 算告警均值/中位数 |
| 哈希 | hashlib | 算文件 [hash-function|hash] |
| 命令调用 | subprocess | 调外部命令(grep、[[tcpdump|tcpdump]]) |
| 加密 | secrets / hmac | 生成安全令牌、防时序攻击 |
不需要全背。记住”标准库里大概率有”——遇到需求先去标准库翻一下,90% 的事都有现成方案,根本不用装第三方。
举例:算一个用户一年里月均失败登录:
import statistics
monthly_failed = [20, 17, 178, 33, 15, 21, 19, 29, 32, 15, 25, 19]
print("均值:", statistics.mean(monthly_failed)) # → 35.25
print("中位数:", statistics.median(monthly_failed)) # → 20.5178 那个月把均值拉高了——这种时候中位数比均值更能反映”正常水平”。这就是安全数据分析里一个常见小套路。
第三方库:vibe-coder 该认识的脸熟脸
不在标准库里,要 pip install。下面这些是你在 AI 给的代码里几乎一定会遇到的,认得出来就行:
| 库 | 干啥 | 看到它说明什么 |
|---|---|---|
| requests | 发 HTTP 请求 | 代码要访问外部 API/网站 |
| pandas | 数据表分析 | 在处理结构化数据(CSV、Excel、日志) |
| numpy | 数值计算/数组 | 数学密集、机器学习底层 |
| beautifulsoup4 (bs4) | 解析 HTML | 在做爬虫/网页抓取 |
| scapy | 抓包/造包 | 网络层操作,可能是合法监控也可能是攻击工具 |
| paramiko | SSH 客户端 | 远程控制服务器 |
| cryptography | 加密原语 | 在做加解密(默认比自己写靠谱) |
| pyOpenSSL | TLS/证书 | 跟 HTTPS 证书打交道 |
| python-nmap | 调 nmap | 端口扫描 |
| flask / fastapi | Web 框架 | 在写 web 服务 |
| playwright / selenium | 浏览器自动化 | 模拟真人点击 |
vibe-coder 必会的判断:看到 import scapy / import paramiko / import python-nmap 出现在 AI 给你的代码里——先停一下,问 AI:“为什么需要这个?是不是有更轻量的方案?” 这些是双刃剑库,既能合法监控,也能拿来当攻击工具。
关键一节:pip install 那一行,你敢按回车吗?
这是 vibe-coder 最容易翻车的地方。AI 让你 pip install xxx,你照做——但 PyPI 上有几十万个包,其中相当一部分是钓饵。
三种真实风险
1. Typosquatting(类型抢注)
攻击者注册和热门库只差一个字母的恶意包:
| 真的 | 假的(钓饵) |
|---|---|
requests | requets / request / reqests |
urllib3 | urlib3 |
python-dateutil | dateutil-python |
输错一个字母,就装上了恶意包。包里可能有后门、偷凭据的代码,直接在你 pip install 时跑。
2. 依赖链投毒
你装的是好包,但它依赖的某个小包被攻击者接管了。比如 2018 年 event-stream 事件:维护者把项目转让给陌生人,接手者植入恶意代码偷比特币钱包。下游所有用户跟着中招。
3. 跟系统包名撞车(xz-utils 模式)
2024 年的 xz-utils 后门是更深层的供应链攻击:攻击者花两年时间伪装成可信维护者,把后门塞进一个被几乎所有 Linux 发行版依赖的压缩工具。PyPI 上同样的剧本可以重演——一个用了多年的包,某次更新里就被夹带私货。
四道关,装包前过一遍
| 关 | 怎么检查 | 触发”停手”的信号 |
|---|---|---|
| 1. 名字 | 在 pypi.org 搜你要装的名字 | 包名拼写、作者、下载量;新包或下载量 < 1000 要警惕 |
| 2. 维护活跃度 | 看 GitHub 仓库 | 最近 commit、issue 响应、star 数;长期无人维护 = 风险 |
| 3. 依赖树 | pip install --dry-run 或 pipdeptree | 它要拉多少依赖?有没有奇怪的小包混在里面 |
| 4. 锁定版本 | 用 requirements.txt + 精确版本号(requests==2.31.0),配合 pip-audit 扫已知漏洞 | 看到 pip install xxx 不带版本,等于”装这个包的最新版”——下次更新可能就被投毒 |
一条铁律
不要让 AI 推荐什么你就装什么。 AI 可能从训练数据里学到一个当时安全、现在已经被劫持的包名。每次 pip install,过一遍上面四道关——尤其是在生产环境、安全相关项目上。
一句话总结
import 语法 5 行学完;标准库已经覆盖 90% 安全脚本的需求,先翻它;第三方库认脸就行,但 pip install 那一行别盲按——typosquatting、依赖链投毒、供应链攻击都在等粗心的人。写 Python 自动化的安全意识起点,就是承认”你装的每一个包,都是把别人的代码请进自己的机器”。