我试图导入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']
任何帮助将不胜感激。
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
使用第一种形式,如果是空的(相当于空字符串,或不存在的话),第二个形式,如果事实并非如此。 注意使用出口 。
确保您的libcurl.so模块在系统库路径,这是从Python库路径不同的独立。
A“速战速决”就是这个路径添加到LD_LIBRARY_PATH变量。 但是,设置该系统范围内(甚至占宽)是一个坏主意,因为它是可以设置它以这样一种方式,有些计划会找到一个图书馆它不应该,甚至更糟糕,开拓安全漏洞。
如果你的“本地安装库”安装在,例如,在/ usr / local / lib目录,添加这个目录到/etc/ld.so.conf中(这是一个文本文件),然后运行“ldconfig命令”
该命令将运行一个缓存工具,也将创建装载系统运作所需的所有必要的“符号链接”。 令人惊讶的是,“让安装”与libcurl不这样做了,但有可能它不能,如果在/ usr / local / lib目录不在/etc/ld.so.conf中了。
PS:这可能是你的/etc/ld.so.conf中只含有“包括ld.so.conf.d / *会议”。 您仍然可以添加一个目录路径后,或者只是创建目录里面它正在从包括一个新的文件。 不要忘记后,运行“ldconfig命令”。
小心。 得到这个错误可以搞砸了你的系统。
此外:请确保您的Python模块是针对该版本的libcurl编译。 如果你只是从另一个系统复制一些文件过来,这不会总是工作。 如果有疑问,编译系统上的模块,你打算上运行它们。
当你在第一时间编译pycurl您还可以设置LD_RUN_PATH到/ usr / local / lib目录在您的用户环境。 这将在C扩展模块。所以,这样它会自动知道在哪里可以找到在运行时库,而无需有LD_LIBRARY_PATH设置在运行时的RPATH属性嵌入在/ usr / local / lib目录。
有完全相同的问题。 我安装卷曲7.19到/ opt /卷曲/以确保我不会影响我们的生产服务器当前的卷曲。 有一次,我挂libcurl.so.4到/ usr / lib目录下:
须藤LN -s /opt/curl/lib/libcurl.so /usr/lib/libcurl.so.4
我还是得到了同样的错误! Durf。
但运行使LDCONFIG联动为我和起作用的。 无需设置LD_RUN_PATH或LD_LIBRARY_PATH的。 只需要运行ldconfig。
作为补充,以上答案 - 我只是碰到了类似的问题,完全是默认安装的Python的工作。
当我调用共享对象库我在寻找与的例子LD_LIBRARY_PATH
,我得到的是这样的:
$ LD_LIBRARY_PATH=/path/to/mysodir:$LD_LIBRARY_PATH python example-so-user.py
python: can't open file 'example-so-user.py': [Errno 2] No such file or directory
值得注意的是,它甚至不抱怨进口 - 它抱怨源文件!
但是,如果我强迫使用对象加载LD_PRELOAD
:
$ LD_PRELOAD=/path/to/mysodir/mypyobj.so python example-so-user.py
python: error while loading shared libraries: libtiff.so.5: cannot open shared object file: No such file or directory
......我立即得到一个更有意义的错误消息 - 关于丢失的依赖!
只是想我会记下来在这里 - 干杯!
我用python setup.py build_ext -R/usr/local/lib -I/usr/local/include/libcalg-1.0
和编译.so文件是生成文件夹之下。 您可以键入python setup.py --help build_ext
看到-R和的解释-I