Ho installato Python 3.5 di Software Collections su CentOS 7 minimal. Tutto ha funzionato bene da solo, ma ho visto l'errore della libreria condivisa menzionato in questa domanda quando ho provato a eseguire un semplice script 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
Volevo una soluzione permanente a livello di sistema che funzioni per tutti gli utenti, in modo da escludere l'aggiunta di istruzioni di esportazione a file .profile o .bashrc. Esiste una soluzione a una riga, basata sulla pagina delle soluzioni Red Hat . Grazie per il commento che lo sottolinea:
echo 'source scl_source enable rh-python35' | sudo tee --append /etc/profile.d/python35.sh
Dopo un riavvio, va tutto bene sulla shell, ma a volte il mio server web si lamenta ancora. C'è un altro approccio che ha sempre funzionato sia per la shell che per il server ed è più generico. Ho visto la soluzione qui e poi ho capito che in realtà è menzionata anche in una delle risposte qui! Ad ogni modo, su CentOS 7, questi sono i passaggi:
vim /etc/ld.so.conf
Che sulla mia macchina aveva appena:
include ld.so.conf.d/*.conf
Quindi ho creato un nuovo file:
vim /etc/ld.so.conf.d/rh-python35.conf
E aggiunse:
/opt/rh/rh-python35/root/usr/lib64/
E per ricostruire manualmente la cache:
sudo ldconfig
Ecco fatto, gli script funzionano bene!
Questa era una soluzione temporanea, che non funzionava nei riavvii:
sudo ldconfig /opt/rh/rh-python35/root/usr/lib64/ -v
L'opzione -v (verbosa) era solo per vedere cosa stava succedendo. Ho visto che lo ha fatto: / 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
Questo errore particolare è andato via. Per inciso, ho dovuto chownl'utente ad apache per liberarmi di un errore di autorizzazione dopo quello.
Nota che ho usato find per individuare la directory per la libreria. Puoi anche fare:
sudo yum install mlocate
sudo updatedb
locate libpython3.5m.so.rh-python35-1.0
Che sulla mia macchina virtuale restituisce:
/opt/rh/rh-python35/root/usr/lib64/libpython3.5m.so.rh-python35-1.0
Qual è il percorso che devo dare a ldconfig, come mostrato sopra.