Исполняемый файл Python не находит библиотеку libpython

Я устанавливаю Python 2.7 на CentOS 5. Я построил и установил Python следующим образом

./configure --enable-shared --prefix=/usr/local make make install 

Когда я пытаюсь запустить / usr / local / bin / python, я получаю это сообщение об ошибке

 /usr/local/bin/python: error while loading shared libraries: libpython2.7.so.1.0: cannot open shared object file: No such file or directory 

Когда я запускаю ldd на / usr / local / bin / python, я получаю

 ldd /usr/local/bin/python libpython2.7.so.1.0 => not found libpthread.so.0 => /lib64/libpthread.so.0 (0x00000030e9a00000) libdl.so.2 => /lib64/libdl.so.2 (0x00000030e9200000) libutil.so.1 => /lib64/libutil.so.1 (0x00000030fa200000) libm.so.6 => /lib64/libm.so.6 (0x00000030e9600000) libc.so.6 => /lib64/libc.so.6 (0x00000030e8e00000) /lib64/ld-linux-x86-64.so.2 (0x00000030e8a00000) 

Как сообщить Python, где найти libpython?

6 Solutions collect form web for “Исполняемый файл Python не находит библиотеку libpython”

Попробуйте следующее:

 LD_LIBRARY_PATH=/usr/local/lib /usr/local/bin/python 

Замените /usr/local/lib папкой, в которой вы установили libpython2.7.so.1.0 если она не находится в /usr/local/lib .

Если это работает и вы хотите, чтобы изменения были постоянными, у вас есть два варианта:

  1. Добавьте export LD_LIBRARY_PATH=/usr/local/lib в ваш .profile в вашем домашнем каталоге (это работает, только если вы используете оболочку, которая загружает этот файл при запуске нового экземпляра оболочки). Этот параметр влияет только на пользователя.

  2. Добавьте /usr/local/lib в /etc/ld.so.conf и запустите ldconfig . Конечно, это общесистемная настройка.

Надеваю шляпу могильщика …

Лучший способ найти это – во время компиляции. Так как вы – один префикс настройки, все равно можете точно сказать исполняемому файлу, где найти его общие библиотеки. В отличие от OpenSSL и других пакетов программного обеспечения, Python не дает вам хороших конфигурационных директив для обработки альтернативных путей библиотек (не каждый из вас знает root …). В простейшем случае вам нужно всего лишь следующее:

 ./configure --enable-shared \ --prefix=/usr/local \ LDFLAGS="-Wl,--rpath=/usr/local/lib" 

Или, если вы предпочитаете версию, отличную от linux:

 ./configure --enable-shared \ --prefix=/usr/local \ LDFLAGS="-R/usr/local/lib" 

Флаг « rpath » сообщает python, что ему нужны библиотеки времени выполнения в этом конкретном пути. Вы можете использовать эту идею для обработки зависимостей, установленных в другом месте, чем стандартные расположения систем. Например, в моих системах, так как у меня нет корня и вам нужно сделать почти полностью автономную установку Python, моя строка конфигурации выглядит так:

 ./configure --enable-shared \ --with-system-ffi \ --with-system-expat \ --enable-unicode=ucs4 \ --prefix=/apps/python-${PYTHON_VERSION} \ LDFLAGS="-L/apps/python-${PYTHON_VERSION}/extlib/lib -Wl,--rpath=/apps/python-${PYTHON_VERSION}/lib -Wl,--rpath=/apps/python-${PYTHON_VERSION}/extlib/lib" \ CPPFLAGS="-I/apps/python-${PYTHON_VERSION}/extlib/include" 

В этом случае я компилирую библиотеки, которые python использует (например, ffi , readline и т. Д.) extlib каталог extlib в самом дереве каталогов python. Таким образом, я смогу создать каталог python – $ {PYTHON_VERSION} и приземлиться где угодно, и он будет «работать» (при условии, что вы не libm конфликтами libc или libm ). Это также помогает при попытке запустить несколько версий Python в одном окне, так как вам не нужно менять LD_LIBRARY_PATH или беспокоиться о сбое неправильной версии библиотеки Python.

Изменить: забыл упомянуть, компилятор будет жаловаться, если вы не установите переменную среды PYTHONPATH в то, что вы используете в качестве префикса, и не можете скомпилировать некоторые модули, например, чтобы расширить приведенный выше пример, установите PYTHONPATH в префикс, используемый в приведенный выше пример с export PYTHONPATH=/apps/python-${PYTHON_VERSION}

У меня была та же проблема, и я решил это так:

Если вы знаете, где находится libpython, я предположил, что в вашем случае это будет /usr/local/lib/libpython2.7.so.1.0 , вы можете просто создать символическую ссылку на него:

 sudo ln -s /usr/local/lib/libpython2.7.so.1.0 /usr/lib/libpython2.7.so.1.0 

Затем попробуйте запустить ldd раз и посмотреть, работает ли он.

просто установите python-lib. (Python27 Пб). Он установит libpython2.7.so1.0. Нам не нужно вручную устанавливать что-либо.

Я установил с помощью команды:

 ./configure --prefix=/usr \ --enable-shared \ --with-system-expat \ --with-system-ffi \ --enable-unicode=ucs4 && make 

Теперь, как пользователь root:

 make install && chmod -v 755 /usr/lib/libpython2.7.so.1.0 

Затем я попытался выполнить python и получил ошибку:

/ usr / local / bin / python: ошибка при загрузке разделяемых библиотек: libpython2.7.so.1.0: невозможно открыть файл общих объектов: нет такого файла или каталога

Затем я вышел из корневого пользователя и снова попытался выполнить Python, и он успешно работал.

Я установил Python 3.5 по коллекциям программного обеспечения на CentOS 7 минимальным. Все это отлично работало само по себе, но я видел ошибку общей библиотеки, упомянутую в этом вопросе, когда я попытался запустить простой скрипт CGI:

 tail /var/log/httpd/error_log AH01215: /opt/rh/rh-python35/root/usr/bin/python: error while loading shared libraries: libpython3.5m.so.rh-python35-1.0: cannot open shared object file: No such file or directory 

Я хотел создать постоянное решение для всей системы, которое будет работать для всех пользователей, чтобы исключить добавление экспортных инструкций в файлы .profile или .bashrc. Я видел решение здесь, а затем понял, что он действительно упоминается в одном из ответов здесь! В любом случае, на CentOS 7, это следующие шаги:

  vim /etc/ld.so.conf 

Что на моей машине просто было:

 include ld.so.conf.d/*.conf 

Поэтому я создал новый файл:

 vim /etc/ld.so.conf.d/rh-python35.conf 

И добавил:

 /opt/rh/rh-python35/root/usr/lib64/ 

После перезагрузки следующий шаг не был необходим, но вручную перестроить кеш:

 sudo ldconfig 

Вот и все, скрипты работают нормально!

Это временное решение, которое не срабатывало при перезагрузке:

 sudo ldconfig /opt/rh/rh-python35/root/usr/lib64/ -v 

Параметр -v (verbose) должен был просто посмотреть, что происходит. Я видел, что это: / opt / rh / rh-python35 / root / usr / lib64: libpython3.so.rh-python35 -> libpython3.so.rh-python35 libpython3.5m.so.rh-python35-1.0 -> libpython3.5m.so.rh-python35-1.0

Эта конкретная ошибка исчезла. Кстати, мне пришлось chmod пользователю apache, чтобы избавиться от ошибки разрешения после этого.

Обратите внимание, что я использовал find, чтобы найти каталог для библиотеки. Вы также можете сделать:

 sudo yum install mlocate sudo updatedb locate libpython3.5m.so.rh-python35-1.0 

На моей VM возвращается:

 /opt/rh/rh-python35/root/usr/lib64/libpython3.5m.so.rh-python35-1.0 

Какой путь мне нужно передать ldconfig, как показано выше.

  • Хорошо ли хранить яйца пакета python в artifactory?
  • Лучший способ запуска процесса и блокировки до его завершения
  • Загрузите изображение в хранилище Appengine Datastore с помощью BlobStore и конечных точек
  • pycrypto и движок Google
  • Свойства в Python
  • Не удается остановить веб-сервер в Google App Engine Launcher
  • Ошибка ложной синтаксической ошибки PyCharm с использованием черепахи
  • UnboundLocalError: локальная переменная 'Core_prices', на которую ссылаются перед назначением
  • Python - лучший язык программирования в мире.