Я устанавливаю 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?
gdb
из командной строки и LD_LIBRARY_PATH правильно настроен в терминале? Если нет, вам, вероятно, придется настроить LD_LIBRARY_PATH в вашем.gdbinit
файле. См. Этот ответ для получения дополнительной информации: stackoverflow.com/a/7041845/156771Надеть шляпу могильщика ...
Лучший способ, который я нашел для решения этой проблемы, - это время компиляции. Так как вы в любом случае используете префикс с одним параметром, он может явно указать исполняемому файлу, где найти его разделяемые библиотеки. В отличие от OpenSSL и других программных пакетов, Python не дает вам хороших директив конфигурации для обработки альтернативных путей к библиотекам (не все знают, что вы root) ... В простейшем случае все, что вам нужно, это следующее:
Или, если вы предпочитаете версию без Linux:
rpath
Флаг " " говорит Python, что у него есть библиотеки времени выполнения, в которых он нуждается в этом конкретном пути. Вы можете развить эту идею дальше для обработки зависимостей, установленных в другом месте, чем стандартные системные расположения. Например, в моих системах, поскольку у меня нет доступа с правами root и мне нужно делать почти полностью автономные установки Python, моя строка конфигурации выглядит следующим образом:В этом случае я собираю библиотеки, которые использует python (например
ffi
,readline
и т. Д.), Вextlib
каталог внутри самого дерева каталогов python. Таким образом , я могу очернить питона - $ {PYTHON_VERSION} каталога и посадить его в любом месте , и он будет «работать» ( при условии , что вы не столкнетесь вlibc
илиlibm
конфликтов). Это также помогает при попытке запустить несколько версий Python на одном и том же компьютере, поскольку вам не нужно постоянно менятьLD_LIBRARY_PATH
или беспокоиться о выборе неправильной версии библиотеки Python.Изменить: Забыл упомянуть, компиляция будет жаловаться, если вы не установите
PYTHONPATH
переменную окружения на то, что вы используете в качестве префикса, и не сможете скомпилировать некоторые модули, например, чтобы расширить приведенный выше пример, установитеPYTHONPATH
префикс, используемый в приведенном выше пример сexport PYTHONPATH=/apps/python-${PYTHON_VERSION}
...источник
$PYTHON_VERSION
?$PYTHON_VERSION
после настройки. Хотя даже с$PYTHON_VERSION
сетом, компилятор жалуется наPython build finished successfully! The necessary bits to build these optional modules were not found: _bz2 _curses _curses_panel _gdbm _lzma _sqlite3 _tkinter readline
make
команде и других командах установки?/apps/python-${PYTHON_VERSION}/extlib
чтобы убедиться, что их библиотеки и заголовки находятся в нужном месте для процесса сборки Python. Что касается пакетов системного уровня, вы, вероятно, застряли бы, полагаясь на пользователя root, чтобы установить их для вас заранее. Или найти альтернативу, которую можно скомпилировать и посадить вextlib
У меня была такая же проблема, и я решил ее так:
Если вы знаете, где находится libpython, я предположил, что это будет
/usr/local/lib/libpython2.7.so.1.0
в вашем случае, вы можете просто создать символическую ссылку на него:Затем попробуйте
ldd
снова запустить и посмотреть, сработало ли это.источник
Я установил Python 3.5 от Software Collections на CentOS 7 минимально. Все это работало само по себе, но я увидел ошибку общей библиотеки, упомянутую в этом вопросе, когда я попытался запустить простой скрипт CGI:
Я хотел иметь общесистемное постоянное решение, которое работает для всех пользователей, поэтому исключено добавление операторов экспорта в файлы .profile или .bashrc. Существует однострочное решение, основанное на странице решений Red Hat . Спасибо за комментарий, который указывает на это:
После перезагрузки все хорошо на оболочке, но иногда мой веб-сервер все еще жалуется. Есть другой подход, который всегда работал как для оболочки, так и для сервера, и является более общим. Я увидел решение здесь, а затем понял, что оно на самом деле упоминается в одном из ответов здесь! Во всяком случае, на CentOS 7 это следующие шаги:
Который на моей машине только что был:
Итак, я создал новый файл:
И добавил:
И вручную перестроить кеш:
Вот и все, скрипты работают отлично!
Это было временное решение, которое не работало при перезагрузке:
Опция -v (многословная) была просто чтобы увидеть, что происходит. Я видел, что он сделал: / 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
Эта конкретная ошибка ушла. Кстати, мне пришлось
chown
пользователю apache, чтобы избавиться от ошибки разрешения после этого.Обратите внимание, что я использовал find, чтобы найти каталог для библиотеки. Вы также можете сделать:
Который на моей ВМ возвращает:
Какой путь мне нужно указать ldconfig, как показано выше.
источник
#!/bin/bash
иsource scl_source enable rh-python35
в нем. access.redhat.com/solutions/527703На Солярисе 11
Используйте
LD_LIBRARY_PATH_64
для разрешения символической ссылки на библиотеки Python.В моем случае для Python3.6
LD_LIBRARY_PATH
не работал, ноLD_LIBRARY_PATH_64
сделал.Надеюсь это поможет.
С уважением
источник
Это сработало для меня ...
источник
Я установил с помощью команды:
Теперь как пользователь root:
Затем я попытался выполнить Python и получил ошибку:
Затем я вышел из системы от имени пользователя root и снова попытался запустить Python, и он успешно работал.
источник
Все, что для этого нужно - это установка файлов libpython [3 или 2] dev.
источник
просто установите python-lib. (Python27 Пб). Он установит libpython2.7.so1.0. Нам не нужно ничего устанавливать вручную.
источник