¿Cómo encuentro la ubicación de mi directorio de paquetes de sitio?
python
installation
Daryl Spitzer
fuente
fuente

pip show <package name>Respuestas:
Hay dos tipos de directorios de paquetes de sitio, globales y por usuario .
Los directorios globales de paquetes de sitio (" dist-packages ") se enumeran
sys.pathcuando ejecuta:Para obtener una lista más concisa, ejecute
getsitepackagesdesde el módulo del sitio en código Python:Nota: Con virtualenvs getsitepackages no está disponible , sin embargo ,
sys.pathdesde arriba se enumerará correctamente el directorio de paquetes de sitio de virtualenv. En Python 3, puede usar el módulo sysconfig en su lugar:El directorio de paquetes de sitio por usuario ( PEP 370 ) es donde Python instala sus paquetes locales:
Si esto apunta a un directorio no existente, verifique el estado de salida de Python y vea las
python -m site --helpexplicaciones.Sugerencia: en ejecución
pip list --useropip freeze --userle da una lista de todos los paquetes de sitio instalados por usuario .Consejos prácticos
<package>.__path__le permite identificar las ubicaciones de un paquete específico: ( detalles )<module>.__file__le permite identificar la ubicación de un módulo específico: ( diferencia )Ejecute
pip show <package>para mostrar información del paquete al estilo de Debian:fuente
python -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())"(también funciona en Python 2 y 3).python -c "import site; print(site.getsitepackages()[0])"(o solo el primer elemento con
site.getsitepackages()[0])fuente
hasattr(sys,'real_prefix')y luego determino heurísticamente los paquetes del sitio[p for p in sys.path if p.endswith('site-packages')][-1](además de verificar si hay uno encontrado antes de hacer el[-1].Una solución que:
... es esta línea:
Formateado para facilitar la lectura (en lugar de utilizarlo como una sola línea), tiene el siguiente aspecto:
Fuente: una versión muy antigua de "Cómo instalar Django" (aunque esto es útil para algo más que la instalación de Django)
fuente
cdsitepackages, para cambiar directamente al directorio de paquetes de sitio del entorno./usr/lib/python3/dist-packageslugar de/usr/lib/python3.5/dist-packages.Para Ubuntu ,
...no es correcto.
Te señalará a
/usr/lib/pythonX.X/dist-packagesEsta carpeta solo contiene paquetes que su sistema operativo ha instalado automáticamente para que se ejecuten los programas.
En ubuntu , la carpeta de paquetes del sitio que contiene los paquetes instalados a través de setup_tools \ easy_install \ pip estará en
/usr/local/lib/pythonX.X/dist-packagesLa 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.
fuente
module.__file__es la mejor manera. Si intentan instalar cosas ... solo use las herramientas.'/usr/lib/pythonX.X/dist-packages' in site.getsitepackages()en Ubuntu (aunque va después/usr/local/...en la lista). Solo obtiene algo en/usr/localviasudo pipy no debe usarlosudo pipen Ubuntu a menos que haya decidido hacer su propia distribución: si lo usasudo pip, es su responsabilidad asegurarse de que todas las dependencias de los módulos actuales y futuros de python instalados a través desudo aptosudo pipsean compatibles. Considere qué problemavirtualenvse creó para resolverdist-packagesen (L) Ubuntu.Esto es lo que funcionó para mí:
fuente
~/.local/lib/python2.7/site-packages).virtualenvse queja de que el paquete no existe. ¿Cómo invoco los paquetes instalados en una ubicación personalizada?Digamos que ha instalado el paquete 'django'. impórtelo y escriba dir (django). Le mostrará todas las funciones y atributos con ese módulo. Escriba el intérprete de python:
Puede hacer lo mismo si ha instalado mercurial.
Esto es para Snow Leopard. Pero creo que también debería funcionar en general.
fuente
django.__file__para esto en lugar de__path__. y, no, no es una garantía de que esto tenga algo que ver con los paquetes del sitio, pero con cosas como django, que probablemente hayas instalado pip , lo hará cuando tengas prisa y puede usarse para otros propósitos también (leer un archivo de configuración predeterminado del sistema de archivos, por ejemplo).foo.barpaquete:python -c "import foo.bar as _; print(_.__path__[0])"Como otros han señalado,
distutils.sysconfigtiene la configuración relevante:... aunque el valor predeterminado
site.pyhace algo un poco más crudo, parafraseado a continuación:(también agrega
${sys.prefix}/lib/site-pythony agrega ambas rutassys.exec_prefixtambién, en caso de que esa constante sea diferente).Dicho esto, ¿cuál es el contexto? No deberías estar jugando con tu
site-packagesdirectamente; setuptools / distutils funcionará para la instalación, y su programa puede estar ejecutándose en un virtualenv donde su pythonpath es completamente local para el usuario, por lo que tampoco debe asumir el uso de los paquetes del sitio del sistema directamente.fuente
python2osx y ubuntu con y sin virtualenv pero no conpython3nada.python3.Una forma moderna de stdlib está utilizando el
sysconfigmódulo, disponible en la versión 2.7 y 3.2+.Nota :
sysconfig( fuente ) no debe confundirse con eldistutils.sysconfigsubmódulo ( fuente ) mencionado en varias otras respuestas aquí. Este último es un módulo completamente diferente y carece de laget_pathsfunción que se describe a continuación.Python actualmente usa ocho rutas ( docs ):
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 actual aceptada, este método aún funciona independientemente de si tiene o no un virtualenv activado.
A nivel del sistema (esto es Python 3.7.0 en mac OS):
Con un venv, obtendrás algo como esto
También está disponible un script de shell para mostrar estos detalles, que puede invocar ejecutando
sysconfigcomo un módulo:fuente
platlib, como por ejemplo/usr/local/lib/python3.6/site-packages? Tradicionalmente, las cosas instaladas localmente deberían entrar/usr/local.Los paquetes del sistema nativo instalados con la instalación de Python en sistemas basados en Debian se pueden encontrar en:
En OSX:
/Library/Python/2.7/site-packagesusando este pequeño código:
Sin embargo, la lista de paquetes instalados a través de
pipse puede encontrar en:O simplemente puede escribir el siguiente comando para enumerar todas las rutas donde están los paquetes de Python.
Nota: la ubicación puede variar según su sistema operativo, como en OSX
fuente
site.getsitepackages()desde la instalación del sistema, por lo tanto, los paquetes dist, otras instalaciones mostrarán paquetes de sitio.Todas las respuestas (o: la misma respuesta repetida una y otra vez) son inadecuadas. Lo que quieres hacer es esto:
La última línea muestra el directorio de instalación. Funciona en Ubuntu, mientras que los anteriores no. No me pregunte acerca de Windows u otros discos, pero dado que es exactamente el mismo directorio que usa easy_install por defecto, probablemente sea correcto en todas partes donde funciona easy_install (por lo tanto, en todas partes, incluso en Mac). Que te diviertas. Nota: el código original tiene muchas palabrotas.
fuente
easy_instally no falla correctamente si no está disponible, lo cual es inadecuado :)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 se recomienda en este artículo ). Solo devolverá el directorio principal de paquetes de sitio.Por desgracia, tampoco tengo una solución mejor. Python no parece hacer un seguimiento de los directorios de paquetes de sitio, solo los paquetes dentro de ellos.
fuente
get_python_lib()cuando se ejecuta desde virtualenv muestra los paquetes de sitio de Python utilizados para crear virtualenv y no los paquetes de sitio de virtualenv .Esto funciona para mi. Obtendrá las carpetas dist-packages y site-packages. Si la carpeta no está en la ruta de Python, de todos modos no te hará mucho bien.
Salida (instalación de Ubuntu):
fuente
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 'site-packages'
Para cambiar el directorio al directorio de paquetes del sitio, uso el siguiente alias (en los sistemas * nix):
fuente
Una nota adicional a la
get_python_libfunción mencionada anteriormente: en algunas plataformas se utilizan diferentes directorios para módulos específicos de la plataforma (por ejemplo: módulos que requieren compilación). Si pasaplat_specific=Truea la función, obtiene los paquetes del sitio para paquetes específicos de la plataforma.fuente
fuente
pip show dará todos los detalles sobre un paquete: https://pip.pypa.io/en/stable/reference/pip_show/ [pip show] [1]
Para obtener la ubicación:
fuente
Responde a la vieja pregunta. Pero use ipython para esto.
Esto dará el siguiente resultado sobre el paquete imaplib:
fuente
Debe probar este comando para determinar la ubicación de instalación de pip
Python 2
Python 3
fuente
Tenía que hacer algo un poco diferente para un proyecto que estaba trabajando: encontrar la relación site-packages directorio relativo a la base instalada de prefijo. Si la carpeta de paquetes del sitio estaba en
/usr/lib/python2.7/site-packages, quería la/lib/python2.7/site-packagesparte. De hecho, he encontrado sistemas dondesite-packagesestaba/usr/lib64, y la respuesta aceptada NO funcionó en esos sistemas.Similar a la respuesta del tramposo, mi solución se asoma profundamente en las entrañas de Distutils, para encontrar el camino que realmente se transmite por dentro
setup.py. Fue tan doloroso descubrir que no quiero que nadie tenga que resolver esto nuevamente.Eso debería imprimir algo como
/Lib/site-packageso/lib/python3.6/site-packages.fuente
Si ya está agregado al
PYTHONPATH, también puede hacer algo comofuente