¿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.path
cuando ejecuta:Para obtener una lista más concisa, ejecute
getsitepackages
desde el módulo del sitio en código Python:Nota: Con virtualenvs getsitepackages no está disponible , sin embargo ,
sys.path
desde 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 --help
explicaciones.Sugerencia: en ejecución
pip list --user
opip freeze --user
le 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-packages
lugar de/usr/lib/python3.5/dist-packages
.Para Ubuntu ,
...no es correcto.
Te señalará a
/usr/lib/pythonX.X/dist-packages
Esta 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-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.
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/local
viasudo pip
y no debe usarlosudo pip
en 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 apt
osudo pip
sean compatibles. Considere qué problemavirtualenv
se creó para resolverdist-packages
en (L) Ubuntu.Esto es lo que funcionó para mí:
fuente
~/.local/lib/python2.7/site-packages
).virtualenv
se 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.bar
paquete:python -c "import foo.bar as _; print(_.__path__[0])"
Como otros han señalado,
distutils.sysconfig
tiene la configuración relevante:... aunque el valor predeterminado
site.py
hace algo un poco más crudo, parafraseado a continuación:(también agrega
${sys.prefix}/lib/site-python
y agrega ambas rutassys.exec_prefix
también, en caso de que esa constante sea diferente).Dicho esto, ¿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 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
python2
osx y ubuntu con y sin virtualenv pero no conpython3
nada.python3
.Una forma moderna de stdlib está utilizando el
sysconfig
módulo, disponible en la versión 2.7 y 3.2+.Nota :
sysconfig
( fuente ) no debe confundirse con eldistutils.sysconfig
submódulo ( fuente ) mencionado en varias otras respuestas aquí. Este último es un módulo completamente diferente y carece de laget_paths
funció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
sysconfig
como 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-packages
usando este pequeño código:
Sin embargo, la lista de paquetes instalados a través de
pip
se 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_install
y 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_lib
funció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=True
a 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-packages
parte. De hecho, he encontrado sistemas dondesite-packages
estaba/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-packages
o/lib/python3.6/site-packages
.fuente
Si ya está agregado al
PYTHONPATH
, también puede hacer algo comofuente