No module named 'mininet.cli'报错处理

No module named 'mininet.cli'报错处理

问题描述

在命令行中输入python,在解释器中执行from mininet.cli import CLI不会报错的前提下,使用make run编译运行程序时,出现如下报错:

Traceback (most recent call last):
  File "../../utils/run_exercise.py", line 29, in <module>
    from mininet.cli import CLI
ModuleNotFoundError: No module named 'mininet.cli'

解决方案

在本地路径的Makefile中,找到其引用的../../utils/Makefile文件(检查编译文件,找到执行该python文件的命令),在该命令的sudo python3 ...之间插入-E选项,例如:

排错过程

step1:检查mininet是否正确安装

使用pip show mininet命令,可以看到有输出

Name: mininet
Version: 2.3.0.dev6
Summary: Process-based OpenFlow emulator
Home-page: UNKNOWN
Author: Bob Lantz
Author-email: rlantz@cs.stanford.edu
License: BSD
Location: /home/cc/.local/lib/python3.8/site-packages
Requires: setuptools
Required-by:

step2:检查sys.path列表中是否含有mininet路径

在python解释器中,输入:

import sys
print(sys.path)

输出的路径包括上一步中提到的/home/cc/.local/lib/python3.8/site-packages

['', '/usr/lib/python38.zip', '/usr/lib/python3.8', '/usr/lib/python3.8/lib-dynload', '/home/cc/.local/lib/python3.8/site-packages', '/usr/local/lib/python3.8/dist-packages', '/usr/local/lib/python3.8/dist-packages/thrift-0.13.0-py3.8-linux-x86_64.egg', '/usr/lib/python3/dist-packages']

step3:尝试指定python版本

如下所示,由于原始的提示信息中,执行该python文件的命令是用python3,因此将其替换为python3.8

mkdir -p build pcaps logs
p4c-bm2-ss --p4v 16 --p4runtime-files build/basic.p4.p4info.txt -o build/basic.json basic.p4
sudo python3 ../../utils/run_exercise.py -t pod-topo/topology.json -j build/basic.json -b simple_switch_grpc

但替换后仍存在相同的报错

step4:检查python解释器版本一致性

为了确保 python3.8指向的确实是期望的 Python 3.8 解释器,并且能够找到mininet模块,使用sudo which python3.8命令,发现输出的路径为:

/usr/bin/python3.8

与第一步中显示的mininet路径不同。

因此,错误产生的原因是,sudo使用系统级的python3.8解释器(路径为/usr/bin/python3.8),但mininet安装在用户级别的路径(/home/cc/.local/lib/python3.8/site-packages),因此当使用sudo运行python脚本时,系统无法访问用户级别路径中的mininet模块。

解决方法是在该sudo命令中加上-E选项保留用户环境变量

posted @ 2024-08-29 10:31  瑞图恩灵  阅读(18)  评论(0编辑  收藏  举报