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会找不到命令。

注意: Windows上如果同时装了Python2和Python3,建议用 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,说明服务正常。

注意: 生产环境一定要给Redis设密码。咱们实验环境可以先不设,但心里得有这根弦。

3.4.3 Scapy

Scapy是咱们做流量分析的核心工具。抓包、构造包、解析包,全靠它。

pip install scapy

装完测试一下:

sudo python3 -c "from scapy.all import *; print('Scapy OK')"

注意这里用了sudo。Scapy抓包需要root权限,不然打不开网卡。我刚开始用的时候老忘,报错半天才反应过来。

3.5 依赖关系一览

这三个库之间的关系,我画了张图,你看一眼就明白了:

Python环境依赖关系图 Python 3 Flask Redis Scapy Web服务 + API 限速策略管理界面 计数器 + 缓存 IP频率记录 抓包 + 构造包 流量分析引擎 三个库都跑在Python3的虚拟环境中,互不干扰

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