CentOS 7服务器移除Python 2.6.6及解决sqlite3报错问题
嘿,先别着急删Python 2.6.6!CentOS 7的很多核心系统工具(比如yum、systemd)都依赖这个版本,贸然删除大概率会搞崩你的服务器,咱们先搞定这个sqlite3的报错再说。
报错根源分析
你遇到的NameError: name 'version' is not defined,并不是Python 2和3的版本冲突导致的,而是Python 3.6内置的sqlite3模块出了问题——具体是dbapi2.py文件第50行引用了一个未定义的version变量。常见原因有两个:
- Python 3.6编译安装时,没有正确关联系统的sqlite库
- sqlite3模块的文件被意外篡改或损坏
分步解决方案
1. 先确认基础信息
首先检查系统的sqlite版本,执行命令:
sqlite3 --version
然后进入Python 3.6的交互环境,验证报错是否一致:
python3.6
在交互窗口输入:
import sqlite3
如果还是同样报错,继续下面的修复步骤。
2. 方案一:修复损坏的sqlite3模块文件
找到报错的文件路径:/home/pythondemo/.local/lib/python3.6/sqlite3/dbapi2.py,用编辑器打开它,定位到第50行:
version_info = tuple([int(x) for x in version.split(".")])
把这里的version改成sqlite_version(这是sqlite3模块内置的版本变量),修改后代码应为:
version_info = tuple([int(x) for x in sqlite_version.split(".")])
保存后退出,再重新运行你的chatbot.py试试。
3. 方案二:重新编译安装Python 3.6(彻底解决)
如果修改文件没用,可能是编译Python时缺少sqlite依赖导致的,咱们重新编译:
- 先安装sqlite的开发依赖:
yum install sqlite-devel -y
- 进入Python 3.6源码目录,重新编译(记得加上sqlite扩展参数):
./configure --prefix=/usr/local/python36 --enable-loadable-sqlite-extensions make && make install
编译完成后,用新的Python 3.6运行你的代码即可。
4. 方案三:用虚拟环境隔离项目环境
为了避免系统Python和项目Python的潜在冲突,建议用虚拟环境运行项目:
# 创建虚拟环境 python3.6 -m venv chatbot_env # 激活虚拟环境 source chatbot_env/bin/activate # 安装项目所需依赖(如果有的话) pip install -r requirements.txt
激活虚拟环境后,再运行chatbot.py,环境是完全隔离的,不会和系统Python 2.6.6产生冲突。
关键提醒
绝对不要删除CentOS 7自带的Python 2.6.6!系统的包管理器yum、服务管理工具systemd等都依赖它,删除后会导致大量系统命令失效,服务器可能直接变砖。如果需要默认使用Python 3,可以通过设置别名或虚拟环境实现,别碰系统自带的Python版本。
内容的提问来源于stack exchange,提问作者Akhil Karkera

