Я установил Python 3.5 от Software Collections на 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. Существует однострочное решение, основанное на странице решений Red Hat . Спасибо за комментарий, который указывает на это:
echo 'source scl_source enable rh-python35' | sudo tee --append /etc/profile.d/python35.sh
После перезагрузки все хорошо на оболочке, но иногда мой веб-сервер все еще жалуется. Есть другой подход, который всегда работал как для оболочки, так и для сервера, и является более общим. Я увидел решение здесь, а затем понял, что оно на самом деле упоминается в одном из ответов здесь! Во всяком случае, на 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 (многословная) была просто чтобы увидеть, что происходит. Я видел, что он сделал: / 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, чтобы найти каталог для библиотеки. Вы также можете сделать:
sudo yum install mlocate
sudo updatedb
locate libpython3.5m.so.rh-python35-1.0
Который на моей ВМ возвращает:
/opt/rh/rh-python35/root/usr/lib64/libpython3.5m.so.rh-python35-1.0
Какой путь мне нужно указать ldconfig, как показано выше.