3. Python环境准备:安装Python3、安装依赖库、配置虚拟环境
说实话,搞IoT安全防御,环境配置这一步看着简单,但坑是真不少。我见过太多人卡在依赖冲突上,一搞就是半天。咱们这节课,我就带你把这套环境捋顺了。
3.1 为什么选Python3?
你可能要问:Python2还能用,为啥非得升3?
嗯,原因很直接。Scapy这个库,从2018年开始就全面转向Python3了。Flask也是。你想想看,一个连官方都不再维护的版本,咱们何必跟它较劲?
我个人习惯,装Python之前先看一眼版本。别一上来就python --version,有时候系统里还挂着个2.7,容易搞混。
python3 --version 来确认。干净利落。
3.2 安装Python3
不同系统,安装方式不太一样。我分别说一下。
3.2.1 Ubuntu/Debian系
sudo apt update
sudo apt install python3 python3-pip python3-venv -y
python3 --version
这里有个细节——python3-venv。很多人只装python3和pip,结果后面创建虚拟环境时报错。我曾经就在这上面浪费过20分钟。
3.2.2 CentOS/RHEL系
sudo yum install -y python3 python3-pip
python3 --version
CentOS默认不带venv模块,需要额外装:
sudo yum install -y python3-venv
3.2.3 macOS
macOS自带Python2,但Python3得自己装。我推荐用Homebrew:
brew install python3
python3 --version
3.2.4 Windows
去官网下载安装包就行。安装时记得勾选「Add Python to PATH」。这个选项不勾,后面命令行里敲python会找不到命令。
py -3 来指定Python3,或者直接改环境变量。
3.3 配置虚拟环境
为什么要用虚拟环境?说白了,就是隔离依赖。你做一个项目装一堆库,另一个项目可能只需要其中几个。混在一起,版本冲突是迟早的事。
我记得有一次,一个同事的Flask项目突然跑不起来了,查了半天,原来是系统里装了个新版本的Werkzeug,把旧项目给冲了。从那以后,我每个项目都老老实实开虚拟环境。
创建虚拟环境很简单:
mkdir iot-defense-lab
cd iot-defense-lab
python3 -m venv venv
激活它:
- Linux/macOS:
source venv/bin/activate - Windows:
venv\Scripts\activate
激活后,命令行前面会出现 (venv) 字样。看到这个,就说明环境已经切过来了。
.gitignore,把 venv/ 写进去。不然整个虚拟环境传到Git上,又大又没必要。
3.4 安装依赖库
咱们这个课程主要用到三个库:Flask、Redis、Scapy。一个一个来。
3.4.1 Flask
Flask用来搭Web服务,咱们后面做限速策略的管理界面和API接口,全靠它。
pip install flask
装完验证一下:
python3 -c "import flask; print(flask.__version__)"
3.4.2 Redis
Redis在这里扮演两个角色:一是做计数器,记录每个IP的请求频率;二是做缓存,存一些临时数据。
先装Python的Redis客户端:
pip install redis
但光装这个不够,Redis服务本身也得跑起来。Ubuntu上可以这样:
sudo apt install redis-server -y
sudo systemctl start redis
sudo systemctl enable redis
验证Redis是否在运行:
redis-cli ping
如果返回 PONG,说明服务正常。
3.4.3 Scapy
Scapy是咱们做流量分析的核心工具。抓包、构造包、解析包,全靠它。
pip install scapy
装完测试一下:
sudo python3 -c "from scapy.all import *; print('Scapy OK')"
注意这里用了sudo。Scapy抓包需要root权限,不然打不开网卡。我刚开始用的时候老忘,报错半天才反应过来。
3.5 依赖关系一览
这三个库之间的关系,我画了张图,你看一眼就明白了:
3.6 一次性安装所有依赖
你也可以把所有依赖写进一个文件,一键安装。我习惯用requirements.txt:
flask==2.3.3
redis==5.0.1
scapy==2.5.0
然后执行:
pip install -r requirements.txt
这样装,版本是锁死的。以后不管在哪台机器上部署,环境都一样。我在项目里一直这么干,省心。
3.7 验证环境
全部装完后,跑个脚本验证一下:
python3 -c "
import flask
import redis
import scapy
print('Flask version:', flask.__version__)
print('Redis version:', redis.__version__)
print('Scapy version:', scapy.__version__)
print('All dependencies installed successfully!')
"
如果三行版本号都正常打印出来,恭喜你,环境就绪了。
- Python3 版本 ≥ 3.8
- 虚拟环境已激活(命令行有
(venv)前缀) - Flask、Redis、Scapy 三个库都能正常导入
- Redis 服务正在运行(
redis-cli ping返回 PONG)
3.8 常见问题与避坑
我把自己踩过的坑列一下,你遇到了直接对照着查:
| 问题 | 原因 | 解决办法 |
|---|---|---|
pip: command not found |
pip没装或者没加到PATH | 用 python3 -m pip install 代替 |
ModuleNotFoundError: No module named 'flask' |
没激活虚拟环境,或者装在了系统Python里 | 检查 which python3 是否指向虚拟环境路径 |
Scapy: Permission denied |
抓包需要root权限 | 加 sudo 运行,或者给Python设置capabilities |
Redis: Connection refused |
Redis服务没启动 | sudo systemctl start redis |