libpython2.7.so.1.0: 无法打开共享对象文件:没有那个文件或目录。

34

我一直在尝试从终端运行Python脚本,但一直收到以下错误信息:

ImportError: libpython2.7.so.1.0: cannot open shared object file: No such file or directory

如果我运行print sys.version,我会得到:

>>> import sys
>>> print sys.version
2.7.3 (default, Feb 26 2013, 16:27:39)
[GCC 4.4.6 20120305 (Red Hat 4.4.6-4)]

如果我运行ldd /usr/local/bin/python命令

>> ldd /usr/local/bin/python
        linux-vdso.so.1 =>  (0x00007fff219ff000)
        libpthread.so.0 => /lib64/libpthread.so.0 (0x0000003300c00000)
        libdl.so.2 => /lib64/libdl.so.2 (0x0000003300800000)
        libutil.so.1 => /lib64/libutil.so.1 (0x0000003310e00000)
        libm.so.6 => /lib64/libm.so.6 (0x0000003300000000)
        libc.so.6 => /lib64/libc.so.6 (0x0000003300400000)
        /lib64/ld-linux-x86-64.so.2 (0x00000032ffc00000)

我不明白我有哪个版本的Python?为什么从终端运行这个Python脚本会失败? 我已经尝试运行

export LD_LIBRARY_PATH=/usr/local/lib/python2.7/

没有运气...

顺便说一句 - 我已经成功地在带有Python插件的Eclipse中调试了此脚本,当我查看调试配置时,我发现PYTHONPATH被设置为:

/..../eclipse/plugins/org.python.pydev_3.1.0.201312121632/pysrc/pydev_sitecustomize:/..../workspace/style_checker/src:/usr/local/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg:/usr/local/lib/python2.7/site-packages/pip-1.2.1-py2.7.egg:/usr/local/lib/python2.7:/usr/local/lib/python2.7/plat-linux2:/usr/local/lib/python2.7/lib-tk:/usr/local/lib/python2.7/lib-dynload:/usr/local/lib/python2.7/site-packages

所以Eclipse不知怎么找到了这个Python2.7库...那么我该如何在没有Eclipse的情况下,通过命令行来操作呢?我做错了什么吗?我正在使用CentOS6。


你尝试过 export LD_LIBRARY_PATH=/usr/local/lib/python2.7/:$LD_LIBRARY_PATH 吗? 在我的情况下,我运行了 export LD_LIBRARY_PATH=/home/minh.lengoc/.local/lib:$LD_LIBRARY_PATH - minhle_r7
7个回答

54

尝试查找文件libpython2.7.so.1.0:

locate libpython2.7.so.1.0

在我的情况下,它显示如下输出:

/opt/rh/python27/root/usr/lib64/libpython2.7.so.1.0

然后将行/opt/rh/python27/root/usr/lib64 粘贴到文件/etc/ld.so.conf

并运行ldconfig。 这解决了我的问题。祝你好运!


2
好的,怎么去包括它?只需要在文本文件中粘贴路径吗?我试过了,但是没有起作用。还有其他方法吗? - krozaine
@krozaine:您能够粘贴一下 locate libpython2.7.so.1.0 命令的输出结果以及 /etc/ld.so.conf 文件的内容吗? - CK.Nguyen
我很好奇为什么这不是由python2.7 rpm安装处理的?这似乎是一个打包疏忽? - Emmel
我的系统中没有libpython2.7.so.1.0。 $ python -V ... 2.7.12 - Kyle Anderson
1
你可以使用 whereis libpython2.7.so.1.0 来定位文件。 :) - atb00ker
@atb00ker,“whereis”对我没有任何结果,但“locate”有。 - Joshua Schlichting

32

出于某种原因,这两者对我来说都完美地起作用:

apt-get install libpython2.7
sudo apt-get install libatlas3-base

我在这里找到它们这里


6
只需安装libpython2.7即可。 - rightaway717
只需安装"apt-get install libpython2.7"即可,无需安装其他内容。 - Erol Erdogan

3

3

在64位Linux上执行32位gdb二进制文件时,我遇到了类似的问题:

arm-eabi-gdb: error while loading shared libraries: libpython2.7.so.1.0: cannot open shared object file: No such file or directory

我通过安装 libpython2.7:i386 解决了这个问题(注意:i386 后缀)。


我也是。使用 *Ubuntu 20.04 x86-64。 - dceccon

1
这不是我热衷的主题,但我的理解是,特别针对Linux机器(在那里你正在编译Python二进制文件),共享库目录应该在编译步骤中指定
例如,按照链接示例,以下是我如何确保libpython2.7.so.1.0被包含在其他库之后:
./configure --enable-shared \
        --prefix=/directory/for/Python-2.7.15 \
        LDFLAGS="-Wl,--rpath=/usr/local/lib -Wl,--rpath=/directory/for/Python-2.7.15"

注意,我还通过--prefix选项将Python安装到我选择的固定目录中。这对你来说可能不是必要的,但我这样做是为了提供一个通用解决方案,在这种情况下,你的Python安装可能位于任何地方
通过上述解决方案,我永远不需要导出LD_LIBRARY_PATH或者搞乱ldconfig

1

我通过使用“export LD_LIBRARY_PATH="${WORK_PATH}/venv/lib"”来解决了这个问题。


0

补充正确答案:

有多个问题是如何执行以下操作: 然后将行/opt/rh/python27/root/usr/lib64粘贴到文件/etc/ld.so.conf中

正确的方法是在/etc/ld.so.conf.d/中添加一个新文件,并在该文件中添加上述行。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接