【问题标题】:libpython2.7.so.1.0: cannot open shared object file: No such file or directorylibpython2.7.so.1.0:无法打开共享对象文件:没有这样的文件或目录
【发布时间】:2014-01-17 12:39:01
【问题描述】:

我试图从终端运行 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 脚本失败了? 我尝试过运行

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

没有运气......

顺便说一句 - 我已经设法在 eclipse 中使用 python 插件调试了这个脚本,当我查看调试配置时,我看到 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

标签: python shared-libraries


【解决方案1】:

对我来说,https://stackoverflow.com/a/1100297/3559967 的答案有效。 该问题的作者还表示 LD_LIBRARY_PATH 方法对他不起作用,但将库路径添加到 /etc/ld.so.conf 并运行 ldconfig 有效。

【讨论】:

    【解决方案2】:

    尝试查找文件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。 它解决了我的问题。祝你好运!

    【讨论】:

    • 好的,如何包含它?只是将路径粘贴到文本文件中?我试过它不起作用。还有什么办法吗?
    • @krozaine:你粘贴/etc/ld.so.conf文件然后运行ldconfig命令吗?
    • @krozaine: 你能粘贴命令locate libpython2.7.so.1.0 的输出和文件/etc/ld.so.conf 的内容吗?
    • 我很好奇为什么 python2.7 rpm 安装不处理这个问题?这似乎是包装疏忽?
    • -- 您可以使用whereis libpython2.7.so.1.0 来定位文件。 :)
    【解决方案3】:

    出于某种原因,这两个对我来说非常有效:

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

    我找到了他们herehere

    【讨论】:

    • 刚安装了libpython2.7就可以了
    【解决方案4】:

    这不是我热衷的主题,但我的理解是针对 Linux 机器,尤其是shared library directories should be specified at the compile step

    例如,按照链接的示例,以下是我如何确保将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

    【讨论】:

      【解决方案5】:

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

      【讨论】:

        【解决方案6】:

        添加到正确答案:

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

        执行此操作的正确方法是在 /etc/ld.so.conf.d/ 中添加一个新文件,然后在该文件中添加上面的行。

        【讨论】:

          【解决方案7】:

          我在 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
          猜你喜欢
          • 2022-09-27
          • 1970-01-01
          • 2020-11-06
          • 2021-06-04
          • 2021-07-19
          • 2021-12-20
          • 2012-07-13
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多