una recorrer matriz matrices manejo lista indice guardar extraer encontrar elemento ejemplos datos columna buscar python installation

recorrer - ¿Cómo encuentro la ubicación de mi directorio de paquetes de sitios de Python?



media de una matriz python (17)

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


Como otros han señalado, distutils.sysconfig tiene la configuración relevante:

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

... aunque el sitio predeterminado.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 ambas rutas para sys.exec_prefix también, si esa constante fuera diferente).

Dicho esto, ¿cuál es el contexto? No debes estar jugando con los site-packages tu site-packages directamente; setuptools / distutils funcionará para la instalación, y su programa puede ejecutarse en un virtualenv donde Pythonpath es completamente local para el usuario, por lo que tampoco debe asumir el uso de los paquetes de sitio del sistema directamente.


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

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

Formato para facilitar la lectura (en lugar de usarlo como una sola línea), que se parece a lo siguiente:

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


Digamos que has instalado el paquete ''django''. importalo y escribe en 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'']

Puedes hacer lo mismo si has instalado mercurial.

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


Esto debería funcionar en todas las distribuciones dentro y fuera del entorno virtual debido a su naturaleza de "baja tecnología". El módulo os siempre reside en el directorio padre de ''paquetes de sitio''

import os; print(os.path.dirname(os.__file__) + ''/site-packages'')

Para cambiar dir al directorio de paquetes de sitio, uso el siguiente alias (en sistemas * nix):

alias cdsp=''cd $(python -c "import os; print(os.path.dirname(os.__file__))"); cd site-packages''


Esto es lo que funcionó para mí:

python -m site --user-site


Esto funciona para mi Le conseguirá tanto las carpetas dist-paquetes como las carpetas de sitio. Si la carpeta no está en el camino de Python, no te estará haciendo mucho bien de todos modos.

import sys; print [f for f in sys.path if f.endswith(''packages'')]

Salida (instalación de Ubuntu):

[''/home/username/.local/lib/python2.7/site-packages'', ''/usr/local/lib/python2.7/dist-packages'', ''/usr/lib/python2.7/dist-packages'']


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

  1. Los directorios de sitio-paquetes globales (" dist-packages ") se enumeran en sys.path cuando ejecuta:

    python -m site

    Para una lista más concisa, ejecute los getsitepackages desde el módulo del sitio en el código Python:

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

    Nota: Sin embargo, con virtualenvs getsitepackages no está disponible , sys.path de arriba sys.path correctamente el directorio de paquetes de sitio de virtualenv.

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

    python -m site --user-site

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

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


Los paquetes de sistemas nativos instalados con la instalación de python en sistemas basados ​​en Debian se pueden encontrar en:

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

En OSX - /Library/Python/2.7/site-packages

usando este pequeño código:

from distutils.sysconfig import get_python_lib print get_python_lib()

Sin embargo, la lista de paquetes instalados a través de pip se puede encontrar en:

/ usr / local / bin /

O simplemente puede escribir el siguiente comando para enumerar todas las rutas donde están los paquetes de Python.

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

Nota: la ubicación puede variar según el sistema operativo, como en OSX

>>> import site; site.getsitepackages() [''/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages'', ''/System/Library/Frameworks/Python.framework/Versions/2.7/lib/site-python'', ''/Library/Python/2.7/site-packages'']


Responder a la vieja pregunta. Pero usa ipython para esto.

pip install ipython ipython import imaplib imaplib?

Esto dará la siguiente salida sobre el paquete imaplib -

Type: module String form: <module ''imaplib'' from ''/usr/lib/python2.7/imaplib.py''> File: /usr/lib/python2.7/imaplib.py Docstring: IMAP4 client. Based on RFC 2060. Public class: IMAP4 Public variable: Debug Public functions: Internaldate2tuple Int2AP ParseFlags Time2Internaldate


Tenía que hacer algo ligeramente diferente para un proyecto en el que estaba trabajando: busque el directorio relativo de paquetes de sitios en relación con el prefijo de instalación básico. Si la carpeta site-packages estaba en /usr/lib/python2.7/site-packages , quería la parte /lib/python2.7/site-packages . De hecho, encontré sistemas donde site-packages estaban en /usr/lib64 , y la respuesta aceptada NO funcionó en esos sistemas.

Al igual que la respuesta de Cheater, mi solución se asoma profundamente a las entrañas de Distutils, para encontrar el camino que realmente se transmite dentro de setup.py . Fue tan doloroso descubrir que no quiero que nadie tenga que resolver esto de nuevo.

import sys import os from distutils.command.install import INSTALL_SCHEMES if os.name == ''nt'': scheme_key = ''nt'' else: scheme_key = ''unix_prefix'' print(INSTALL_SCHEMES[scheme_key][''purelib''].replace(''$py_version_short'', (str.split(sys.version))[0][0:3]).replace(''$base'', ''''))

Eso debería imprimir algo como /Lib/site-packages o /lib/python3.6/site-packages .


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 línea final le muestra el directorio de instalación. Funciona en Ubuntu, mientras que los anteriores no lo hacen. No me preguntes acerca de Windows u otros dists, pero dado que es la misma dirección que usa easy_install de forma predeterminada, es probable que sea correcta en todas partes donde funciona easy_install (así que, en todas partes, incluso en macs). Que te diviertas. Nota: el código original tiene muchos enredos.


Una forma moderna de stdlib es usar el módulo sysconfig , disponible en la versión 2.7 y 3.2+. Python actualmente usa ocho rutas ( docs ):

  • stdlib : directorio que contiene los archivos estándar de la biblioteca de Python que no son específicos de la plataforma.
  • platstdlib : directorio que contiene los archivos estándar de la biblioteca de Python que son específicos de la plataforma.
  • platlib : directorio para archivos específicos del sitio, específicos de la plataforma.
  • purelib : directorio para archivos específicos del sitio, no específicos de la plataforma.
  • include : directorio para archivos de encabezado no específicos de la plataforma.
  • platinclude : directorio para archivos de encabezado específicos de la plataforma.
  • scripts : directorio para archivos de script.
  • datos : directorio para archivos de datos.

En la mayoría de los casos, los usuarios que encuentren esta pregunta estarían interesados ​​en la ruta ''purelib'' (en algunos casos , también podría estar interesado en ''platlib''). A diferencia de la respuesta actualmente aceptada, este método no debería comportarse mal dependiendo de si tienes o no un virtualenv activado.

A nivel del sistema (esto es Python 3.7.0 en mac OS):

>>> import sysconfig >>> sysconfig.get_paths()[''purelib''] ''/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages''

Con un venv, obtendrás algo como esto.

>>> import sysconfig >>> sysconfig.get_paths()[''purelib''] ''/private/tmp/.venv/lib/python3.7/site-packages''

También está disponible un script de shell para mostrar estos detalles, que puede invocar ejecutando sysconfig como un módulo:

python -m sysconfig

Nota: sysconfig ( source ) no debe confundirse con el submódulo distutils.sysconfig ( source ) mencionado en varias otras respuestas aquí. Este es un módulo completamente diferente y carece de la función get_paths discutida anteriormente.


Una nota adicional a la función get_python_lib ya mencionada: en algunas plataformas se usan diferentes directorios para los módulos específicos de la plataforma (por ejemplo, módulos que requieren compilación). Si pasa plat_specific=True a la función, obtendrá los paquetes del sitio para paquetes específicos de la plataforma.


Una nota al margen: la solución propuesta ( distutils.sysconfig.get_python_lib() ) no funciona cuando hay más de un directorio de paquetes de sitio (como lo recomienda este artículo ). Solo devolverá el directorio principal de paquetes de sitio.

Por desgracia, tampoco tengo mejor solución. Python no parece rastrear los directorios de paquetes de sitios, solo los paquetes que contienen.


Para Ubuntu ,

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

...no es correcto.

Le dirigirá a /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 de paquetes de sitio 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, es probable que esté seguro de copiar y pegar el primer cuadro de código en el terminal.


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

(o solo el primer elemento con site.getsitepackages()[0] )


from distutils.sysconfig import get_python_lib print get_python_lib()