ฉันรู้สึกสับสนเล็กน้อยจากกระบวนการติดตั้งแพคเกจหลาม โดยเฉพาะความแตกต่างระหว่างแพคเกจที่ติดตั้งในไดเรกทอรี dist-packages และไดเรกทอรีแพคเกจไซต์คืออะไร?
ฉันรู้สึกสับสนเล็กน้อยจากกระบวนการติดตั้งแพคเกจหลาม โดยเฉพาะความแตกต่างระหว่างแพคเกจที่ติดตั้งในไดเรกทอรี dist-packages และไดเรกทอรีแพคเกจไซต์คืออะไร?
คำตอบ:
dist-packages เป็นการประชุมเฉพาะของ Debian ที่มีอยู่ในอนุพันธ์เช่น Ubuntu โมดูลได้รับการติดตั้งไปยังแพ็คเกจอื่น ๆ เมื่อมาจาก Debian package manager ในตำแหน่งนี้:
/usr/lib/python2.7/dist-packages
ตั้งแต่easy_install
และpip
ถูกติดตั้งจากตัวจัดการแพคเกจพวกเขายังใช้ dist-packages แต่พวกเขาวางแพคเกจที่นี่:
/usr/local/lib/python2.7/dist-packages
จากDebian Python Wiki :
dist-packages แทน site-packages ซอฟต์แวร์ Python ของบุคคลที่สามที่ติดตั้งจากแพ็คเกจ Debian จะเข้าสู่แพ็คเกจอื่นไม่ใช่แพ็คเกจไซต์ นี่คือการลดความขัดแย้งระหว่างระบบ Python และ Python จากแหล่งใด ๆ ที่คุณอาจติดตั้งด้วยตนเอง
ซึ่งหมายความว่าหากคุณติดตั้ง Python จากแหล่งด้วยตนเองมันจะใช้ไดเรกทอรีแพ็คเกจเว็บไซต์ สิ่งนี้จะช่วยให้คุณแยกการติดตั้งสองแบบออกจากกันโดยเฉพาะอย่างยิ่ง Debian และ Ubuntu ที่ต้องพึ่งพา Python เวอร์ชันระบบสำหรับยูทิลิตี้ระบบจำนวนมาก
dist-packages
เป็นไดเรกทอรีเฉพาะของเดเบียนที่apt
และเพื่อน ๆ ติดตั้งเนื้อหาของพวกเขาและsite-packages
เป็นมาตรฐานpip
ไดเรกทอรี
ปัญหาคือ - จะเกิดอะไรขึ้นเมื่อมีแพ็คเกจรุ่นเดียวกันต่างกันในไดเรกทอรีต่างกัน
วิธีแก้ปัญหาของฉันคือการทำให้dist-packages
symlink ไปที่site-packages
:
for d in $(find $WORKON_HOME -type d -name dist-packages); do
pushd $d
cd ..
if test -d dist-packages/__pycache__; then
mv -v dist-packages/__pycache__/* site-packages/__pycache__/
rmdir -v dist-packages/__pycache__
fi
mv -v dist-packages/* site-packages/
rmdir -v dist-packages
ln -sv site-packages dist-packages
popd
done
(หากคุณไม่ได้ใช้เครื่องมือ gnu ให้ลบ-v
ตัวเลือกออก)