Ubuntu终端运行tkinter Python代码报_tkinter模块缺失的问题求助
问题核心根因
- 你当前系统存在两个平行安装的Python 3.8.5版本:
- Ubuntu官方通过APT源部署的系统Python,路径为
/usr/bin/python3.8,编译阶段已关联系统tk底层库,自带_tkinterC扩展模块,PyCharm、IDLE默认调用的就是这个版本,所以程序运行无异常 - 后续手动从源码编译安装的Python,路径对应
/usr/local/lib/python3.8,编译时未关联tk开发依赖,缺失_tkinter内置模块。终端执行python3时,因为系统PATH配置中/usr/local/bin路径优先级高于/usr/bin,默认调用的是这个手动编译的版本,才会触发导入报错
- Ubuntu官方通过APT源部署的系统Python,路径为
- 你之前执行
pip install tk安装的PyPI包是占位空包,完全无法替代Python内置的_tkinterC扩展模块,无法解决这个报错
可选解决方案二选一
方案1:为手动编译的Python补全tkinter支持
- 先安装系统层面的tk开发依赖:
sudo apt install python3-tk tk-dev - 定位当初存放手动编译Python的源码解压目录,进入目录后重新执行编译安装流程:
- 执行配置命令:
./configure --enable-optimizations - 执行多线程编译:
make -j$(nproc) - 用
altinstall方式覆盖原有手动安装的Python版本,不要直接用make install,避免覆盖系统自带Python引发系统组件故障:sudo make altinstall
- 执行配置命令:
- 验证效果:调用手动安装路径下的Python进入交互环境,执行
import tkinter无报错即配置完成
方案2:移除手动编译的Python,恢复默认调用系统Python
- 先查询所有Python安装路径确认残留:
which -a python3 python3.8
正常会同时返回/usr/local/bin/python3.8(手动编译版)和/usr/bin/python3.8(系统原生版)两个路径 - 直接删除手动编译版本的所有相关文件:
- 删除可执行文件:
sudo rm -rf /usr/local/bin/python3.8 /usr/local/bin/python3 - 删除对应库文件目录:
sudo rm -rf /usr/local/lib/python3.8 - 删除对应pip残留:
sudo rm -rf /usr/local/bin/pip3 /usr/local/lib/python3.8/site-packages
- 删除可执行文件:
- 验证效果:重新打开终端执行
python3 --version,确认版本编译时间为2020年7月28日的系统原生版本,再进入交互环境执行import tkinter无报错即完成清理
补充提示
手动从源码编译安装Python时,必须先安装对应版本的开发依赖(包括tk-dev)再执行编译,否则会出现pip能正常安装,但系统内置C扩展模块全部缺失的问题
内容的提问来源于stack exchange,提问作者code4321
相关产品推荐
相关产品推荐

