Pregunta ¿Cómo encuentro la ubicación de mi directorio Python site-packages?


¿Cómo encuentro la ubicación de mi directorio de paquetes de sitio?


647
2017-09-23 17:04


origen


Respuestas:


Hay dos tipos de directorios de paquetes de sitio, global y por usuario.

  1. Global site-packages ("dist-packages") directorios se enumeran en sys.path cuando corres:

    python -m site
    

    Para una ejecución más concisa de la lista getsitepackages desde el módulo de sitio en código Python:

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

    Nota: Con virtualenvs getsitepackages no está disponible, sys.path desde arriba enumerará correctamente el directorio de paquetes de sitio de virtualenv.

  2. los por usuario directorio de paquetes de sitio (PEP 370) es donde Python instala tus paquetes locales:

    python -m site --user-site
    

    Si esto apunta a un directorio no existente, verifique el estado de salida de Python y vea python -m site --help para explicaciones.

    Insinuación: Corriendo pip list --user o pip freeze --user le da una lista de todos los instalados por usuario paquetes de sitio.


149
2017-09-06 09:24



>>> import site; site.getsitepackages()
['/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages']

(o solo el primer artículo con site.getsitepackages()[0])


601
2017-10-18 08:19



De "Cómo instalar la documentación de Django" (aunque esto es útil para algo más que la instalación de Django): ejecuta lo siguiente desde el shell:

python -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())"

Formateado para su legibilidad (en lugar de utilizarlo como un trazador de líneas), que se parece a lo siguiente:

from distutils.sysconfig import get_python_lib
print(get_python_lib())

288
2017-09-23 17:06



Para Ubuntu,

python -c "from distutils.sysconfig import get_python_lib; print get_python_lib()"

...no es correcto.

Te señalará /usr/lib/pythonX.X/dist-packages

Esta carpeta solo contiene paquetes que su sistema operativo ha instalado automáticamente para que los programas se ejecuten.

En ubuntu, la carpeta site-packages que contiene paquetes instalados a través de setup_tools \ easy_install \ pip estará en /usr/local/lib/pythonX.X/dist-packages

La segunda carpeta es probablemente la más útil si el caso de uso está relacionado con la instalación o la lectura del código fuente.

Si no usa Ubuntu, probablemente esté seguro copiando y pegando el primer cuadro de código en la terminal.


97
2018-01-06 03:08



Esto es lo que funcionó para mí:

python -m site --user-site

59
2018-05-22 00:08



Como otros han notado, distutils.sysconfig tiene la configuración relevante:

import distutils.sysconfig
print distutils.sysconfig.get_python_lib()

... aunque el predeterminado site.py hace algo un poco más crudo, parafraseado a continuación:

import sys, os
print os.sep.join([sys.prefix, 'lib', 'python' + sys.version[:3], 'site-packages'])

(también agrega ${sys.prefix}/lib/site-python y agrega ambos caminos para sys.exec_prefix también, si esa constante fuera diferente).

Dicho eso, ¿cuál es el contexto? No deberías estar jugando con tu site-packages directamente; setuptools / distutils funcionará para la instalación, y su programa puede estar ejecutándose en virtualenv donde su ruta de acceso de acceso de usuario local es completamente local, por lo que tampoco debe asumir el uso de los paquetes de sitio de sistema directamente.


21
2017-09-23 17:14



Digamos que ha instalado el paquete 'django'. importarlo y escriba dir (django). Le mostrará todas las funciones y atributos con ese módulo. Escriba el intérprete de Python -

>>> import django
>>> dir(django)
['VERSION', '__builtins__', '__doc__', '__file__', '__name__', '__package__', '__path__', 'get_version']
>>> print django.__path__
['/Library/Python/2.6/site-packages/django']

Puede hacer lo mismo si ha instalado mercurial.

Esto es para Snow Leopard. Pero creo que debería funcionar en general también.


19
2018-02-23 18:32



Todas las respuestas (o la misma respuesta repetida una y otra vez) son inadecuadas. Lo que quieres hacer es esto:

from setuptools.command.easy_install import easy_install
class easy_install_default(easy_install):
  """ class easy_install had problems with the fist parameter not being
      an instance of Distribution, even though it was. This is due to
      some import-related mess.
      """

  def __init__(self):
    from distutils.dist import Distribution
    dist = Distribution()
    self.distribution = dist
    self.initialize_options()
    self._dry_run = None
    self.verbose = dist.verbose
    self.force = None
    self.help = 0
    self.finalized = 0

e = easy_install_default()
import distutils.errors
try:
  e.finalize_options()
except distutils.errors.DistutilsError:
  pass

print e.install_dir

La última línea muestra el directorio de instalación. Funciona en Ubuntu, mientras que los anteriores no. No me pregunte sobre Windows u otros dists, pero dado que es el mismo directorio que easy_install usa de manera predeterminada, probablemente sea correcto en todos lados donde easy_install funciona (así que, en todas partes, incluso en Mac). Que te diviertas. Nota: el código original tiene muchos insultos.


14
2018-02-06 02:40