J'ai installé Python 3.5 par Software Collections sur CentOS 7 minimal. Tout a bien fonctionné tout seul, mais j'ai vu l'erreur de bibliothèque partagée mentionnée dans cette question lorsque j'ai essayé d'exécuter un simple 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
Je voulais une solution permanente à l'échelle du système qui fonctionne pour tous les utilisateurs, ce qui excluait l'ajout d'instructions d'exportation aux fichiers .profile ou .bashrc. Il existe une solution en une seule ligne, basée sur la page des solutions Red Hat . Merci pour le commentaire qui le souligne:
echo 'source scl_source enable rh-python35' | sudo tee --append /etc/profile.d/python35.sh
Après un redémarrage, tout va bien sur le shell, mais parfois mon serveur web se plaint encore. Il existe une autre approche qui a toujours fonctionné à la fois pour le shell et le serveur, et qui est plus générique. J'ai vu la solution ici , puis j'ai réalisé qu'elle était également mentionnée dans l'une des réponses ici! Quoi qu'il en soit, sur CentOS 7, voici les étapes:
vim /etc/ld.so.conf
Lequel sur ma machine avait juste:
include ld.so.conf.d/*.conf
J'ai donc créé un nouveau fichier:
vim /etc/ld.so.conf.d/rh-python35.conf
Et ajouté:
/opt/rh/rh-python35/root/usr/lib64/
Et pour reconstruire manuellement le cache:
sudo ldconfig
Voilà, les scripts fonctionnent bien!
C'était une solution temporaire, qui ne fonctionnait pas entre les redémarrages:
sudo ldconfig /opt/rh/rh-python35/root/usr/lib64/ -v
L'option -v (verbose) était juste pour voir ce qui se passait. J'ai vu que c'était le cas: / 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
Cette erreur particulière a disparu. Incidemment, je devais à chownl'utilisateur apache pour se débarrasser d'une erreur d'autorisation après cela.
Notez que j'ai utilisé find pour localiser le répertoire de la bibliothèque. Vous pouvez également faire:
sudo yum install mlocate
sudo updatedb
locate libpython3.5m.so.rh-python35-1.0
Qui sur ma VM renvoie:
/opt/rh/rh-python35/root/usr/lib64/libpython3.5m.so.rh-python35-1.0
Quel est le chemin que je dois donner à ldconfig, comme indiqué ci-dessus.