Instalei o Python 3.5 da Software Collections no mínimo no CentOS 7. Tudo funcionou bem por conta própria, mas vi o erro da biblioteca compartilhada mencionado nesta pergunta quando tentei executar um script CGI simples:
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
Eu queria uma solução permanente em todo o sistema que funcionasse para todos os usuários, de modo a excluir a adição de instruções de exportação em arquivos .profile ou .bashrc. Existe uma solução de uma linha, baseada na página de soluções da Red Hat . Obrigado pelo comentário que aponta:
echo 'source scl_source enable rh-python35' | sudo tee --append /etc/profile.d/python35.sh
Após uma reinicialização, tudo fica bem no shell, mas às vezes meu servidor da web ainda reclama. Há outra abordagem que sempre funcionou para o shell e o servidor e é mais genérica. Vi a solução aqui e percebi que também é mencionada em uma das respostas aqui! De qualquer forma, no CentOS 7, estas são as etapas:
vim /etc/ld.so.conf
Que na minha máquina tinha apenas:
include ld.so.conf.d/*.conf
Então eu criei um novo arquivo:
vim /etc/ld.so.conf.d/rh-python35.conf
E acrescentou:
/opt/rh/rh-python35/root/usr/lib64/
E para recriar manualmente o cache:
sudo ldconfig
É isso aí, os scripts funcionam bem!
Esta foi uma solução temporária, que não funcionou nas reinicializações:
sudo ldconfig /opt/rh/rh-python35/root/usr/lib64/ -v
A opção -v (detalhada) era apenas para ver o que estava acontecendo. Eu vi que ele fez: / 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
Este erro em particular foi embora. Aliás, eu tive que chown
o usuário apache para se livrar de um erro de permissão depois disso.
Observe que eu usei o find para localizar o diretório da biblioteca. Você também pode fazer:
sudo yum install mlocate
sudo updatedb
locate libpython3.5m.so.rh-python35-1.0
Que na minha VM retorna:
/opt/rh/rh-python35/root/usr/lib64/libpython3.5m.so.rh-python35-1.0
Qual é o caminho que preciso fornecer ao ldconfig, como mostrado acima.