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/ и добавить строку выше в этом файле.