CentOS 7系统Python版本升级指南
背景说明
CentOS 7系统默认安装的是Python 2.7版本,而随着Python 2的生命周期结束,越来越多的应用开始要求Python 3环境。然而,在升级Python版本时,需要特别注意系统工具(如yum包管理器)对Python版本的依赖关系,避免因版本冲突导致系统工具无法使用。
问题描述
症状表现
在将系统默认Python版本从2.7修改为Python 3后,执行yum命令时出现语法错误:
1
2
3
4
|
File "/usr/bin/yum", line 30
except KeyboardInterrupt, e:
^
SyntaxError: invalid syntax
|
原因分析
这个错误的出现是因为:
- yum包管理器是用Python 2编写的
- 修改了系统默认的Python符号链接指向Python 3
- Python 3与Python 2的语法存在不兼容之处,特别是异常处理语法
解决方案
方案一:修复单个文件(不推荐)
- 修改yum主程序:
1
2
3
4
5
|
# 编辑yum主程序文件
sudo vim /usr/bin/yum
# 将第一行修改为
#!/usr/bin/python2.7
|
- 修改urlgrabber-ext-down:
1
2
3
4
5
|
# 编辑urlgrabber文件
sudo vim /usr/libexec/urlgrabber-ext-down
# 将第一行修改为
#!/usr/bin/python2.7
|
方案二:批量修复(推荐)
- 首先找出所有需要修改的yum相关文件:
1
2
|
# 列出yum相关文件
ls -l /usr/bin/yum*
|
常见的需要修改的文件包括:
- /usr/bin/yum
- /usr/bin/yum-builddep
- /usr/bin/yum-config-manager
- /usr/bin/yum-debug-dump
- /usr/bin/yum-debug-restore
- /usr/bin/yumdownloader
- /usr/bin/yum-groups-manager
- 批量修改这些文件的Python解释器:
1
2
|
# 使用sed命令批量修改
sudo sed -i 's|#!/usr/bin/python|#!/usr/bin/python2.7|' /usr/bin/yum*
|
方案三:最佳实践(强烈推荐)
不要修改系统默认的Python符号链接,而是采用以下方式管理多个Python版本:
- 保持系统Python 2不变:
1
2
|
# 确认系统Python版本
ls -l /usr/bin/python
|
- 安装Python 3但不改变默认版本:
1
2
3
4
5
|
# 安装Python 3
sudo yum install python3
# 验证安装
python3 --version
|
- 使用虚拟环境管理Python 3项目:
1
2
3
4
5
6
7
8
9
10
11
|
# 安装virtualenv
sudo pip3 install virtualenv
# 创建新的虚拟环境
virtualenv -p python3 myenv
# 激活虚拟环境
source myenv/bin/activate
# 退出虚拟环境
deactivate
|
- 在需要Python 3的脚本中显式指定:
预防措施
为避免类似问题,建议:
- 不要修改系统默认的Python符号链接
- 使用虚拟环境管理不同的Python版本
- 在脚本中明确指定所需的Python版本
- 定期备份系统配置文件
故障排查
如果遇到其他Python相关的系统命令问题,可以:
- 检查命令的Python解释器设置:
1
|
head -n 1 /path/to/command
|
- 确认系统中可用的Python版本:
- 验证Python符号链接:
1
2
|
which python
ls -l $(which python)
|