switches.py是Ryu控制器子目录topology下的一个文件。我根据实验需要对switches.py进行编辑时,有一行代码的缩进出错(少打了一个tab)而没有发现。因为之前还修改过Ryu的全局启动参数(在Ryu顶级目录下的flags.py文件中添加了代码),因此保存文件后,重新安装了Ryu控制器:
sudo python setup.py install
完成安装后,启动ryu-manager应用报错,是switches.py中的缩进错误。一开始我没有留意错误信息中的地址,直接从主文件夹中进入ryu子目录topology下的switches.py中进行修改,保存后再启动ryu-manager应用,依然显示同样的错误。检查无误后再重新安装了Ryu,启动应用之后还是出现该错误。
此时我注意到,出现错误的switches.py的路径并非我所修改的主文件夹下ryu子目录topology中的switches.py的文件路径,而是:
/usr/local/lib/python2.7/dist-packages/ryu/topologyswitches.py
因此,我进入对应的目录下,sudo vim 编辑switches.py文件,再次启动ryu-manager应用终于成功了。
dist-packages是debian系统及其衍生系统的默认python的模块默认安装目录, 如果使用包管理器(如apt-get, easy_install, pip)安装python的模块,都会安装到该地址下。
所以,这个错误的原因很可能是:我在自己的系统中安装和运行各种软件时都用的是系统默认的Python2.7。由于第一次编辑switches.py出错,在进行Ryu控制器重新安装后,dist-packages子目录下的switches.py就是有错误的,运行Ryu应用也会出错。此时,修改主文件夹Ryu子目录下的switches.py文件并不会影响dist-packages下的switches.py(经过尝试,即便再次重新安装Ryu控制器也不能改正),只有进入dist-packages子目录中手动改正switches.py,才能最终解决问题。
相比于这个错误本身,我得到的更大的教训是程序运行出错后一定要注意错误本身真正的涵义,而不是直接盲目地进行修改。