ryu安装引发的一些问题

pip install ryu,但是需要python3.8版本,只能再安装一个,在本机上想安装多个版本的python并设置默认版本,建立一个软连接:sudo ln -sf /usr/bin/python3.8 /usr/bin/python3。

正常来说应该没什么问题,但是千万别轻易sudo unlink /usr/bin/python3。(本意是想让这个新装的指令改成python38,更好区分使用……)

本地的python感觉是炸了,主要问题就是apt_pkg包找不到:

larpsill4@larpsill4-VirtualBox:~$ ryu-manager
Traceback (most recent call last):
  File "/usr/lib/command-not-found", line 28, in <module>
    from CommandNotFound import CommandNotFound
  File "/usr/lib/python3/dist-packages/CommandNotFound/CommandNotFound.py", line 19, in <module>
    from CommandNotFound.db.db import SqliteDatabase
  File "/usr/lib/python3/dist-packages/CommandNotFound/db/db.py", line 5, in <module>
    import apt_pkg
ModuleNotFoundError: No module named 'apt_pkg'

将python版本改为默认的3.10还是不行:

larpsill4@larpsill4-VirtualBox:~$ sudo update-alternatives --config python
有 2 个候选项可用于替换 python (提供 /usr/bin/python)。

  选择       路径               优先级  状态
------------------------------------------------------------
  0            /usr/bin/python3.10   2         自动模式
  1            /usr/bin/python3.10   2         手动模式
* 2            /usr/bin/python3.8    1         手动模式

要维持当前值[*]请按<回车键>,或者键入选择的编号:0
update-alternatives: 使用 /usr/bin/python3.10 来在自动模式中提供 /usr/bin/python (python)
larpsill4@larpsill4-VirtualBox:~$ ryu-manager
Traceback (most recent call last):
  File "/usr/lib/command-not-found", line 28, in <module>
    from CommandNotFound import CommandNotFound
  File "/usr/lib/python3/dist-packages/CommandNotFound/CommandNotFound.py", line 19, in <module>
    from CommandNotFound.db.db import SqliteDatabase
  File "/usr/lib/python3/dist-packages/CommandNotFound/db/db.py", line 5, in <module>
    import apt_pkg
ModuleNotFoundError: No module named 'apt_pkg'

一度觉得就是python的问题,OK,但是conda里面的python跟主机的是没有关系的,所以即使主机的炸了,conda里面的也不应该炸! 但是conda里也是apt_pkg包找不到。

吃完饭,重新启动虚拟机,按照解决安装Python版本出现No module named 'apt_pkg'问题 - 知乎再安装apt_pkg包,这次运行 ryu-manager 终于不是apt_pkg包的问题了,显示:

$ ryu-manager
Traceback (most recent call last):
  File "/home/larpsill4/.local/bin/ryu-manager", line 5, in <module>
    from ryu.cmd.manager import main
  File "/home/larpsill4/.local/lib/python3.8/site-packages/ryu/cmd/manager.py", line 33, in <module>
    from ryu.app import wsgi
  File "/home/larpsill4/.local/lib/python3.8/site-packages/ryu/app/wsgi.py", line 109, in <module>
    class _AlreadyHandledResponse(Response):
  File "/home/larpsill4/.local/lib/python3.8/site-packages/ryu/app/wsgi.py", line 111, in _AlreadyHandledResponse
    from eventlet.wsgi import ALREADY_HANDLED
ImportError: cannot import name 'ALREADY_HANDLED' from 'eventlet.wsgi' (/home/larpsill4/.local/lib/python3.8/site-packages/eventlet/wsgi.py)

这是eventlet库版本的问题了,

pip install eventlet==0.30.2

出现以下ERROR,根据提示安装ovs。

pip install ovs==2.6.0

再次运行 ryu-manager 

$ ryu-manager
Traceback (most recent call last):
  File "/home/larpsill4/.local/bin/ryu-manager", line 5, in <module>
    from ryu.cmd.manager import main
  File "/home/larpsill4/.local/lib/python3.8/site-packages/ryu/cmd/manager.py", line 22, in <module>
    from ryu.lib import hub
  File "/home/larpsill4/.local/lib/python3.8/site-packages/ryu/lib/hub.py", line 30, in <module>
    import eventlet
ModuleNotFoundError: No module named 'eventlet'

查询ryu和eventlet的位置,好像不对应。重新pip install ryu,再次运行 ryu-manager

(netclass2) larpsill4@larpsill4-VirtualBox:~$ which ryu-manager
/home/larpsill4/miniconda3/envs/netclass2/bin/ryu-manager
(netclass2) larpsill4@larpsill4-VirtualBox:~$ ryu-manager
bash: /home/larpsill4/.local/bin/ryu-manager: 没有那个文件或目录

很神奇!! 直接整个地址当命令好了:

(netclass2) larpsill4@larpsill4-VirtualBox:~$ /home/larpsill4/miniconda3/envs/netclass2/bin/ryu-manager
loading app ryu.controller.ofp_handler
instantiating app ryu.controller.ofp_handler of OFPHandler
hub: uncaught exception: Traceback (most recent call last):
  File "/home/larpsill4/miniconda3/envs/netclass2/lib/python3.8/site-packages/ryu/lib/hub.py", line 60, in _launch
    return func(*args, **kwargs)
  File "/home/larpsill4/miniconda3/envs/netclass2/lib/python3.8/site-packages/ryu/controller/controller.py", line 152, in __call__
    self.server_loop(self.ofp_tcp_listen_port,
  File "/home/larpsill4/miniconda3/envs/netclass2/lib/python3.8/site-packages/ryu/controller/controller.py", line 200, in server_loop
    server = StreamServer((CONF.ofp_listen_host,
  File "/home/larpsill4/miniconda3/envs/netclass2/lib/python3.8/site-packages/ryu/lib/hub.py", line 127, in __init__
    self.server = eventlet.listen(listen_info)
  File "/home/larpsill4/miniconda3/envs/netclass2/lib/python3.8/site-packages/eventlet/convenience.py", line 78, in listen
    sock.bind(addr)
OSError: [Errno 98] Address already in use

最后是端口问题,查端口,杀死占用的进程。参考:

ryu-manager启动报错OSError: [Errno 98] Address already in use_ryumodmanager 无法启动-CSDN博客
安装ryu后,为什么出现下列[Errno 98] Address already in use问题?-CSDN博客

从早八到一点半,终于成功!

(netclass2) larpsill4@larpsill4-VirtualBox:~$ sudo lsof -i :6653
COMMAND    PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
ovs-testc 1008 root    3u  IPv4  20364      0t0  TCP *:6653 (LISTEN)
(netclass2) larpsill4@larpsill4-VirtualBox:~$ kill -9 1008
bash: kill: (1008) - 不允许的操作
(netclass2) larpsill4@larpsill4-VirtualBox:~$ sudo kill -9 1008
(netclass2) larpsill4@larpsill4-VirtualBox:~$ /home/larpsill4/miniconda3/envs/netclass2/bin/ryu-manager
loading app ryu.controller.ofp_handler
instantiating app ryu.controller.ofp_handler of OFPHandler

总结:
  1. conda其实很好用,主机的python炸了也无所谓,建一个conda环境从0开始就好了(毕竟控制变量,不用担心之前操作的可能出错)。
  2. Linux的默认不要随便更改,网上多看点教程再动手,诸如 sudo unlink /usr/bin/python3 这种删除指令谨慎使用;别太相信GPT,重要的可能危险的指令先网上再搜索确认一下。
  3. 出现报错时,摘取报错的关键语句,直接搜索,有很大可能有教程。
  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值