第三章:Python环境搭建——在Linux服务器上安装Python3、pip、virtualenv,配置网络设备模拟器环境
各位同行,咱们直接进入正题。做IP RAN网络运维自动化,第一步就是把Python环境搭好。这步看着简单,但我见过太多人在这上面栽跟头。今天我就把我在现网项目中积累的经验,一点一点拆给你看。
3.1 为什么要在Linux上搞Python?
说实话,我刚开始做自动化时,也想过在Windows上凑合着用。但后来发现,咱们网络设备绝大多数都是Linux内核,脚本最终要跑在Linux服务器上。你想想看,在Windows上写好的脚本,拿到Linux上一跑,路径分隔符不对、依赖库版本冲突……全是坑。
我个人习惯,直接在Linux服务器上搭建环境。这样开发、测试、部署都在同一套环境里,省心。
3.2 安装Python3
现在很多Linux发行版默认带的是Python2,但咱们得用Python3。为什么?因为Python2在2020年就停止维护了,而且很多新库只支持Python3。
先检查一下系统里有没有Python3:
python3 --version
如果没装,或者版本太老(比如低于3.6),那就手动装一个。我推荐用源码编译安装,这样版本可控。
具体步骤:
- 下载源码包
wget https://www.python.org/ftp/python/3.9.18/Python-3.9.18.tgz
- 解压并编译
tar -xzf Python-3.9.18.tgz
cd Python-3.9.18
./configure --enable-optimizations
make -j $(nproc)
sudo make altinstall
小提示: 这里我用的是 altinstall 而不是 install。为什么?因为 altinstall 不会覆盖系统自带的Python,避免搞坏系统工具。我曾经见过有人直接用 make install,结果把系统的yum给搞崩了……
- 验证安装
python3.9 --version
看到输出 Python 3.9.18 就对了。
3.3 安装pip
pip是Python的包管理工具,说白了就是用来装第三方库的。Python3.4以上版本自带pip,但有时候系统里没有,或者版本太旧。
检查一下:
pip3 --version
如果没装,用这个命令:
sudo apt-get install python3-pip # Debian/Ubuntu
sudo yum install python3-pip # CentOS/RHEL
或者用官方脚本安装:
wget https://bootstrap.pypa.io/get-pip.py
sudo python3.9 get-pip.py
注意: 千万别用 sudo pip install 直接装全局包!这会导致系统Python环境混乱。我踩过这个坑——有一次装了个新版本的requests库,结果把系统工具依赖的旧版本给覆盖了,yum直接报错。从那以后,我再也不敢乱动全局pip了。
3.4 安装virtualenv——隔离环境的神器
virtualenv是干嘛用的?说白了,就是给每个项目创建一个独立的Python环境。这样项目A用Django 2.0,项目B用Django 3.0,互不干扰。
安装:
sudo pip3 install virtualenv
创建虚拟环境:
mkdir my_project
cd my_project
virtualenv venv --python=python3.9
激活虚拟环境:
source venv/bin/activate
看到命令行前面多了 (venv) 字样,就说明激活成功了。这时候你安装的所有包,都只在这个项目里生效。
我的习惯: 每个项目都建一个虚拟环境,哪怕只是写个小脚本。这样后期维护起来特别清爽。你想想看,如果所有包都装全局,过半年你自己都分不清哪些包是哪个项目用的。
3.5 配置网络设备模拟器环境
做IP RAN运维自动化,光有Python环境还不够,你得有个地方跑实验。总不能直接在现网上调试吧?那太危险了。
我推荐用 EVE-NG 或者 GNS3 搭模拟环境。这里以EVE-NG为例,因为它对IP RAN设备支持比较好。
3.5.1 安装EVE-NG
EVE-NG有社区版,免费够用。安装步骤:
- 下载OVA镜像
- 导入到VMware或VirtualBox
- 启动虚拟机,默认账号密码:root / eve
- 配置网络,确保能和你的Linux服务器互通
3.5.2 上传设备镜像
IP RAN设备常用的镜像有:
| 设备类型 | 镜像文件 | 说明 |
|---|---|---|
| 华为CX600 | cx6000e-x8s-c.bin | 核心路由器 |
| 华为ATN910 | atn910i-c.bin | 接入路由器 |
| 中兴M6000 | m6000-s.bin | 边缘路由器 |
上传到EVE-NG的 /opt/unetlab/addons/qemu/ 目录下,然后刷新一下:
/opt/unetlab/wrappers/unl_wrapper -a fixpermissions
3.5.3 用Python脚本连接模拟器
环境搭好了,怎么用Python连上去?我一般用 netmiko 这个库,它对网络设备支持很全。
先安装:
pip install netmiko
然后写个测试脚本:
from netmiko import ConnectHandler
device = {
'device_type': 'huawei',
'ip': '192.168.1.100',
'username': 'admin',
'password': 'admin123',
'port': 22,
}
connection = ConnectHandler(**device)
output = connection.send_command('display version')
print(output)
connection.disconnect()
重点: 在模拟器上调试脚本,和在现网操作几乎一样。唯一的区别是,模拟器里你随便折腾,不会影响现网业务。我每次写新脚本,都会先在模拟器上跑三遍,确认没问题了才敢上现网。
3.6 避坑指南
最后,分享几个我踩过的坑:
- 路径问题: Linux和Windows的路径分隔符不一样。写脚本时尽量用
os.path.join()或者pathlib,别硬编码/或\。 - 权限问题: 别用root跑Python脚本。创建一个普通用户,把脚本放在用户目录下。我曾经用root跑脚本,结果一个误操作把系统文件删了……
- 版本兼容: 不同版本的Python,语法有差异。比如
f-string是Python3.6才有的。写脚本时,最好统一用一个Python版本。
好了,环境搭好了,下一章咱们就开始写第一个自动化脚本。到时候你会发现,前面这些准备工作,花得值。