ความแตกต่างระหว่างแพ็กเกจ dist และแพ็คเกจไซต์คืออะไร


243

ฉันรู้สึกสับสนเล็กน้อยจากกระบวนการติดตั้งแพคเกจหลาม โดยเฉพาะความแตกต่างระหว่างแพคเกจที่ติดตั้งในไดเรกทอรี dist-packages และไดเรกทอรีแพคเกจไซต์คืออะไร?

คำตอบ:


226

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 เวอร์ชันระบบสำหรับยูทิลิตี้ระบบจำนวนมาก


22
ถูกต้องหรือไม่! ฉันจะติดตั้ง pip และไปที่แพ็คเกจอื่น ๆ (บน Deb Squeeze + Py 2.6)
Basel Shishani

4
มันก็เหมือนกันสำหรับฉันเช่นกัน แพ็คเกจที่ติดตั้งด้วย pip หรือ easy_install ทั้งหมดจะเข้าสู่แพ็คเกจ
monostop

1
เหมือนกันที่นี่ฉันจะมีปัญหาใด ๆ ถ้าฉันลบการติดตั้งเหล่านั้นทั้งหมด
Mohamed Turki

1
ไดเรกทอรีเดียวกันสำหรับ Debian 6.0.10 (ยังอยู่ใน Python 2.6)
2557

2
หากคุณใช้ virtualenv กับ pip pip จะติดตั้งแพ็คเกจในไดเรกทอรีเว็บไซต์แพ็คเกจ
diabloneo

4

dist-packagesเป็นไดเรกทอรีเฉพาะของเดเบียนที่aptและเพื่อน ๆ ติดตั้งเนื้อหาของพวกเขาและsite-packagesเป็นมาตรฐานpipไดเรกทอรี

ปัญหาคือ - จะเกิดอะไรขึ้นเมื่อมีแพ็คเกจรุ่นเดียวกันต่างกันในไดเรกทอรีต่างกัน

วิธีแก้ปัญหาของฉันคือการทำให้dist-packagessymlink ไปที่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ตัวเลือกออก)


1
ฉันสับสนเล็กน้อยที่ปัญหาที่คุณแก้ไขด้วยวิธีแก้ปัญหาของคุณเนื่องจากผู้ถามคำถามต้องอธิบาย
Jürgen K.

@ JürgenK: ปัญหาสำหรับฉันคือแพคเกจที่ใช้เมื่อมีรุ่นที่แตกต่างกันในไดเรกทอรีที่แตกต่างกัน
sds
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.