Python在/usr/lib/x86_64linuxgnu中找不到ldconfig p找到的库

2024-06-16 10:43:09 发布

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

我尝试使用python模块cairoffi。我在x86-64上使用Debian(Stretch),因此我安装了apt包libcairo2-dev,并使用pip安装了cairocffipython包。一切顺利。但当我尝试导入时,它无法加载模块:

$ python -c "import cairocffi; print('OK')"
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/usr/local/lib/python2.7/dist-packages/cairocffi/__init__.py", line 46, in <module>
    cairo = dlopen(ffi, 'cairo', 'cairo-2')
  File "/usr/local/lib/python2.7/dist-packages/cairocffi/__init__.py", line 43, in dlopen
    raise OSError("dlopen() failed to load a library: %s" % ' / '.join(names))
OSError: dlopen() failed to load a library: cairo / cairo-2

但是,ldconfig确实知道libcairo.so

^{pr2}$

当我使用修改后的LD_LIBRARY_PATH运行python时,它可以工作:

$ LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu python -c "import cairocffi; print('OK')"
OK

为了可伸缩性和可维护性,我不想在经过修改的LD_LIBRARY_PATH上运行python来运行这个脚本,但是我不明白为什么它不使用动态链接器知道的库。我错过了什么?在


Tags: 模块pathinimportlibusrlinelibrary
1条回答
网友
1楼 · 发布于 2024-06-16 10:43:09

原来有一个利比克斯曼隐藏在我的/usr/lib(它是libcairo的一个依赖项)和libcairo安装所在文件夹中的一个更新的libpixman。因此,当LD_LIBRARY_PATH被设置为libcairo的位置时,它将使用新的libpixman,而当没有设置它时,它将使用旧的libpixman。从/usr/lib删除旧的libpixman修复了所有问题。在

相关问题 更多 >