Was ist der Unterschied zwischen dist-Paketen und Site-Paketen?


243

Ich bin ein bisschen verärgert über den Installationsprozess des Python-Pakets. Was ist der Unterschied zwischen Paketen, die im Verzeichnis dist-packages und im Verzeichnis site-packages installiert sind?

Antworten:


226

dist-packages ist eine Debian-spezifische Konvention, die auch in ihren Derivaten wie Ubuntu vorhanden ist. Module werden für dist-Pakete installiert, wenn sie vom Debian-Paketmanager an diesen Speicherort kommen:

/usr/lib/python2.7/dist-packages

Da easy_installund pipvom Paketmanager installiert werden, verwenden sie auch dist-Pakete, aber sie legen Pakete hier ab:

/usr/local/lib/python2.7/dist-packages

Aus dem Debian Python Wiki :

dist-Pakete statt Site-Pakete. Von Debian-Paketen installierte Python-Software von Drittanbietern wird in dist-Pakete und nicht in Site-Pakete integriert. Dies dient dazu, Konflikte zwischen dem Python-System und allen Python-Builds aus der Quelle, die Sie möglicherweise manuell installieren, zu verringern.

Dies bedeutet, dass bei der manuellen Installation von Python aus dem Quellcode das Verzeichnis site-packages verwendet wird. Auf diese Weise können Sie die beiden Installationen getrennt halten, insbesondere da Debian und Ubuntu für viele Systemdienstprogramme auf die Systemversion von Python angewiesen sind.


22
Ist das richtig?! Ich installiere mit pip und es geht um dist-Pakete. (auf Deb Squeeze + Py 2.6)
Basel Shishani

4
Das ist auch für mich so. Mit pip oder easy_install installierte Pakete gehen alle in dist-Pakete.
Monostop

1
Hätte ich hier auch Probleme, wenn ich alle diese Installationen entfernen würde?
Mohamed Turki

1
Gleiche Verzeichnisse für Debian 6.0.10 (noch unter Python 2.6).
31.

2
Wenn Sie virtualenv mit pip verwenden, installiert pip Pakete im Verzeichnis site-packages .
Diabloneo

4

dist-packagesist das Debian-spezifische Verzeichnis, in dem aptund Freunde ihre Inhalte installieren, und site-packagesdas Standardverzeichnis pip.

Das Problem ist - was passiert, wenn verschiedene Versionen desselben Pakets in verschiedenen Verzeichnissen vorhanden sind?

Meine Lösung für das Problem besteht darin, dist-packageseinen Symlink zu erstellen 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

(Wenn Sie keine Gnu-Tools verwenden, entfernen Sie die -vOption).


1
Ich bin ein wenig verwirrt, welches Problem Sie mit Ihrer Lösung lösen, da die Frage eine Erklärung erfordert
Jürgen K.

@ JürgenK.: Das Problem für mich war, welches Paket verwendet wird, wenn es verschiedene Versionen in verschiedenen Verzeichnissen gibt.
SDS
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.