web-dev-qa-db-fra.com

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

Je suis un peu choqué par le processus d'installation du paquet 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?

213
maxm

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 dans dist-packages lorsqu'ils arrivent du gestionnaire de paquets Debian vers cet emplacement:

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

Puisque easy_install et pip sont installés à partir du gestionnaire de paquets, ils utilisent également dist-packages, mais ils placent les paquets ici:

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

Depuis le Wiki Python Debian :

dist-packages au lieu de site-packages. Logiciel tiers en Python installés à partir de paquets Debian vont dans dist-paquets, pas paquets de site. C'est pour réduire les conflits entre le système Python, et toute version Python de source que vous pourriez installer manuellement.

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

201
jterrace

Ma solution au problème est de faire de dist-packages un 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'option -v).

0
sds