Ubuntu 18.04.4下Spyder4+Python3.6导入wxPython遇ImportError求助
解决Ubuntu 18.04.4下wxPython导入的ImportError问题
这个错误的核心原因是freetype库版本不兼容:FT_Done_MM_Var是freetype 2.8及以上版本才引入的符号,而你的自定义环境(/home/divyang/Softwares/Linux/yes/)里的libharfbuzz.so.0链接了低版本的freetype,导致wxPython找不到这个符号。下面是几个可行的解决方案:
临时快速修复(立即生效)
在导入wx之前,先强制Python加载系统自带的高版本freetype库:
import ctypes # 加载系统的freetype库,确保全局可见 ctypes.CDLL('/usr/lib/x86_64-linux-gnu/libfreetype.so.6', mode=ctypes.RTLD_GLOBAL) import wx
把这段代码放在你导入wx的脚本最开头,就能临时绕过依赖冲突问题。
永久解决方案(彻底修复)
步骤1:检查依赖关系
先确认你的自定义环境里的libharfbuzz.so.0依赖的freetype版本:
ldd /home/divyang/Softwares/Linux/yes/lib/libharfbuzz.so.0 | grep freetype
如果输出显示它链接的不是系统的/usr/lib/x86_64-linux-gnu/libfreetype.so.6,而是旧版本或者自定义编译的低版本freetype,就需要修复这个依赖。
步骤2:重新安装wxPython(推荐)
卸载当前有问题的wxPython,然后从源码编译安装,让它链接系统的正确依赖:
# 卸载现有wxPython pip uninstall -y wxpython # 从源码编译安装,强制使用系统库 pip install wxpython --no-binary :all:
这个命令会重新构建wxPython,自动使用Ubuntu 18.04自带的freetype 2.8.1(满足版本要求),避免预编译包带来的依赖不匹配问题。
步骤3:调整库加载优先级(如果有自定义编译的库)
如果你在yes环境里自己编译过freetype等库,确保系统库的路径在LD_LIBRARY_PATH的最前面:
# 临时设置,可添加到你的环境启动脚本(比如~/.bashrc或者虚拟环境的activate脚本) export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH
这样系统会优先加载系统自带的高版本库,而不是自定义环境里的旧版本。
内容的提问来源于stack exchange,提问作者Divyang Prajapati
相关产品推荐
相关产品推荐

