Tôi đã cài đặt Python 3.5 bởi Bộ sưu tập phần mềm trên CentOS 7 tối thiểu. Tất cả đều hoạt động tốt, nhưng tôi thấy lỗi thư viện dùng chung được đề cập trong câu hỏi này khi tôi thử chạy một tập lệnh CGI đơn giản:
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
Tôi muốn một giải pháp vĩnh viễn trên toàn hệ thống, hoạt động cho tất cả người dùng, do đó loại trừ việc thêm các câu lệnh xuất vào các tệp .profile hoặc .bashrc. Có một giải pháp một dòng, dựa trên trang giải pháp Red Hat . Cảm ơn vì nhận xét đã chỉ ra:
echo 'source scl_source enable rh-python35' | sudo tee --append /etc/profile.d/python35.sh
Sau khi khởi động lại, tất cả đều tốt trên vỏ, nhưng đôi khi máy chủ web của tôi vẫn phàn nàn. Có một cách tiếp cận khác luôn hoạt động cho cả shell và máy chủ, và chung chung hơn. Tôi đã thấy giải pháp ở đây và sau đó nhận ra rằng nó thực sự được đề cập trong một trong những câu trả lời ở đây! Dù sao, trên CentOS 7, đây là các bước:
vim /etc/ld.so.conf
Mà trên máy của tôi vừa có:
include ld.so.conf.d/*.conf
Vì vậy, tôi đã tạo một tệp mới:
vim /etc/ld.so.conf.d/rh-python35.conf
Và thêm:
/opt/rh/rh-python35/root/usr/lib64/
Và để tự xây dựng lại bộ đệm:
sudo ldconfig
Thế là xong, kịch bản hoạt động tốt!
Đây là một giải pháp tạm thời, không hoạt động trong các lần khởi động lại:
sudo ldconfig /opt/rh/rh-python35/root/usr/lib64/ -v
Tùy chọn -v (dài dòng) chỉ để xem những gì đang diễn ra. Tôi thấy rằng nó đã làm: libpython3.5m.so.rh-python35-1.0
Lỗi đặc biệt này đã biến mất. Ngẫu nhiên, tôi đã phải chownsử dụng apache để thoát khỏi lỗi cấp phép sau đó.
Lưu ý rằng tôi đã sử dụng find để định vị thư mục cho thư viện. Bạn cũng có thể làm:
sudo yum install mlocate
sudo updatedb
locate libpython3.5m.so.rh-python35-1.0
Mà trên VM của tôi trả về:
/opt/rh/rh-python35/root/usr/lib64/libpython3.5m.so.rh-python35-1.0
Đó là con đường tôi cần đưa ra cho ldconfig, như hình trên.