Pregunta Actualizando todos los paquetes con pip


¿Es posible actualizar todos los paquetes de Python a la vez con pip?

Tenga en cuenta que hay una solicitud de función para esto en el rastreador oficial de problemas.


1418
2018-04-27 09:23


origen


Respuestas:


Aún no hay una bandera incorporada, pero puedes usar

pip freeze --local | grep -v '^\-e' | cut -d = -f 1  | xargs -n1 pip install -U

Nota: hay infinitas variaciones de potencial para esto. Estoy tratando de mantener esta respuesta breve y simple, pero sugiero variaciones en los comentarios.

Ediciones relevantes:

  • Agregó un grep omitir las definiciones del paquete "-e", como lo sugiere @jawache (Sí, podría reemplazar grep+cut con sed o awk o perl o...).
  • Versiones más nuevas de pip le permite listar paquetes obsoletos:

    pip list --outdated --format=freeze
    
  • Adicional -n1 a xargs, evita detener todo si la actualización de un paquete falla (gracias @arsens)


1660
2017-08-10 19:56



Puedes usar el siguiente código de Python. diferente a pip freeze, esto no imprimirá advertencias y errores FIXME.

import pip
from subprocess import call

packages = [dist.project_name for dist in pip.get_installed_distributions()]
call("pip install --upgrade " + ' '.join(packages), shell=True)

514
2018-04-30 03:31



Para actualizar todos los paquetes locales; podrías usar pip-review:

$ pip install pip-review
$ pip-review --local --interactive

pip-review es un tenedor de pip-tools. Ver pip-tools problema mencionado por @knedlsepp. pip-review el paquete funciona pero pip-tools el paquete ya no funciona.

pip-review funciona en Windows desde la versión 0.5.


501
2018-04-29 00:34



Funciona en Windows. Debería ser bueno para los demás también. ($ es el directorio en el que se encuentra, en el símbolo del sistema, por ejemplo, C: / Users / Username>)

hacer

$ pip freeze > requirements.txt

abra el archivo de texto, reemplace el == con> =

entonces hazlo

$ pip install -r requirements.txt --upgrade

Si tiene un problema con un determinado paquete que detiene la actualización (numpy a veces), simplemente vaya al directorio ($), comente el nombre (agregue un # antes) y ejecute la actualización nuevamente. Luego puede descomentar esa sección. Esto también es ideal para copiar entornos globales de python.

También me gusta el método de revisión de pip:

py2
$ pip install pip-review

$ pip-review --local --interactive

py3
$ pip3 install pip-review

$ py -3 -m pip_review --local --interactive

Puede seleccionar 'a' para actualizar todos los paquetes; si falla una actualización, ejecútela nuevamente y continúa en la siguiente.


182
2017-11-12 09:20



Versión de Windows después de consultar excelente documentación para FOR por Rob van der Woude

for /F "delims===" %i in ('pip freeze -l') do pip install -U %i

87
2018-02-25 18:04



Puede imprimir los paquetes que están desactualizados

pip freeze | cut -d = -f 1 | xargs -n 1 pip search | grep -B2 'LATEST:'

70
2018-06-10 12:50



El siguiente one-liner podría ser de ayuda:

pip list --format legacy --outdated | sed 's/(.*//g' | xargs -n1 pip install -U

xargs -n1 continúa si ocurre un error.

Si necesita un control más detallado sobre lo que se omite y lo que genera un error, no debe agregar el -n1 marcar y definir explícitamente los errores a ignorar, "canalizando" la siguiente línea para cada error por separado:

| sed 's/^<First characters of the error>.*//'

Aquí hay un ejemplo de trabajo:

pip list --format legacy --outdated | sed 's/(.*//g' | sed 's/^<First characters of the first error>.*//' | sed 's/^<First characters of the second error>.*//' | xargs pip install -U

57
2018-03-07 20:25



Esta opción me parece más directa y legible:

pip install -U `pip list --outdated | awk '{ print $1}'`

(awk '{ print $1}' selecciona la primera palabra de la línea (separada por un espacio))

Y esta versión permite la supresión del mensaje de advertencia de pip list --outdated:

pip install -U `pip list --outdated | awk '!/Could not|ignored/ { print $1}'`

(awk '!/<pattern>/' elimina la línea que contiene un patrón dado. En mi caso, los mensajes de advertencia incluyen "No se pudo" e "Ignorado", respectivamente)

Esto también podría usarse para abordar el próximo defecto columns formato:

pip install -U `pip list --format=columns --outdated | awk '!/Package|---/{ print $1}'`

42
2017-11-21 23:15



Esto parece más conciso.

pip list --outdated | cut -d ' ' -f1 | xargs -n1 pip install -U

Explicación:

pip list --outdated obtiene líneas como estas

urllib3 (1.7.1) - Latest: 1.15.1 [wheel]
wheel (0.24.0) - Latest: 0.29.0 [wheel]

En cut -d ' ' -f1, -d ' ' establece "espacio" como el delimitador, -f1significa obtener la primera columna.

Entonces las líneas anteriores se convierten en:

urllib3
wheel

luego páselos a xargs para ejecutar el comando, pip install -U, con cada línea como argumentos anexos

-n1 limita el número de argumentos pasados ​​a cada comando pip install -U ser 1


32
2018-06-10 03:47



De https://github.com/cakebread/yolk :

$ pip install -U `yolk -U | awk '{print $1}' | uniq`

sin embargo, primero debes obtener la yema:

$ sudo pip install -U yolk

26
2018-04-03 21:38