Я установил 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, как показано выше.