当前位置: 首页 > news >正文

Ubuntu 22.04 + Ryu/Mininet:跨越 Python 3.10 依赖“死亡三角”的完美配置指南

摘要: 本文记录了在 Ubuntu 22.04 LTS (默认 Python 3.10) 环境中搭建 Ryu SDN 控制器 (4.34 版本)Mininet 过程中,所遇到的所有 Python 依赖冲突(eventletdnspython 等)及其最终的解决方案。通过降级 Python 版本并使用 update-alternatives,实现了环境的稳定运行。

一、环境与问题背景

组件版本/系统初始问题
操作系统Ubuntu 22.04 LTS稳定,但默认 Python 3.10
SDN 控制器Ryu 4.34依赖旧版 eventletdnspython
网络模拟器Mininet (最新)依赖 Linux 内核,但需 Python 环境配置

核心冲突: Ryu 4.34 的核心依赖库(主要是 eventlet)设计于 Python 3.4/3.8 时代,与 Python 3.10 的新特性(如不可变的 TimeoutErrorcollections 模块变更)存在严重冲突,无法通过简单的 pip install 解决。

最终策略: 保持 Ubuntu 22.04 LTS 不变,将 Ryu 的运行环境隔离并降级到 Python 3.9。

二、Mininet 与系统基础环境安装

由于 Mininet 的运行主要依赖系统内核和 OVS,应先完成其安装。

  1. 系统更新与基础工具安装:

    sudo apt update
    sudo apt upgrade -y
    sudo apt install -y git python3-pip
  2. Mininet 安装: Mininet 推荐使用官方脚本安装,它会处理好 OVS 等依赖。

    git clone https://github.com/mininet/mininet.git
    cd mininet
    # -a 参数安装所有依赖和组件
    sudo ./util/install.sh -a
    # 重新安装 Mininet Python 模块(确保 Mininet CLI 可用)
    sudo python3 setup.py install

(在 Mininet 目录下执行 sudo python3 setup.py install 是解决 ModuleNotFoundError: No module named 'mininet' 的关键步骤。)

三、解决 Python 3.10 兼容性问题 (核心步骤)

这是本次环境搭建最困难的部分。由于 Python 3.10 不兼容 Ryu 4.34 的核心依赖,我们选择引入 Python 3.9 并将其设置为系统默认 Python 3。

1. 安装 Python 3.9 并设置 PPA

# 安装 PPA 工具
sudo apt install -y software-properties-common# 添加 deadsnakes PPA(获取 Ubuntu 22.04 缺失的 Python 3.9 包)
sudo add-apt-repository ppa:deadsnakes/ppa# 更新并安装 Python 3.9 及其开发组件
sudo apt update
sudo apt install -y python3.9 python3.9-distutils python3.9-dev

2. 切换系统默认 Python 3 版本

使用 update-alternativespython3 命令指向 Python 3.9。

# 注册 Python 3.10,优先级 100(较低)
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.10 100# 注册 Python 3.9,优先级 150(更高,Ryu 兼容版本)
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.9 150# 运行配置命令,选择 /usr/bin/python3.9
sudo update-alternatives --config python3# 验证切换结果
python3 --version  # 预期输出:Python 3.9.x

四、Ryu 控制器稳定安装与启动

在 Python 3.9 环境中,Ryu 的安装和启动将变得稳定。

1. 清理旧环境并安装 Ryu

由于之前可能有失败的安装残留,我们先清理再安装。

# 卸载所有旧的 Ryu 及其依赖(eventlet, dnspython 等)
sudo pip3 uninstall ryu eventlet dnspython -y# 在 Python 3.9 环境下重新安装 Ryu
sudo pip3 install ryu

2. 解决 Ryu 依赖链中最后的“隐形”冲突

Ryu 4.34 即使在 3.9 上,也可能因为 pip 自动安装了过新的 eventlet 版本(缺少 ALREADY_HANDLED)而失败。这是最后一个隐患。

# 强制降级 eventlet 到兼容 Ryu 4.34 的稳定版本(例如 0.30.2)
sudo pip3 uninstall eventlet -y
sudo pip3 install eventlet==0.30.2

3. 启动 Ryu 验证

在一个终端窗口中,启动 Ryu 控制器,加载 OpenFlow 1.3 的二层交换机应用。

ryu-manager ryu.app.simple_switch_13

预期结果: 控制器成功启动,显示 instantiating app simple_switch_13 等日志。

五、Mininet 与 Ryu 联调测试

Ryu 启动成功后,打开第二个终端窗口进行联调。

1. 启动 Mininet 拓扑

sudo mn --topo linear,2 --controller remote,ip=127.0.0.1,port=6653 --switch ovsk,protocols=OpenFlow13

2. 验证连通性

进入 Mininet CLI 后,执行 Ping 测试:

mininet> h1 ping h2

最终结果: 看到 0% packet loss,代表环境配置成功。

http://www.dtcms.com/a/453357.html

相关文章:

  • AI智能体(Agent)大模型入门【6】--编写fasteAPI后端请求接口实现页面聊天
  • 广西 南宁 微信微网站开发虚拟主机使用教程
  • 电子商务网站开发 当当网网站优化关键词怎么做
  • 学习日报 20251007|深度解析:基于 Guava LoadingCache 的优惠券模板缓存设计与实现
  • 什么是MOE?
  • 大模型-扩散模型(Diffusion Model)原理讲解(4
  • 【深度学习新浪潮】入门Flash Attention:从原理到Python手搓实现
  • 不做“KPI牛马“,回归真生活——双节沉思录
  • Java接口中实现多线程并行处理,大数据量查询实战,成倍提效、性能分析,笔记01
  • AI学习日记——参数的初始化
  • 数字信号处理 第七章(FIR数字滤波器设计)
  • 网站建设公司实力网站建设死人接单
  • 河南住房与建设厅网站杭州网站建设交易
  • 岳池建设局网站什么是网络设计的前提
  • GDB Stub定义及命名由来解析
  • 男人最爱上的做网站网页制作开版费
  • FreeRTOS_API模块综合应用篇(八)
  • tuchuang_myfilesshare文件列表_共享文件
  • GJOI 10.4/10.5 题解
  • C语言入门教程(第2讲):数据类型与变量详解与实战讲解
  • 哪些网站建设公司wordpress悬浮联系表
  • 5g互联如何取消网站备案中山seo代理商
  • 生成式人工智能对学习生态的重构:从“辅助工具”到“依赖风险”的平衡难题
  • 电商推广联盟大型网站技术架构演进与性能优化
  • short-term memory 和long-term memtory有什么区别
  • 公司网站建设与维护工作计划网站建设背景及意义
  • 技术支持上海网站建设广州做网站哪个平台好
  • 企业如何在网站上做宣传wordpress移动站点
  • 13.排序(下)
  • 软考 系统架构设计师系列知识点之杂项集萃(171)