"Bionic预装了Cairo 1.15,所以我不确定您是如何获得Cairo 1.14的。Python有时会保留库的内部副本。最简单的第一步检查是"
find /usr/local/lib/python3*/dist-packages/PIL/ -iname '*.so*' | grep cairo
我希望您能找到另一个
libcairo
,但如果没有的话,以下是如何追踪
cairocffi
使用的库的方法。
第一步:找到
cairocffi
正在使用的库
1.0(背景)
cairocffi
使用 ctypes.util.find_library
尝试定位
libcairo
。
ctypes.util.find_library
使用以下命令进行搜索,以便按顺序查找库。我已将Python代码转换为Shell脚本,并列出了每个命令及其与原始源的链接。
1.1 - 找到备用库
运行这些命令中的每一个,直到找到库为止。这模拟了
find_library
搜索。
1)
find_library
方法 1
ldconfig -p | grep -Eo '\s+(libcairo\.\S+)\s+\(libc6,x86-64'
2) find_library
方法 2
gcc -Wl,-t -o /tmp/bla -lcairo 2> /dev/null | grep -E '([^\(\)]|\S)*libcairo\.([^\(\)]|\S)*'
3) find_library
方法 3
libs=$(for d in `echo $LD_LIBRARY_PATH | sed 's/:/ /g'`; do printf -- "-L$d "; done); ld -t $libs -o /dev/null -lcairo 2> /dev/null | grep -Eo '([^\(\)]|\S)*libcairo\.([^\(\)]|\S)*'
1.2 验证库的版本
一旦找到该库,检查其版本。
strings /some/weird/place/libcairo.so.2 | grep -E '^P\?' | grep -Eo '[0-9.]+'
如果匹配到了不好的版本,就继续进行。如果没有匹配到,可以尝试使用1.1进行搜索。或者,您也可以尝试对所有Cairo库进行通用搜索:
find /usr -iname '*cairo*.so*'
步骤二:更新库
2.1 确定库的所有者
备用库可能是使用apt
或pip
安装的。我们将检查两者。
1)检查apt
dpkg -S /some/weird/place/libcairo.so.2
2) 检查 pip
:
pip list | tail -n +3 | cut -d" " -f1 | xargs pip show -f | grep /some/weird/place/libcairo.so.2
2.2 更新库
如果您可以确定旧版本属于哪个软件包,请升级该软件包。如果不能确定,可以删除它或手动升级它(将新的libcairo.so
复制到它上面)。这应该可以解决您的问题。