Zainstalowałem Python 3.5 firmy Software Collections na minimalnym systemie CentOS 7. Wszystko działało dobrze, ale widziałem błąd biblioteki współdzielonej wspomniany w tym pytaniu, gdy próbowałem uruchomić prosty skrypt 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
Chciałem mieć trwałe rozwiązanie systemowe, działające dla wszystkich użytkowników, wykluczające dodawanie instrukcji eksportu do plików .profile lub .bashrc. Istnieje rozwiązanie jednowierszowe, oparte na stronie rozwiązań Red Hat . Dziękuję za komentarz, który na to wskazuje:
echo 'source scl_source enable rh-python35' | sudo tee --append /etc/profile.d/python35.sh
Po ponownym uruchomieniu wszystko działa dobrze w powłoce, ale czasami mój serwer sieciowy nadal narzeka. Istnieje inne podejście, które zawsze działało zarówno dla powłoki, jak i serwera, i jest bardziej ogólne. Widziałem tutaj rozwiązanie , a potem zdałem sobie sprawę, że tak naprawdę jest wspomniane w jednej z odpowiedzi tutaj! W każdym razie w CentOS 7 są to kroki:
vim /etc/ld.so.conf
Który na moim komputerze właśnie miał:
include ld.so.conf.d/*.conf
Więc utworzyłem nowy plik:
vim /etc/ld.so.conf.d/rh-python35.conf
I dodał:
/opt/rh/rh-python35/root/usr/lib64/
Aby ręcznie odbudować pamięć podręczną:
sudo ldconfig
To wszystko, skrypty działają dobrze!
To było tymczasowe rozwiązanie, które nie działało po ponownym uruchomieniu:
sudo ldconfig /opt/rh/rh-python35/root/usr/lib64/ -v
Opcja -v (gadatliwa) służyła tylko do sprawdzenia, co się dzieje. Widziałem, że tak: / 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
Ten konkretny błąd zniknął. Nawiasem mówiąc, musiałem chownapache użytkownika, aby pozbyć się błędu uprawnień po tym.
Zauważ, że użyłem find do zlokalizowania katalogu biblioteki. Możesz też:
sudo yum install mlocate
sudo updatedb
locate libpython3.5m.so.rh-python35-1.0
Który na mojej maszynie wirtualnej zwraca:
/opt/rh/rh-python35/root/usr/lib64/libpython3.5m.so.rh-python35-1.0
Którą ścieżkę muszę podać ldconfig, jak pokazano powyżej.