Quelle est la différence entre dist-packages et site-packages?

243

Je suis un peu vexé par le processus d'installation du package python. Plus précisément, quelle est la différence entre les packages installés dans le répertoire dist-packages et le répertoire site-packages?

maxm
la source

Réponses:

226

dist-packages est une convention spécifique à Debian qui est également présente dans ses dérivés, comme Ubuntu. Les modules sont installés sur dist-packages lorsqu'ils proviennent du gestionnaire de paquets Debian à cet emplacement:

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

Depuis easy_installet pipsont installés à partir du gestionnaire de packages, ils utilisent également dist-packages, mais ils placent les packages ici:

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

Depuis le wiki Debian Python :

dist-packages au lieu de site-packages. Les logiciels tiers Python installés à partir des paquets Debian vont dans les paquets dist, pas dans les paquets site. Cela permet de réduire les conflits entre le système Python et toute version Python source que vous pouvez installer manuellement.

Cela signifie que si vous installez manuellement Python à partir des sources, il utilise le répertoire site-packages. Cela vous permet de garder les deux installations séparées, d'autant plus que Debian et Ubuntu s'appuient sur la version système de Python pour de nombreux utilitaires système.

jterrace
la source
22
Est-ce exact?! J'installe avec pip et il va aux dist-packages. (sur Deb Squeeze + Py 2.6)
Basel Shishani
4
C'est la même chose pour moi aussi. Les packages installés avec pip ou easy_install vont tous dans des packages dist.
monostop
1
Même chose ici, aurais-je des problèmes si je supprimais toutes ces installations?
Mohamed Turki
1
Mêmes répertoires pour Debian 6.0.10 (toujours sur Python 2.6).
ᴠɪɴᴄᴇɴᴛ
2
Si vous utilisez virtualenv avec pip, pip installera les packages dans le répertoire site-packages .
diabloneo
4

dist-packagesest le répertoire spécifique à Debian où les aptamis installent leurs trucs, et site-packagesest le standardpip répertoire .

Le problème est - que se passe-t-il lorsque différentes versions du même package sont présentes dans différents répertoires?

Ma solution au problème est de créer dist-packagesun lien symbolique vers 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

(si vous n'utilisez pas d'outils gnu, supprimez l' -voption).

sds
la source
1
Je suis un peu confus quant au problème que vous résolvez avec votre solution, car la question nécessite une explication
Jürgen K.
@ JürgenK.: Le problème pour moi était quel paquet est utilisé quand il existe différentes versions dans différents répertoires.
sds