为什么 Python 找不到位于 sys.path 目录中的共享对象?

新手上路,请多包涵

我正在尝试导入 pycurl

 $ python -c "import pycurl"
Traceback (most recent call last):
File "<string>", line 1, in <module>
ImportError: libcurl.so.4: cannot open shared object file: No such file or directory

现在, libcurl.so.4/usr/local/lib 中。如您所见,这是在 sys.path 中:

 $ python -c "import sys; print(sys.path)"
['', '/usr/local/lib/python2.5/site-packages/setuptools-0.6c9-py2.5.egg',
'/usr/local/lib/python25.zip', '/usr/local/lib/python2.5',
'/usr/local/lib/python2.5/plat-linux2', '/usr/local/lib/python2.5/lib-tk',
'/usr/local/lib/python2.5/lib-dynload',
'/usr/local/lib/python2.5/sitepackages', '/usr/local/lib',
'/usr/local/lib/python2.5/site-packages']

任何帮助将不胜感激。

原文由 user135171 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 304
1 个回答

sys.path 仅搜索 Python 模块。对于动态链接库,查找的路径必须在 LD_LIBRARY_PATH 中。检查您的 LD_LIBRARY_PATH 是否包含 /usr/local/lib ,如果不包含,请添加它并重试。

更多信息( 来源):

在 Linux 中,环境变量 LD_LIBRARY_PATH 是一组以冒号分隔的目录,在标准目录集之前,首先应该在其中搜索库;这在调试新库或为特殊目的使用非标准库时很有用。环境变量 LD_PRELOAD 列出了具有覆盖标准集的函数的共享库,就像 /etc/ld.so.preload 一样。这些由加载程序 /lib/ld-linux.so 实现。我应该注意到,虽然 LD_LIBRARY_PATH 适用于许多类 Unix 系统,但它并不适用于所有系统;例如,此功能在 HP-UX 上可用,但作为环境变量 SHLIB_PATH,而在 AIX 上,此功能是通过变量 LIBPATH(具有相同的语法,以冒号分隔的列表)。

更新: 要设置 LD_LIBRARY_PATH ,最好在您的 ~/.bashrc 或等效文件中使用以下内容之一:

 export LD_LIBRARY_PATH=/usr/local/lib

要么

export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH

如果它为空(相当于空字符串,或者根本不存在),则使用第一种形式,否则使用第二种形式。注意 export 的使用。

原文由 Vinay Sajip 发布,翻译遵循 CC BY-SA 2.5 许可协议

推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏