¿Hay alguna manera de encontrar todos los paquetes Python PyPI que se instalaron con easy_install o pip? Quiero decir, excluir todo lo que se instaló / se instaló con las herramientas de distribución (en este caso, apt-get en Debian).
python
pip
easy-install
pypi
Jürgen A. Erhard
fuente
fuente
Respuestas:
pip freeze
generará una lista de paquetes instalados y sus versiones. También le permite escribir esos paquetes en un archivo que luego puede usarse para configurar un nuevo entorno.https://pip.pypa.io/en/stable/reference/pip_freeze/#pip-freeze
fuente
pip freeze
ypip list
enumera todo. No excluyen los paquetes que no fueron instalados porpip
.pip freeze
que es confiable en los scripts, mientraspip list
que generará errores inesperados cuando se usa con tuberías.pip list -l
Opip list --local
es la mejor respuesta, consulte stackoverflow.com/a/43012269/491884 por @MJBA partir de la versión 1.3 de pip ahora puede usar
pip list
Tiene algunas opciones útiles, incluida la capacidad de mostrar paquetes obsoletos. Aquí está la documentación: https://pip.pypa.io/en/latest/reference/pip_list/
fuente
pip freeze
pip list --user
solo muestra los paquetes instalados por el usuario y excluye los paquetes de todo el sistema.Si alguien se pregunta, puede usar el comando 'pip show'.
Esto enumerará el directorio de instalación del paquete dado.
fuente
Si Debian se comporta como versiones recientes de Ubuntu con respecto al
pip install
objetivo predeterminado, es muy fácil: se instala en/usr/local/lib/
lugar de/usr/lib
(apt
objetivo predeterminado). Verifique /ubuntu/173323/how-do-i-detect-and-remove-python-packages-installed-via-pip/259747#259747Soy un usuario de ArchLinux y cuando experimenté con pip me encontré con este mismo problema. Así es como lo resolví en Arch.
La clave aquí es
/usr/lib/python2.7/site-packages
, que es el directorio donde se instala pip, YMMV.pacman -Qo
así es como el pac kage man ager de Arch verifica la propiedad del archivo.No package
es parte de la declaración se da cuando no hay paquete pertenece el archivo:error: No package owns $FILENAME
. Solución alternativa: estoy haciendo consultas__init__.py
porquepacman -Qo
es un poco ignorante cuando se trata de directorios :(Para hacerlo para otras distribuciones, debe averiguar dónde se
pip
instalan las cosas (solosudo pip install
algo), cómo consultar la propiedad de un archivo (el método Debian / Ubuntu esdpkg -S
) y cuál es el retorno "ningún paquete posee esa ruta" (Debian / Ubuntu esno path found matching pattern
). Usuarios de Debian / Ubuntu, cuidado:dpkg -S
fallará si le das un enlace simbólico. Solo resuélvelo primero usandorealpath
. Me gusta esto:Los usuarios de Fedora pueden probar (gracias @eddygeek):
fuente
dpkg
escribe el error en stderr, así que tengo que agregar una redirección2>&1
. Y para la producción internacional agregueLANG=
delante dexargs dpkg -s
. ysed
también es una buena herramienta;) para mantener solo el nombre del paquete de la ruta. Así que termino con:find /usr/local/lib/python2.7/dist-packages -maxdepth 2 -name __init__.py | xargs realpath | LANG= xargs dpkg -S 2>&1 | grep 'no path found' | sed "s/.*\/\([^\/]*\)\/__init__\.py.*/\1/"
Empezar con:
Para enumerar todos los paquetes. Una vez que encuentre el paquete que desea, use:
Esto le mostrará detalles sobre este paquete, incluida su carpeta. Puede omitir la primera parte si ya conoce el nombre del paquete
Haga clic aquí para obtener más información sobre pip show y aquí para obtener más información sobre la lista de pip.
Ejemplo:
fuente
pip.get_installed_distributions()
le dará una lista de paquetes instaladosfuente
El siguiente es un poco lento, pero da una lista bien formateada de paquetes que
pip
conoce. Es decir, no todos fueron instalados "por" pip, pero todos deberían poder actualizarse por pip.La razón por la que es lenta es que enumera el contenido de todo el repositorio de pipi. Presenté un ticket sugiriendo
pip list
proporcionar una funcionalidad similar pero más eficiente.Salida de muestra: (restringió la búsqueda a un subconjunto en lugar de '.' Para todos).
fuente
Agregando a la respuesta de @Paul Woolcock,
creará un archivo de requisitos con todos los paquetes instalados junto con los números de versión instalados en el entorno activo en la ubicación actual. Corriendo
instalará los paquetes especificados en el archivo de requisitos.
fuente
Las versiones más recientes de pip tienen la capacidad de hacer lo que el OP quiere a través de
pip list -l
opip freeze -l
(--list
).En Debian (al menos) la página del manual no deja esto claro, y solo lo descubrí, bajo el supuesto de que la característica debe existir, con
pip list --help
.Hay comentarios recientes que sugieren que esta característica no es obvia ni en la documentación ni en las respuestas existentes (aunque algunos lo insinúan), así que pensé que debería publicar. Hubiera preferido hacerlo como un comentario, pero no tengo los puntos de reputación.
fuente
pip freeze --local
8 años.pip list --local
también está disponible ... pero tenga en cuenta que la pregunta OP no se trata de entornos virtuales (que son--local
compatibles) sino de discernir paquetes de distribución desudo pip install
paquetes.Tenga en cuenta que si tiene varias versiones de Python instaladas en su computadora, puede tener algunas versiones de pip asociadas con cada una.
Dependiendo de sus asociaciones, es posible que tenga que ser muy cuidadoso con el comando pip que utiliza:
Funcionó para mí, donde estoy ejecutando Python3.4. Simplemente usando
pip list
devolvió el errorThe program 'pip' is currently not installed. You can install it by typing: sudo apt-get install python-pip
.fuente
Como señaló @almenon, esto ya no funciona y no es la forma compatible de obtener información del paquete en su código. Lo siguiente plantea una excepción:
Para lograr esto, puede importar
pkg_resources
. Aquí hay un ejemplo:Estoy en
v3.6.5
fuente
Aquí está el one-liner para fedora u otras distribuciones de rpm (basado en los consejos de @barraponto):
Agregue esto al comando anterior para obtener una salida más limpia:
fuente
Obtenga todos los nombres de archivo / carpeta
site-packages/
(ydist-packages/
si existe), y use su administrador de paquetes para quitar los que se instalaron a través del paquete.fuente
pip freeze enumera todos los paquetes instalados, incluso si no es por pip / easy_install. En CentOs / Redhat se encuentra un paquete instalado a través de rpm.
fuente
Si usa la distribución Python de Anaconda , puede usar el
conda list
comando para ver qué se instaló con qué método:Para tomar las entradas instaladas por
pip
(incluido posiblemente élpip
mismo):Por supuesto, probablemente solo desee seleccionar la primera columna, que puede hacer con (excluyendo
pip
si es necesario):Finalmente, puede tomar estos valores y desinstalarlos todos usando lo siguiente:
Tenga en cuenta el uso de la
-y
bandera parapip uninstall
evitar tener que dar confirmación para eliminar.fuente
Para aquellos que no tienen pip instalado, encontré este script rápido en github (funciona con Python 2.7.13):
fuente
pip list [opciones] Puede ver la referencia completa aquí
fuente
Al menos para Ubuntu (tal vez también otros) funciona esto (inspirado en una publicación anterior en este hilo):
fuente