ฉันติดตั้ง Python 3.5 โดยSoftware Collectionsบน CentOS 7 ให้น้อยที่สุด ทุกอย่างทำงานได้ด้วยตัวเอง แต่ฉันเห็นข้อผิดพลาดของไลบรารีที่ใช้ร่วมกันที่กล่าวถึงในคำถามนี้เมื่อฉันพยายามเรียกใช้สคริปต์ 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
ฉันต้องการโซลูชันถาวรทั้งระบบที่ใช้งานได้กับผู้ใช้ทั้งหมดดังนั้นจึงไม่รวมการเพิ่มคำสั่งส่งออกไปยังไฟล์. profile หรือ. bashrc มีวิธีแก้ปัญหาแบบบรรทัดเดียวอ้างอิงจากหน้าโซลูชัน Red Hat ขอบคุณสำหรับความคิดเห็นที่ชี้ให้เห็น:
echo 'source scl_source enable rh-python35' | sudo tee --append /etc/profile.d/python35.sh
หลังจากรีสตาร์ททุกอย่างดีบนเชลล์ แต่บางครั้งเว็บเซิร์ฟเวอร์ของฉันก็ยังบ่นอยู่ มีวิธีการอื่นที่ใช้งานได้กับทั้งเชลล์และเซิร์ฟเวอร์และเป็นวิธีทั่วไปมากกว่า ฉันเห็นวิธีแก้ปัญหาที่นี่และจากนั้นก็รู้ว่ามันถูกกล่าวถึงจริงในหนึ่งในคำตอบที่นี่เช่นกัน! อย่างไรก็ตามใน CentOS 7 เหล่านี้เป็นขั้นตอน:
vim /etc/ld.so.conf
ซึ่งบนเครื่องของฉันเพิ่งมี:
include ld.so.conf.d/*.conf
ดังนั้นฉันจึงสร้างไฟล์ใหม่:
vim /etc/ld.so.conf.d/rh-python35.conf
และเพิ่ม:
/opt/rh/rh-python35/root/usr/lib64/
และสร้างแคชใหม่ด้วยตนเอง:
sudo ldconfig
นั่นมันสคริปต์ทำงานได้ดี!
นี่เป็นวิธีแก้ปัญหาชั่วคราวซึ่งไม่สามารถใช้การรีบูตได้:
sudo ldconfig /opt/rh/rh-python35/root/usr/lib64/ -v
ตัวเลือก -v (verbose) เป็นเพียงเพื่อดูว่าเกิดอะไรขึ้น ฉันเห็นว่ามันทำ: / 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
ข้อผิดพลาดนี้หายไป อนึ่งฉันต้องให้chownผู้ใช้ apache เพื่อกำจัดข้อผิดพลาดการอนุญาตหลังจากนั้น
โปรดทราบว่าฉันใช้findเพื่อค้นหาไดเรกทอรีสำหรับไลบรารี คุณสามารถทำได้:
sudo yum install mlocate
sudo updatedb
locate libpython3.5m.so.rh-python35-1.0
ซึ่ง VM ของฉันส่งคืน:
/opt/rh/rh-python35/root/usr/lib64/libpython3.5m.so.rh-python35-1.0
ซึ่งเป็นเส้นทางที่ฉันต้องให้กับ ldconfig ดังที่แสดงด้านบน