第三章: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),那就手动装一个。我推荐用源码编译安装,这样版本可控。

具体步骤:

  1. 下载源码包
wget https://www.python.org/ftp/python/3.9.18/Python-3.9.18.tgz
  1. 解压并编译
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给搞崩了……

  1. 验证安装
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有社区版,免费够用。安装步骤:

  1. 下载OVA镜像
  2. 导入到VMware或VirtualBox
  3. 启动虚拟机,默认账号密码:root / eve
  4. 配置网络,确保能和你的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版本。

好了,环境搭好了,下一章咱们就开始写第一个自动化脚本。到时候你会发现,前面这些准备工作,花得值。