简体   繁体   English

Python在ldconfig -p确实找到的/ usr / lib / x86_64-linux-gnu中找不到库

[英]Python not finding library in /usr/lib/x86_64-linux-gnu that ldconfig -p does find

I'm trying to use the python module cairocffi. 我正在尝试使用python模块cairocffi。 I use Debian (Stretch) on x86-64, so I installed the apt package libcairo2-dev and installed the cairocffi python package using pip. 我在x86-64上使用Debian(Stretch),所以我安装了apt软件包libcairo2-dev并使用pip安装了cairocffi python软件包。 This all went well. 一切顺利。 But when I try to import it, it fails to load the module: 但是,当我尝试导入它时,它无法加载模块:

$ 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

However, ldconfig does know about libcairo.so : 但是, ldconfig确实了解libcairo.so

$ sudo ldconfig -p | grep cairo
        libpangocairo-1.0.so.0 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libpangocairo-1.0.so.0
        libpangocairo-1.0.so (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libpangocairo-1.0.so
        libcairo.so.2 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libcairo.so.2
        libcairo.so (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libcairo.so
        libcairo-script-interpreter.so.2 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libcairo-script-interpreter.so.2
        libcairo-script-interpreter.so (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libcairo-script-interpreter.so
        libcairo-gobject.so.2 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libcairo-gobject.so.2
        libcairo-gobject.so (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libcairo-gobject.so

and when I run python with a modified LD_LIBRARY_PATH , it works: 当我使用修改后的LD_LIBRARY_PATH运行python时,它可以工作:

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

I don't want to have to run python on a modified LD_LIBRARY_PATH to run this script for the sake of scalability and maintainability, but I can't figure out why it isn't picking up the library that apparently the dynamic linker does know about. 为了可伸缩性和可维护性,我不想在修改后的LD_LIBRARY_PATH上运行python来运行此脚本,但是我不知道为什么它没有选择动态链接器确实知道的库。 What am I missing? 我想念什么?

It turns out there was an old libpixman.so hiding in my /usr/lib (which is a dependency of libcairo), and a newer libpixman in the folder where libcairo was installed. 原来,我的/usr/lib有一个旧的libpixman.so(这是libcairo的依赖项),而libcairo的安装文件夹中有一个更新的libpixman。 So when LD_LIBRARY_PATH was set to the location of libcairo it would pick up the new libpixman which worked, and when it was not set it would pick up the old one. 因此,当LD_LIBRARY_PATH设置为libcairo的位置时,它将选择有效的新libpixman,而当未设置它时,它将选择旧的libpixman。 Removing the old libpixman from /usr/lib fixed everything. /usr/lib删除旧的libpixman可以修复所有问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 获取 ImportError /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version &#39;CXXABI_1.3.11&#39; not found - Getting ImportError /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version 'CXXABI_1.3.11' not found /usr/lib/x86_64-linux-gnu/libstdc++.so.6: 找不到 TensorFlow 需要的版本“GLIBCXX_3.4.21” - /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.21' not found required by TensorFlow python3: /lib/x86_64-linux-gnu/libm.so.6: 找不到版本“GLIBC_2.29”(python3 需要) - python3: /lib/x86_64-linux-gnu/libm.so.6: version `GLIBC_2.29' not found (required by python3) /lib/x86_64-linux-gnu/libm.so.6:找不到版本“GLIBC_2.29”(/usr/local/lib/python3.7/dist-packages/pyexiv2/lib/libexiv2.so 需要)colab粘性物 - /lib/x86_64-linux-gnu/libm.so.6: version `GLIBC_2.29' not found (required by /usr/local/lib/python3.7/dist-packages/pyexiv2/lib/libexiv2.so) colab goo Python3:导入错误:/lib/x86_64-linux-gnu/libQt5Core.so.5:未找到版本“Qt_5.15” - Python3: ImportError: /lib/x86_64-linux-gnu/libQt5Core.so.5: version `Qt_5.15' not found 如何处理:ImportError: /usr/lib/x86_64-linux-gnu/libatk-1.0.so.0: undefined symbol: g_log_structured_standard - How to deal with: ImportError: /usr/lib/x86_64-linux-gnu/libatk-1.0.so.0: undefined symbol: g_log_structured_standard 加载 Python lib '/tmp/_MEItueAuk/libpython3.7m.so.1.0' 时出错:dlopen: /lib/x86_64-linux-gnu/libc.so.6: 找不到版本 'GLIBC_2.28' - Error loading Python lib '/tmp/_MEItueAuk/libpython3.7m.so.1.0': dlopen: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.28' not found 运行 python azure 函数应用程序时遇到错误:ImportError: /lib/x86_64-linux-gnu/libm.so.6: version `GLIBC_2.29&#39; not found - Facing error while running python azure function app: ImportError: /lib/x86_64-linux-gnu/libm.so.6: version `GLIBC_2.29' not found Ubuntu 16.04 LTS 中的 Python 给出错误 /lib/x86_64-linux-gnu/libc.so.6 version `GLIBC_2.25' not found - Python in Ubuntu 16.04 LTS gives error /lib/x86_64-linux-gnu/libc.so.6 version `GLIBC_2.25' not found 导入错误:无法从“_ctypes”导入名称“COMError”(/usr/lib/python3.7/lib-dynload/_ctypes.cpython-37m-x86_64-linux-gnu.so) - ImportError: cannot import name 'COMError' from '_ctypes' (/usr/lib/python3.7/lib-dynload/_ctypes.cpython-37m-x86_64-linux-gnu.so)
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM