libpython2.7.so.1.0: невозможно открыть общий объектный файл: нет такого файла или каталога

Я пытаюсь запустить скрипт 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/

без удачи...

Кстати, мне удалось отладить этот сценарий в 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.

4 ответа

Попробуйте найти файл 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, Это решило мою проблему. Удачи!

По некоторым причинам эти два отлично сработали для меня:

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

Я нашел их здесь и здесь

Возможно, вы могли бы попробовать ответ на /questions/3519485/pochemu-python-ne-mozhet-najti-obschie-obektyi-kotoryie-nahodyatsya-v-katalogah-v-syspath/3519503#3519503. Автор этого вопроса также заявил, что подход LD_LIBRARY_PATH не работает для него, но добавляет путь к библиотеке в /etc/ld.so.conf и работает ldconfig работал.

У меня была аналогичная проблема при выполнении 32-битного двоичного файла gdb на 64-битном Linux:

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)

Я решил это с помощью "export LD_LIBRARY_PATH="${WORK_PATH}/venv/lib".

Это не та тема, которой я увлекаюсь, но я понимаю, что для машин с 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"

Обратите внимание, что я также устанавливаю python в фиксированную директорию по своему выбору через --prefix вариант. Это может быть не нужно для вас, но я сделал это, чтобы предоставить решение для общего случая, когда ваша установка на python может находиться где угодно.

С вышеупомянутым решением мне никогда не придется экспортировать LD_LIBRARY_PATH или возиться с ldconfig

Добавление к правильному ответу:

Несколько вопросов о том, как сделать следующее: Затем вставьте строку /opt/rh/python27/root/usr/lib64 в файл /etc/ld.so.conf

Правильный способ сделать это - добавить новый файл в /etc/ld.so.conf.d/ и добавить строку выше в этом файле.

Другие вопросы по тегам