¿Qué es el directorio de paquetes de sitios de Python?

119

El directorio site-packagesse menciona en varios artículos relacionados con Python. ¿Qué es? ¿Cómo usarlo?

Omer Dagan
fuente

Respuestas:

72

site-packageses el directorio de destino de los paquetes de Python construidos manualmente. Cuando compila e instala paquetes de Python desde la fuente (usando distutils , probablemente ejecutándolos python setup.py install), encontrará los módulos instalados en site-packagesforma predeterminada.

Hay ubicaciones estándar:

  • Unix (puro) 1 :prefix/lib/pythonX.Y/site-packages
  • Unix (no puro): exec-prefix/lib/pythonX.Y/site-packages
  • Ventanas: prefix\Lib\site-packages

1 Pure significa que el módulo usa solo código Python. Los no puros también pueden contener código C / C ++.

site-packageses parte predeterminada de la ruta de búsqueda de Python , por lo que los módulos instalados allí se pueden importar fácilmente después.


Lectura útil

Omer Dagan
fuente
10
la ubicación resultó estar /usr/local/lib/python3.6/site-packagesen ubuntu
mehmet
¡He visto sistemas Gentoo con él lib64!
MultipleMonomials
2
¿Conda o pip se instalan en paquetes de sitio, o simplemente paquetes construidos manualmente?
Monica Heddneck
2
La pregunta realmente interesante es: ¿Por qué este directorio? ¿Por qué no instalarlo en /usr/lib/python3.6?
Torsten Bronger
40

Cuando usa la --useropción con pip , el paquete se instala en la carpeta del usuario en lugar de en la carpeta global y no necesitará ejecutar el comando pip con privilegios de administrador.

La ubicación de la carpeta de paquetes del usuario se puede encontrar usando:

python -m site --user-site

Esto imprimirá algo como:

C:\Users\%USERNAME%\AppData\Roaming\Python\Python35\site-packages

Cuando no usa la --useropción con pip , el paquete se instala en la carpeta global dada por:

python -c "import site; print(site.getsitepackages())"

Esto imprimirá algo como:

['C:\\Program Files\\Anaconda3', 'C:\\Program Files\\Anaconda3\\lib\\site-packages'

Nota: Los valores impresos anteriores son para Windows 10 con Anaconda 4.x instalado con los valores predeterminados.

Shital Shah
fuente
24

site-packages es solo la ubicación donde Python instala sus módulos.

No es necesario "encontrarlo", Python sabe dónde encontrarlo por sí mismo, esta ubicación siempre es parte de PYTHONPATH (sys.path).

Programáticamente puede encontrarlo de esta manera:

import sys
site_packages = next(p for p in sys.path if 'site-packages' in p)
print site_packages

'/Users/foo/.envs/env1/lib/python2.7/site-packages'

Anthony Perot
fuente
3
Probablemente más fácil de importar el sitio que site.getsitepackages ()
JSharm
1
No todas las distribuciones de Python tienen site-packages, y esto aumentará StopIteration. Por ejemplo, Debian (y Ubuntu) tienen dist-packagesque instalar sus módulos distribuidos.
Mike T
Si usa virtualenv y no hereda paquetes globales, esto siempre funcionará. Nunca codifico sin un virtualenv
Anthony Perot