update-alternatives配置Python失效及Python应用运行异常求助
问题描述
终端操作与初始问题
There are 2 choices for the alternative python (providing /usr/bin/python). Selection Path Priority Status ------------------------------------------------------------ 0 /usr/bin/python3.11 10 auto mode 1 /usr/bin/python3.11 10 manual mode * 2 /usr/bin/python3.7 0 manual mode Press <enter> to keep the current choice[*], or type selection number: update-alternatives: warning: forcing reinstallation of alternative /usr/bin/python3.7 because link group python is broken pavan@mars:~$ python --version Python 3.11.0 pavan@mars:~$ virt-manager bash: /usr/bin/virt-manager: /usr/bin/python3: bad interpreter: No such file or directory pavan@mars:~$ sudo update-alternatives --install /usr/bin/python python3 /usr/bin/python3.7 0
遇到两个问题:
- 已通过
update-alternatives将默认Python设为3.7,但python --version仍显示3.11 - Python类应用(如
virt-manager)运行失败,但普通.py脚本可正常执行
更新信息
pavan@mars:/usr/bin$ ls -la /usr/bin/python3 lrwxrwxrwx 1 root root 19 Dec 2 20:58 /usr/bin/python3 -> /usr/bin/python3.11 pavan@mars:/usr/bin$ virt-manager Traceback (most recent call last): File "/usr/bin/virt-manager", line 6, in <module> from virtManager import virtmanager File "/usr/share/virt-manager/virtManager/virtmanager.py", line 13, in <module> import gi File "/usr/lib/python3/dist-packages/gi/__init__.py", line 40, in <module> from . import _gi ImportError: cannot import name '_gi' from partially initialized module 'gi' (most likely due to a circular import) (/usr/lib/python3/dist-packages/gi/__init__.py)
解决方案
1. 修复python命令指向错误的问题
你当前的update-alternatives配置只处理了python链接,但系统里的python3还是硬指向3.11,且执行的install命令参数有误,正确操作如下:
步骤1:为python3添加替代项
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.11 10 sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.7 0
数字代表优先级,数值越高优先级越高,若想让3.7成为默认,后续可手动切换。
步骤2:切换python3的默认版本
sudo update-alternatives --config python3
在弹出的选项中选择对应3.7的编号,按回车确认。
步骤3:同步python与python3指向(可选)
如果想让python和python3保持一致,执行:
sudo ln -s /usr/bin/python3 /usr/bin/python
或者用update-alternatives单独配置python:
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.11 10 sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.7 0 sudo update-alternatives --config python
选择3.7的编号即可。
完成后运行python --version和python3 --version验证指向是否正确。
2. 修复virt-manager运行失败的问题
当前gi模块导入错误是因为系统gi库是针对默认Python3.11编译的,切换到3.7后无对应兼容版本,可通过以下方法解决:
方法1:为Python3.7安装对应gi依赖
sudo apt-get install python3.7-dev sudo pip3.7 install pycairo pygobject
方法2:修改virt-manager脚本解释器
直接让脚本用适配的Python3.11运行:
sudo nano /usr/bin/virt-manager
将第一行的#!/usr/bin/python3改成#!/usr/bin/python3.11,保存退出后再运行virt-manager。
方法3:使用虚拟环境(推荐)
避免修改全局Python版本,创建基于3.11的虚拟环境运行:
python3.11 -m venv virt-manager-env source virt-manager-env/bin/activate pip install pycairo pygobject /usr/bin/virt-manager
内容的提问来源于stack exchange,提问作者James Bond
相关产品推荐
相关产品推荐

