在Ubuntu中为weasyprin安装最新的cairo lib

2024-06-16 08:45:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我刚安装了一个Ubuntu bionic实例。它预装了cairo1.14.6。我至少需要cairo1.15.4才能让weasyprint正常工作。不幸的是,即使在安装了最新的cairo之后,python仍然继续使用旧库。如果有线索我会很感激的。在

# Install weasyprint dependencies
sudo apt-get install build-essential python3-dev python3-pip python3-setuptools python3-wheel python3-cffi libcairo2 libpango-1.0-0 libpangocairo-1.0-0 libgdk-pixbuf2.0-0 libffi-dev shared-mime-info

# Check cairo lib version, prints "1.15.10-2ubuntu0.1"
dpkg -l '*cairo*'

# Install weasyprint
pip3 install weasyprint

# Test cairo version catch by python, still prints "1.14.6"
python3 -c "import cairocffi; print(cairocffi.cairo_version_string())"

Tags: install实例devversionubuntuprintspython3cairo
1条回答
网友
1楼 · 发布于 2024-06-16 08:45:02

开罗1.15的仿生飞船,所以我不知道你是怎么得到开罗1.14的。在

Python有时会保留库的内部副本。最简单的第一次检查是

find /usr/local/lib/python3*/dist-packages/PIL/ -iname '*.so*' | grep cairo

我希望您会在那里找到另一个libcairo,但如果没有,下面是如何跟踪cairocffi正在查找的库。在

步骤1:找到cairocffi正在使用的库

1.0(背景)

cairocffiusesctypes.util.find_library尝试定位{}。 ctypes.util.find_librarysearches using these commands,依次尝试查找库。我已经将python代码转换成了shell脚本,并列出了每个脚本的原始源代码链接。在

1.1-找到备用库

运行这些命令直到找到库。这将模拟find_library搜索。在

1)find_librarymethod 1

^{pr2}$

2)find_librarymethod 2

gcc -Wl,-t -o /tmp/bla -lcairo 2> /dev/null | grep -E '([^\(\)]|\S)*libcairo\.([^\(\)]|\S)*'

3)find_librarymethod 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 lib进行通用搜索:

find /usr -iname '*cairo*.so*'

步骤2:更新库

2.1确定谁拥有库

备用库可能已使用aptpip安装。我们都检查一下。 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)。这应该能解决你的问题。在

相关问题 更多 >