¿Cuál es la diferencia entre dist-packages y site-packages?


243

Estoy un poco molesto por el proceso de instalación del paquete python. Específicamente, ¿cuál es la diferencia entre los paquetes instalados en el directorio dist-packages y el directorio site-packages?

Respuestas:


226

dist-packages es una convención específica de Debian que también está presente en sus derivados, como Ubuntu. Los módulos se instalan en los paquetes dist cuando provienen del administrador de paquetes Debian en esta ubicación:

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

Desde easy_instally pipse instalan desde el administrador de paquetes, también usan dist-packages, pero ponen paquetes aquí:

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

Del Wiki de Debian Python :

dist-packages en lugar de site-packages. El software Python de terceros instalado desde los paquetes de Debian va a los paquetes dist, no a los paquetes del sitio. Esto es para reducir los conflictos entre el sistema Python y cualquier compilación de Python desde el origen que pueda instalar manualmente.

Esto significa que si instala manualmente Python desde la fuente, usa el directorio de paquetes del sitio. Esto le permite mantener las dos instalaciones separadas, especialmente porque Debian y Ubuntu confían en la versión del sistema de Python para muchas utilidades del sistema.


22
¿Es esto exacto? Lo instalo con pip y va a dist-packages. (en Deb Squeeze + Py 2.6)
Basel Shishani

44
Es lo mismo para mí también. Los paquetes instalados con pip o easy_install se incluyen en dist-packages.
monostop

1
Lo mismo aquí, ¿tendría algún problema si elimino todas esas instalaciones?
Mohamed Turki

1
Los mismos directorios para Debian 6.0.10 (todavía en Python 2.6).
ᴠɪɴᴄᴇɴᴛ

2
Si usa virtualenv con pip, pip instalará paquetes en el directorio de paquetes del sitio .
diabloneo

4

dist-packageses el directorio específico de Debian donde los aptamigos instalan sus cosas y site-packageses el pipdirectorio estándar .

El problema es: ¿qué sucede cuando hay diferentes versiones del mismo paquete en diferentes directorios?

Mi solución al problema es hacer dist-packagesun enlace simbólico para 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 no está utilizando herramientas GNU, elimine la -vopción).


1
Estoy un poco confundido sobre qué problema resuelves con tu solución, ya que la pregunta requiere una explicación
Jürgen K.

@ JürgenK .: el problema para mí fue qué paquete se usa cuando hay diferentes versiones en diferentes directorios.
sds
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.