¿Cómo actualizar todos los paquetes de Python con pip?

2052

¿Es posible actualizar todos los paquetes de Python al mismo tiempo pip?

Nota : hay una solicitud de función para esto en el rastreador oficial de problemas.

thedjpetersen
fuente
37
Tenga cuidado con la podredumbre del software : las dependencias de actualización pueden dañar su aplicación. Puede enumerar la versión exacta de todos los paquetes instalados con pip freeze(como bundle installo npm shrinkwrap). Lo mejor es guardar una copia de eso antes de jugar.
Coronel Panic
Tenga cuidado al hacer esto, arruina su pipinstalación, cuando actualiza requests. El mensaje de error es cannot import name IncompleteRead.
Paul Rooney
11
Intenté muchas de las respuestas y una nueva (y por lo tanto una respuesta de baja puntuación) produce una salida mucho mejor: stackoverflow.com/questions/2720014/…
FauChristian
Solicitud y discusión de funciones actualizadas
cledoux
Esta pregunta es tan antigua y tan útil, solo quiero alertar a cualquiera que venga aquí de ahora en adelante que ahora hay una nueva mejor forma oficial de hacer todo esto: pipenv. Los documentos están aquí: docs.pipenv.org/basics y la charla del autor sobre Pycon 2018 al respecto está aquí: youtube.com/watch?v=GBQAKldqgZs . ¡Feliz codificación!
Malik A. Rumi

Respuestas:

2261

Todavía no hay una bandera incorporada, pero puede usar

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

Nota: hay infinitas variaciones potenciales para esto. Estoy tratando de mantener esta respuesta breve y simple, ¡pero sugiera variaciones en los comentarios!

En la versión anterior de pip, puede usar esto en su lugar:

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

El grepes omitir las definiciones de paquete editables ("-e"), como lo sugiere @jawache. (Sí, puede reemplazar grep+ cutcon sedo awko perlo ...).

La -n1marca para xargsevita detener todo si falla la actualización de un paquete (gracias @andsens ).

rbp
fuente
59
Correcto :( El problema ahora se encuentra en github.com/pypa/pip/issues/59 . Pero cada sugerencia parece ser respondida con "Sí, pero estoy muy seguro de si X es la forma correcta de hacer Y" ... ¿Ahora es mejor que nunca? ¿La practicidad es mejor que la pureza? :(
rbp
20
También imprime los paquetes que se instalaron con un administrador de paquetes normal (como apt-get o Synaptic). Si ejecuto esto pip install -U, actualizará todos los paquetes. Me temo que puede causar algún conflicto con apt-get.
Jabba
8
¿Qué hay de cambiar grep a: egrep -v '^ (\ - e | #)' (obtengo esta línea cuando la ejecuto en ubuntu 12.10: "## FIXME: no se pudo encontrar la URL svn en los enlaces de dependencia para este paquete:".
LasseValentini
32
teeAgregaría un antes de hacer la actualización real para que pueda obtener una lista de las versiones originales. Por ejemplo, pip freeze --local | tee before_upgrade.txt | ...así sería más fácil revertir si hay algún problema.
Emil H
10
Agregué -Hpara sudoevitar un mensaje de error molesto: $ pip freeze --local | grep -v '^\-e' | cut -d = -f 1 | xargs -n1 sudo -H pip install -U
Mario S
683

Puede usar el siguiente código de Python. A diferencia pip freeze, esto no imprimirá advertencias y errores FIXME. Para pip <10.0.1

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)

Para pip> = 10.0.1

import pkg_resources
from subprocess import call

packages = [dist.project_name for dist in pkg_resources.working_set]
call("pip install --upgrade " + ' '.join(packages), shell=True)
Manishankar Singh
fuente
21
Esto funciona increíblemente bien ... Siempre es tan satisfactorio cuando una tarea lleva REALMENTE mucho tiempo ... ¡y te da un montón de cosas nuevas! PD: ¡Ejecútalo como root si estás en OS X!
Alex Gray
52
¿No hay forma de instalar usando pip sin llamar a un subproceso? Algo como import pip pip.install('packagename')?
Endolith
66
Envolví esto en un fabfile.py . ¡Gracias!
Josh K
55
@BenMezger: Realmente no deberías usar paquetes de sistema en tu virtualenv. Tampoco debería ejecutar más que un puñado de programas confiables y conocidos como root. Ejecute sus virtualenvs con --no-site-packages (predeterminado en versiones recientes).
jeffcook2150
3
Pulgares arriba para este, la respuesta elegida (arriba) falla si un paquete ya no se puede encontrar. Este script simplemente continúa con los siguientes paquetes, maravilloso.
Josh
644

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

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

pip-reviewes un tenedor de pip-tools. Vea el pip-toolsproblema mencionado por @knedlsepp . pip-reviewel paquete funciona pero el pip-toolspaquete ya no funciona.

pip-reviewfunciona en Windows desde la versión 0.5 .

jfs
fuente
2
@hauzer: no es compatible con Python 3. Aunque podría ser un error
jfs
77
@mkoistinen Es una buena herramienta, pero hasta que se fusione en PIP significa instalar algo adicional que no todos desearían hacer.
Wernight
2
@Daniel: pip-tools ya no funciona, pip-review (fork of pip-tools) funciona.
jfs
77
pip-review funciona bien (al menos para Python versión 3.5.0)
FredrikHedman
16
Para actualizar todo sin el modo interactivo:pip-review --local --auto
Dlamini
333

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

hacer

$ pip freeze > requirements.txt

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

$ pip install -r requirements.txt --upgrade

Si tiene un problema con un determinado paquete que detiene la actualización (a veces numpy), simplemente vaya al directorio ($), comente el nombre (agregue un # antes) y vuelva a ejecutar la actualización. Más tarde puede descomentar esa sección. Esto también es excelente para copiar entornos globales de Python.


De otra manera:

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 una actualización falla, ejecútela nuevamente y continúa en la siguiente.

azazelspeaks
fuente
29
Debes eliminar requirements.txt's =={version}. Por ejemplo: python-dateutil==2.4.2a python-dateutilpara todas las líneas.
youngminz
44
Descubrí que esto en realidad no actualizó los paquetes en macOS.
jkooker
10
@youngminz Recomendaría un rápido 'Reemplazar todo "=="> "> ="' en su editor / ide antes de ejecutar 'pip install ...' para solucionar esto
Amaury Liet
77
para Linux: $ pip freeze | cut -d '=' -f1> requirements.txtpara eliminar la versión
Cavaz
1
Si el shell que usa es bash, puede acortarlo en un comando a través de pip3 install -r <(pip3 freeze) --upgrade Efectivamente, <(pip3 freeze)es una tubería anónima, pero actuará como un objeto de archivo
Sergiy Kolodyazhnyy
128

Versión de Windows después de consultar una excelente documentación de FORRob van der Woude

for /F "delims===" %i in ('pip freeze -l') do pip install -U %i
Piotr Dobrogost
fuente
19
for /F "delims= " %i in ('pip list --outdated') do pip install -U %i Más rápido ya que solo intentará actualizar paquetes "obsoletos"
Refael Ackermann
3
@RefaelAckermann Sospecho que esto será más lento que el original :) Para saber qué paquetes están desactualizados, pip primero debe verificar cuál es la última versión de cada paquete. Hace exactamente lo mismo que el primer paso cuando se actualiza y no continúa si no hay una versión más nueva disponible. Sin embargo, en su versión, pip verificará las versiones dos veces, la primera vez para establecer la lista de paquetes obsoletos y la segunda vez al actualizar los paquetes en esta lista.
Piotr Dobrogost
2
@RefaelAckermann Spinning up pip es un orden de magnitud más rápido que verificar la versión de un paquete a través de la red, por lo que esa es la cantidad de comprobaciones que deben optimizarse, no la cantidad de revoluciones. El mío hace n cheques, el tuyo hace n + m cheques.
Piotr Dobrogost
2
+1 - Es 6.20.2019, estoy usando Python 3.7.3 en Windows 10, y esta fue la mejor manera para actualizar todos mis paquetes locales.
MacItaly
1
Necesidad de saltar las dos primeras líneas de la salida: for /F "skip=2 delims= " %i in ('pip list --outdated') do pip install --upgrade %i. Si esto se ejecuta desde un archivo por lotes, asegúrese de usarlo en %%ilugar de %i. También tenga en cuenta que es más limpio actualizar pipantes de ejecutar este comando usando python -m pip install --upgrade pip.
Andy
128

Utilizar pipupgrade !

$ pip install pipupgrade
$ pipupgrade --verbose --latest --yes

pipupgrade ayuda a actualizar su sistema, local o paquetes desde un requirements.txtarchivo! También actualiza selectivamente paquetes que no rompen el cambio. pipupgrade también asegura la actualización de los paquetes presentes en múltiples entornos Python. Compatible con Python2.7 +, Python3.4 + y pip9 +, pip10 +, pip18 +, pip19 +.

ingrese la descripción de la imagen aquí

NOTA: Soy el autor de la herramienta.

Achilles Gasper Rasquinha
fuente
1
Este método tiene una salida mucho más limpia que la respuesta de @ rbp
Gaia
77
Buena idea, pero se quedó para Checking...siempre cuando lo intenté.
CGFoX
1
Acabo de instalarlo y también me quedé bloqueado en la comprobación[0;93mChecking...[0m
Chris
1
¿@nathandrake se preocupa por abrir un problema en la página de problemas?
Achilles Gasper Rasquinha
2
Tengo un error en Windows 10 y Python 3.7.5:ModuleNotFoundError: No module named 'ctypes.windll'
Qin Heyang
74

Simplemente puede imprimir los paquetes que están desactualizados

pip freeze | cut -d = -f 1 | xargs -n 1 pip search | grep -B2 'LATEST:'
janrito
fuente
14
Dentro de un virtualenv, lo hago así:pip freeze --local | cut -d = -f 1 | xargs -n 1 pip search | grep -B2 'LATEST:'
Jeremy Blanchard
Hoy en día también puede hacerlo con python -m pip list outdated(aunque no está en formato de requisitos).
Jacktose
74

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

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

La explicación es que pip list --outdatedgenera una lista de todos los paquetes obsoletos en este formato:

Package   Version Latest Type 
--------- ------- ------ -----
fonttools 3.31.0  3.32.0 wheel
urllib3   1.24    1.24.1 wheel
requests  2.20.0  2.20.1 wheel

En el comando awk, NR>2omite los dos primeros registros (líneas) y {print $1}selecciona la primera palabra de cada línea (como sugirió SergioAraujo, eliminé tail -n +3ya awkque de hecho puedo manejar omitir registros).

Bagazo
fuente
Si una actualización falla, ninguna de las actualizaciones ocurre.
Boris
2
puedes evitar que la cola awk 'NR>2 {print $1}'limpie la salida por ti
SergioAraujo
@SergioAraujo, esto hace que la solución también se vea más limpia, ¡gracias por la sugerencia!
Marc
67

La siguiente frase podría ser de ayuda:

(pip> 20.0)

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

Versiones anteriores:

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

xargs -n1 continúa si ocurre un error.

Si necesita un control más "preciso" sobre lo que se omite y lo que genera un error, no debe agregar el -n1indicador 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 freeze --outdated | sed 's/=.*//g' | sed 's/^<First characters of the first error>.*//' | sed 's/^<First characters of the second error>.*//' | xargs pip install -U
raratiru
fuente
Tuve que agregar filtros para las líneas que comienzan con 'Podría' y 'Algunos' porque aparentemente pip envía advertencias a stdout :(
Chip Camden
OK, esto es justo: puede agregar tantos | sed 's/^<First characters of the error>.*//'como sea necesario. ¡Gracias!
raratiru
14
O:pip list --outdated | cut -d ' ' -f 1 | xargs -n 1 pip install --upgrade
Jens
51

Solución más robusta

Para pip3 use esto:

pip3 freeze --local |sed -rn 's/^([^=# \t\\][^ \t=]*)=.*/echo; echo Processing \1 ...; pip3 install -U \1/p' |sh

Para pip, simplemente elimine los 3 como tales:

pip freeze --local |sed -rn 's/^([^=# \t\\][^ \t=]*)=.*/echo; echo Processing \1 ...; pip install -U \1/p' |sh

Rareza OSX

OSX, a partir de julio de 2017, se entrega con una versión muy antigua de sed (una docena de años). Para obtener expresiones regulares extendidas, use -E en lugar de -r en la solución anterior.

Resolver problemas con soluciones populares

Esta solución está bien diseñada y probada 1 , mientras que hay problemas incluso con las soluciones más populares.

  • Problemas de portabilidad debido a las características cambiantes de la línea de comando pip
  • Fallo de xargs debido a fallas comunes en los procesos secundarios pip o pip3
  • Registro abarrotado de la salida de xargs sin procesar
  • Confiar en un puente de Python a OS mientras se actualiza potencialmente 3

El comando anterior utiliza la sintaxis de pip más simple y portátil en combinación con sed y sh para superar estos problemas por completo. Los detalles de la operación sed se pueden analizar con la versión comentada 2 .


Detalles

[1] Probado y utilizado regularmente en un clúster de Linux 4.8.16-200.fc24.x86_64 y probado en otros cinco sabores de Linux / Unix. También se ejecuta en Cygwin64 instalado en Windows 10. Se necesitan pruebas en iOS.

[2] Para ver la anatomía del comando más claramente, este es el equivalente exacto del comando pip3 anterior con comentarios:

# match lines from pip's local package list output
# that meet the following three criteria and pass the
# package name to the replacement string in group 1.
# (a) Do not start with invalid characters
# (b) Follow the rule of no white space in the package names
# (c) Immediately follow the package name with an equal sign
sed="s/^([^=# \t\\][^ \t=]*)=.*"

# separate the output of package upgrades with a blank line
sed="$sed/echo"

# indicate what package is being processed
sed="$sed; echo Processing \1 ..."

# perform the upgrade using just the valid package name
sed="$sed; pip3 install -U \1"

# output the commands
sed="$sed/p"

# stream edit the list as above
# and pass the commands to a shell
pip3 freeze --local |sed -rn "$sed" |sh

[3] La actualización de un componente Python o PIP que también se usa en la actualización de un componente Python o PIP puede ser una causa potencial de un punto muerto o corrupción de la base de datos del paquete.

Douglas Daseeco
fuente
1
Otra forma de superar el BSD jurásico sedde OS X es usar gsed(GNU sed) en su lugar. Para conseguirlo,brew install gnu-sed
Walter Tross
@WalterTross ... Jurásico ... buen uso de adjetivos. Así que ahora tenemos dos formas de agrupar paquetes pip de actualización con una buena pista de auditoría en la terminal. (1) Use la opción -E como en la respuesta y (2) instale gsed para salir del período Jurásico.
Douglas Daseeco
41

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 delimitador, -f1significa obtener la primera columna.

Entonces las líneas anteriores se convierten en:

urllib3
wheel

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

-n1limita el número de argumentos pasados ​​a cada comando pip install -Upara ser 1

Shihao Xu
fuente
Recibí esta advertenciaDEPRECATION: The default format will switch to columns in the future. You can use --format=(legacy|columns) (or define a format=(legacy|columns) in your pip.conf under the [list] section) to disable this warning.
Reman el
2
@Reman: eso es porque estás usando Pip v9.0.1. Este es solo un mensaje de desaprobación que significa que algunas funcionalidades no sobrevivirán en una futura versión de Pip. Nada de qué preocuparse;)
AlessioX
Sin embargo, esto tiene que ser marcado como la solución final. De hecho, la respuesta aceptada se ejecutará en todos sus paquetes pip, lo que es una pérdida de tiempo si tiene que actualizar solo 1 o 2 paquetes. Esta solución, por el contrario, se ejecutará en todos los paquetes obsoletos
AlessioX
34

Tuve el mismo problema con la actualización. La cosa es que nunca actualizo todos los paquetes. Actualizo solo lo que necesito, porque el proyecto puede romperse.

Debido a que no había una manera fácil de actualizar paquete por paquete y actualizar el archivo require.txt, escribí este pip-Updater que también actualiza las versiones en su requirements.txtarchivo para los paquetes elegidos (o todos los paquetes).

Instalación

pip install pip-upgrader

Uso

Active su virtualenv (importante, porque también instalará las nuevas versiones de paquetes actualizados en virtualenv actual).

cd en su directorio de proyecto, luego ejecute:

pip-upgrade

Uso avanzado

Si los requisitos se colocan en una ubicación no estándar, envíelos como argumentos:

pip-upgrade path/to/requirements.txt

Si ya sabe qué paquete desea actualizar, simplemente envíelos como argumentos:

pip-upgrade -p django -p celery -p dateutil

Si necesita actualizar a la versión anterior al lanzamiento / posterior al lanzamiento, agregue un --prereleaseargumento a su comando.

Divulgación completa: escribí este paquete.

Simion Agavriloaei
fuente
8
Esto es lo que pip debería hacer por defecto.
Nostalg.io
avisa con tu herramienta, algunos escapes de personajes no parecen funcionar correctamente en mi máquina con Windows, pero aparte de eso está bien
Lucas
Realmente no lo he probado en Windows, pero instalaré una máquina virtual. Gracias
Simion Agavriloaei
Si virtualenvno está habilitadopip-upgrade --skip-virtualenv-check
Morse el
2
Esto funciona también con una carpeta de requisitos que tiene requisitos comunes, dev y prod. ¡Simplemente genial!
cwhisperer
28

Desde 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
tkr
fuente
1
Último commit hace 7 años
Boris
en el año 2013 dC
dotbit
27

Versión única de la respuesta de @ Ramana .

python -c 'import pip, subprocess; [subprocess.call("pip install -U " + d.project_name, shell=1) for d in pip.get_installed_distributions()]'

``

Salman von Abbas
fuente
44
subprocess.call ("sudo pip install ... en caso de que necesite permisos
Maximiliano Rios
44
@MaximilianoRios Por favor, no sudo pip install, use un entorno virtual en su lugar.
Bengt
22

cuando use un virtualenv y si solo desea actualizar los paquetes agregados a su virtualenv, puede hacer lo siguiente:

pip install `pip freeze -l | cut --fields=1 -d = -` --upgrade
brunobord
fuente
19

La solución más simple y rápida que encontré en la discusión del tema pip es:

pip install pipdate
pipdate

Fuente: https://github.com/pypa/pip/issues/3819

Ojos rojos
fuente
2
Mientras que otras soluciones se estancaron al encontrar la más mínima anomalía, esta solución advirtió y luego omitió el problema para continuar con los otros paquetes. ¡Excelente!
Serge Stroobandt
18

Solución de Windows Powershell

pip freeze | %{$_.split('==')[0]} | %{pip install --upgrade $_}
Apeirogon Prime
fuente
pip list --outdated | %{$_.split('==')[0]} | %{pip install --upgrade $_}?
Foad
2
Quizás pip list --outdated --format freeze | %{$_.split('==')[0]} | %{pip install --upgrade $_}sería más apropiado.
trama cerebral
16

use los paquetes de actualización awk: pip install -U $(pip freeze | awk -F'[=]' '{print $1}')

actualización de windows powershell foreach($p in $(pip freeze)){ pip install -U $p.Split("=")[0]}

JohnDHH
fuente
congelación de pepita | awk -F '[=]' '{print $ 1}' | xargs pip install -U
JohnDHH
Y para python 3 ... pip3 install -U $ (pip3 freeze | awk -F '[=]' '{print $ 1}')
Jimmy MG Lim
12

Puedes probar esto:

for i in ` pip list|awk -F ' ' '{print $1}'`;do pip install --upgrade $i;done
何宗翰
fuente
esta es la forma más limpia y legible de actualizar paquetes pip con la mayor brevedad. estupendo.
Mark Shust en M.academy
12

La yema bastante sorprendente hace que esto sea fácil.

pip install yolk3k # don't install `yolk`, see https://github.com/cakebread/yolk/issues/35
yolk --upgrade

Para más información sobre la yema: https://pypi.python.org/pypi/yolk/0.4.3

Puede hacer muchas cosas que probablemente encuentres útiles.

usuario1175849
fuente
3
Su respuesta ha cambiado de yolka yolk3k, su respuesta original definitivamente tenía problemas con python3.
AXO
10

La respuesta de @ Ramana funcionó mejor para mí, de los que están aquí, pero tuve que agregar algunas capturas:

import pip
for dist in pip.get_installed_distributions():
    if 'site-packages' in dist.location:
        try:
            pip.call_subprocess(['pip', 'install', '-U', dist.key])
        except Exception, exc:
            print exc

La site-packagesverificación excluye mis paquetes de desarrollo, ya que no se encuentran en el directorio de paquetes del sitio del sistema. El try-except simplemente omite los paquetes que se han eliminado de PyPI.

@endolith: también esperaba una solución fácil pip.install(dist.key, upgrade=True), pero no parece que pip esté destinado a ser utilizado por otra cosa que no sea la línea de comandos (los documentos no mencionan la API interna, y los desarrolladores de pip no usaron docstrings).

marrón
fuente
En Ubuntu (y otros derivados de Debian), pipaparentemente pone paquetes en /usr/local/lib/python2.7/dist-packageso similares. Puede usar '/ usr / local / lib /' en lugar de 'site-packages' en la ifdeclaración en este caso.
drevicko
10

El pip_upgrade_outdatedhace el trabajo. Según sus documentos :

usage: pip_upgrade_outdated [-h] [-3 | -2 | --pip_cmd PIP_CMD]
                            [--serial | --parallel] [--dry_run] [--verbose]
                            [--version]

Upgrade outdated python packages with pip.

optional arguments:
  -h, --help         show this help message and exit
  -3                 use pip3
  -2                 use pip2
  --pip_cmd PIP_CMD  use PIP_CMD (default pip)
  --serial, -s       upgrade in serial (default)
  --parallel, -p     upgrade in parallel
  --dry_run, -n      get list, but don't upgrade
  --verbose, -v      may be specified multiple times
  --version          show program's version number and exit

Paso 1:

pip install pip-upgrade-outdated

Paso 2:

pip_upgrade_outdated
adrin
fuente
1
Paso 1: pip install pip-upgrade-outdated Paso 2: pip-upgrade-outdated ... hecho
shao.lo
9

Enviado a través de una solicitud de extracción a la gente pip ; Mientras tanto, use esta solución de biblioteca de pip que escribí:

from pip import get_installed_distributions
from pip.commands import install

install_cmd = install.InstallCommand()

options, args = install_cmd.parse_args([package.project_name
                                        for package in
                                        get_installed_distributions()])

options.upgrade = True
install_cmd.run(options, args)  # Chuck this in a try/except and print as wanted
Samuel Marks
fuente
Versión con manejo de errores (según comentario): gist.github.com/SamuelMarks/7885f2e8e5f0562b1063
Samuel Marks
9

Esto pareció funcionar para mí ...

pip install -U $(pip list --outdated|awk '{printf $1" "}')

Utilicé printfun espacio después para separar adecuadamente los nombres de los paquetes.

SaxDaddy
fuente
7

Esta es una solución de PowerShell para Python 3:

pip3 list --outdated --format=legacy | ForEach { pip3 install -U $_.split(" ")[0] }

Y para Python 2:

pip2 list --outdated --format=legacy | ForEach { pip2 install -U $_.split(" ")[0] }

Esto actualiza los paquetes uno por uno. Entonces un

pip3 check
pip2 check

después debe asegurarse de que no se rompan dependencias.

Nils Ballmann
fuente
7

Qué tal si:

pip install -r <(pip freeze) --upgrade
usuario8598996
fuente
7

El más corto y fácil en Windows.

pip freeze > requirements.txt && pip install --upgrade -r requirements.txt && rm requirements.txt
Ankireddy
fuente
@Enkouyami en Windows 7, este comando no funciona sin -r. -r debe excluir la ruta al archivo de requisitos.
Chockomonkey
6

Mi guión:

pip list --outdated --format=legacy | cut -d ' ' -f1 | xargs -n1 pip install --upgrade
Icyblade
fuente
6

¿No es esto más efectivo?

pip3 list -o | grep -v -i warning | cut -f1 -d' ' | tr " " "\n" | awk '{if(NR>=3)print}' | cut -d' ' -f1 | xargs -n1 pip3 install -U 
  1. pip list -o enumera paquetes obsoletos;
  2. grep -v -i warning partido invertido en warning para evitar errores al actualizar
  3. cut -f1 -d1' ' devuelve la primera palabra: el nombre del paquete desactualizado;
  4. tr "\n|\r" " "convierte el resultado de cutvarias líneas en una lista de una sola línea, separada por espacios;
  5. awk '{if(NR>=3)print}' omite líneas de encabezado
  6. cut -d' ' -f1 busca la primera columna
  7. xargs -n1 pip install -U toma 1 argumento de la tubería a la izquierda y lo pasa al comando para actualizar la lista de paquetes.
Alex V
fuente
Aquí está mi salida: tenga en kerberos iwlib PyYAML Could pygpgme Could Could Could ...cuenta todos los "podría". Los resultados provienen de la salida de pip list -o"No se encontraron descargas que satisfagan el requisito <paquete>"
DrStrangepork
¿Se puede pegar la salida de pip list -o?
Alex V
Los comentarios no se formatean bien, pero aquí hay un fragmento (los finales de línea están marcados con ';'):# pip list -o; urwid (Current: 1.1.1 Latest: 1.3.0); Could not find any downloads that satisfy the requirement python-default-encoding; pycups (Current: 1.9.63 Latest: 1.9.68); Could not find any downloads that satisfy the requirement policycoreutils-default-encoding; Could not find any downloads that satisfy the requirement sepolicy;
DrStrangepork
en lugar de filtrar todas las líneas que no deben ser utilizados, sugeriría para filtrar las líneas en las que existe una actualización: pip install -U $(pip list -o | grep -i current | cut -f1 -d' ' | tr "\n|\r" " ") . De lo contrario, podría perder fácilmente una línea que no desea y obtener el resultado que mencionó DrStrangeprk.
antibus
Recomiendo encarecidamente usar en su xargslugar. pip list -o | awk '/Current:/ {print $1}' | xargs -rp -- pip install -UEl -rindicador garantiza que pip install -Uno se ejecutará si no hay paquetes desactualizados. El -pindicador solicita al usuario que confirme antes de ejecutar cualquier comando. Puede agregar el -n1indicador para que le avise antes de instalar cada paquete por separado.
Seis
6

una línea en powershell 5.1 con derechos adm, python 3.6.5 y pip ver 10.0.1:

pip list -o --format json | ConvertFrom-Json | foreach {pip install $_.name -U --no-warn-script-location}

funciona sin problemas si no hay paquetes rotos o ruedas especiales en la lista ...

Sébastien Wieckowski
fuente