275 votes

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

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

250voto

jterrace Points 21939

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_install y pip sont installées à partir du gestionnaire de paquets, elles utilisent également la fonction dist-packages mais ils ont mis des paquets ici :

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

A partir de la Wiki Debian Python :

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

Cela signifie que si vous compilez et installez manuellement l'interpréteur Python à partir des sources, il utilise l'option site-packages répertoire. Cela vous permet de garder les deux installations séparées, en particulier parce que Debian et Ubuntu s'appuient sur la version système de Python pour de nombreux utilitaires système.

27 votes

Est-ce exact ? J'installe avec pip et cela va dans dist-packages. (sur Deb Squeeze + Py 2.6)

4 votes

C'est la même chose pour moi. Les paquets installés avec pip ou easy_install vont tous dans dist-packages.

1 votes

Même chose, est-ce que j'aurais des problèmes si je supprimais toutes ces installations ?

7voto

sds Points 16039

dist-packages est le répertoire spécifique à debian dans lequel apt et leurs amis installent leur matériel, et site-packages est la norme pip répertoire.

Le problème est le suivant : que se passe-t-il lorsque différentes versions d'un même paquet sont présentes dans différents répertoires ?

Ma solution au problème est de faire 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 les outils gnu, supprimez l'option -v ).

2voto

user1047788 Points 80

Debian (et Ubuntu) a introduite sa propre convention

# python3 -m site

sur Ubuntu Focal donne

sys.path = [
    '/qpid-dispatch',
    '/usr/lib/python38.zip',
    '/usr/lib/python3.8',
    '/usr/lib/python3.8/lib-dynload',
    '/usr/local/lib/python3.8/dist-packages',
    '/usr/lib/python3/dist-packages',
]
USER_BASE: '/root/.local' (doesn't exist)
USER_SITE: '/root/.local/lib/python3.8/site-packages' (doesn't exist)
ENABLE_USER_SITE: True

La convention, telle que décrite dans la liste de diffusion liée, est que les paquets python deb installés par le gestionnaire de paquets de la distribution vont dans le répertoire /usr/lib/python3/dist-packages et les paquets installés à l'aide de sudo pip3 entrer dans /usr/local/lib/python3.8/dist-packages .

Si vous compilez et installez votre propre interprète Python, il se placera par défaut dans le répertoire /usr/local , avec /usr/local/bin/pip3 qui s'installent dans les /usr/local/lib/pythonX.Y/site-packages .

L'intérêt de la convention Debian est de séparer les trois ensembles de paquets :

  1. paquets python installés par apt
  2. paquets installés par l'utilisateur root avec /usr/bin/pip3
  3. les paquets installés par l'utilisateur Root avec leurs propres /usr/local/bin/pip3

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X