Cómo actualizar todos los paquetes de Python con pip

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

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

preguntado el 27 de abril de 10 a las 06:04

Tener cuidado software rojo: La actualización de dependencias puede dañar su aplicación. Puede enumerar la versión exacta de todos los paquetes instalados con pip freeze (como el bundle install or npm shrinkwrap). Es mejor guardar una copia de eso antes de retocar. -

Si desea actualizar un solo paquete y todos su dependencias (posiblemente un enfoque más sensato), haga esto: pip install -U --upgrade-strategy eager your-package -

Yo uso PowerShell 7 y actualmente uso este de una sola línea: pip list --format freeze | %{pip install --upgrade $_.split('==')[0]} (Todavía no puedo publicar una respuesta aquí) -

30 Respuestas

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: existen infinitas variaciones potenciales para esto. Estoy tratando de que esta respuesta sea breve y simple, ¡pero sugiera variaciones en los comentarios!

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

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

Los programas grep es omitir las definiciones de paquetes editables ("-e"), como sugiere @jawache. (Sí, podrías reemplazar grep+cut con sed or awk or perl o...).

Los programas -n1 bandera para xargs evita detener todo si falla la actualización de un paquete (gracias @andsens).

Respondido 06 ago 18, 14:08

Derecha :( El problema ahora vive en github.com/pypa/pip/issues/59 . Pero cada sugerencia parece ser respondida con "Sí, pero estoy demasiado seguro de que X es la forma correcta de hacer Y" ... ¿Ahora es mejor que nunca? ¿Lo práctico supera a la pureza? :( - rbp

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

¿Qué tal cambiar grep a: egrep -v '^ (\ - e | #)' (obtengo esta línea cuando lo ejecuto en ubuntu 12.10: "## FIXME: no se pudo encontrar la URL de svn en los enlaces de dependencia para este paquete:". - LasseValentini

Arrojaría un tee antes de realizar la actualización real para que pueda obtener una lista de las versiones originales. P.ej pip freeze --local | tee before_upgrade.txt | ... De esa manera, sería más fácil revertir si hay algún problema. - emilio h

yo añadí -H a sudo para evitar un molesto mensaje de error: $ pip freeze --local | grep -v '^\-e' | cut -d = -f 1 | xargs -n1 sudo -H pip install -U - Mario S.

Puede utilizar el siguiente código de Python. a diferencia de pip freeze, esto no imprimirá advertencias ni 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)

Respondido el 17 de Septiembre de 18 a las 13:09

Esto funciona increíblemente bien ... Siempre es muy satisfactorio cuando una tarea requiere un REALMENTE largo tiempo... y te da un manojo de cosas nuevas! PD: ¡Ejecútalo como root si estás en OS X! - Alex Gray

¿No hay forma de instalar usando pip sin llamar a un subproceso? Algo como import pip pip.install('packagename')? - endolito

Envolví esto en un archivofab.py. ¡Gracias! - jose k

@BenMezger: Realmente no debería usar paquetes de sistema en su virtualenv. Tampoco debería ejecutar más que un puñado de programas conocidos y confiables como root. Ejecute sus virtualenvs con --no-site-packages (predeterminado en versiones recientes). - jeffcook2150

Aprobado por este, la respuesta elegida (arriba) falla si ya no se puede encontrar un paquete. Este script simplemente continúa con los siguientes paquetes, maravilloso. - Josh

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. Vea pip-tools 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.

contestado el 23 de mayo de 17 a las 13:05

@hauzer: No es compatible con Python 3. Aunque podría ser un error - jfs

@mkoistinen Es una buena herramienta, pero hasta que no se combine en PIP significa instalar algo adicional que no todos deseen hacer. - noche

@Daniel: pip-tools ya no funciona, pip-review (bifurcación de pip-tools) funciona. - jfs

pip-review funciona bien (al menos para la versión 3.5.0 de Python) - Fredrik Hedman

Para actualizar todo sin el modo interactivo: pip-review --local --auto - Dlamini

Lo siguiente funciona en Windows y también debería ser bueno para otros ($ es el directorio en el que se encuentra, en el símbolo del sistema. Por ejemplo, C: / Usuarios / Nombre de usuario).

Do

$ pip freeze > requirements.txt

Abra el archivo de texto, reemplace el == con >=y ejecutar:

$ pip install -r requirements.txt --upgrade

Si tiene un problema con un paquete determinado que detiene la actualización (NumPy a veces), 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 falla una actualización, ejecútela de nuevo y continúa en la siguiente.

Respondido 06 Oct 20, 22:10

Deberías eliminar requirements.txt's =={version}. Por ejemplo: python-dateutil==2.4.2 a python-dateutil para todas las líneas. - jovenminz

Descubrí que esto en realidad no actualizaba los paquetes en macOS. - Jkooker

@youngminz Recomendaría un rápido 'Reemplazar todo "=="> "> ="' en su editor / ide antes de ejecutar 'pip install ...' para solucionar esto - amaury liet

para linux: $ pip freeze | cut -d '=' -f1> requirements.txt para eliminar la versión - Cavaz

Si el shell que usa es bash, puede acortarlo en un comando a través de pip3 install -r <(pip3 freeze) --upgrade Eficazmente, <(pip3 freeze) es una tubería anónima, pero actuará como un objeto de archivo - Sergiy Kolodyazhnyy

Utilice las actualización de pip!

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

actualización de pip le ayuda a actualizar su sistema, local o paquetes desde un requirements.txt ¡expediente! También actualiza de forma selectiva los paquetes que no interrumpen el cambio.

pipupgrade también garantiza la actualización de los paquetes presentes en múltiples entornos de Python. Es compatible con Python 2.7+, Python 3.4+ y pip 9+, pip 10+, pip 18+, pip 19+.

Ingrese la descripción de la imagen aquí

Nota: soy el autor de la herramienta.

Respondido 06 Oct 20, 23:10

Este método tiene una salida mucho más limpia que la respuesta de @ rbp: Gaia

Buena idea, pero está estancada Checking... para siempre cuando lo probé. - CGFoX

Acabo de instalarlo y también se atascó en la verificación [0;93mChecking...[0m - Chris

@nathandrake ¿le importaría abrir un problema en la página de problemas? - Aquiles Gasper Rasquinha

Recibí un error en Windows 10 y Python 3.7.5: ModuleNotFoundError: No module named 'ctypes.windll' - qinheyang

Versión de Windows tras consultar la excelente documentación para FOR por Rob van der Woude:

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

Respondido 06 Oct 20, 22:10

for /F "delims= " %i in ('pip list --outdated') do pip install -U %i Más rápido, ya que solo intentará actualizar los paquetes "obsoletos". Rafael Ackermann

@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 al actualizar 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 desactualizados y la segunda vez cuando actualice los paquetes de esta lista. - Piotr Dobrogost

@RefaelAckermann Hacer girar 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 verificaciones que deben optimizarse, no la cantidad de vueltas. El mío hace n cheques, el tuyo hace n + m cheques. - Piotr Dobrogost

+1 - Es el 6.20.2019, estoy usando Python 3.7.3 en Windows 10, y esta fue la mejor manera de actualizar todos mis paquetes locales. - MacItalia

Necesito omitir 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 usar %%i en lugar de %i. También tenga en cuenta que es más limpio actualizar pip antes de ejecutar este comando usando python -m pip install --upgrade pip. - Andy

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

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

La explicacion es que pip list --outdated genera 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>2 omite los dos primeros registros (líneas) y {print $1} selecciona la primera palabra de cada línea (como sugirió Sergio Araujo, eliminé tail -n +3 desde awk de hecho puede manejar la omisión de registros).

Respondido 25 Feb 20, 16:02

Si una actualización falla, no ocurre ninguna de las actualizaciones. - Boris

Puede imprimir los paquetes que están desactualizados:

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

Respondido 06 Oct 20, 22:10

Dentro de un virtualenv, lo hago así: pip freeze --local | cut -d = -f 1 | xargs -n 1 pip search | grep -B2 'LATEST:' - jeremy blanco

Hoy en día también puedes hacerlo con python -m pip list outdated (aunque no está en formato de requisitos). - Jacktose

@Jacktose creo que quisiste decir python -m pip list --outdated. - Hugues

El siguiente resumen podría resultarle útil:

(pip> 20.0)

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

Versiones mas antiguas:

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

xargs -n1 continúa si se produce 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 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

Respondido el 20 de junio de 20 a las 10:06

Tuve que agregar filtros para las líneas que comienzan con 'Podría' y 'Algunos' porque aparentemente pip envía advertencias a la salida estándar :( - chip camden

OK, esto es justo: puede agregar tantos | sed 's/^<First characters of the error>.*//' según sea necesario. ¡Gracias! - raratiru

o: pip list --outdated | cut -d ' ' -f 1 | xargs -n 1 pip install --upgrade - Jens

Solución más robusta

Para pip3, utilizar este:

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

Para pepita, 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 de OS X

OS X, a partir de julio de 2017, se envía 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 probada1, mientras que existen problemas incluso con las soluciones más populares.

  • Problemas de portabilidad debido a cambios en las características de la línea de comandos de pip
  • Choque de xargs debido a fallas comunes en los procesos secundarios de pip o pip3
  • Registro abarrotado de lo crudo xargs salida
  • Confiar en un puente de Python a SO mientras potencialmente lo actualiza3

El comando anterior usa el más simple y portátil pepita sintaxis en combinación con SED y sh para superar estos problemas por completo. Detalles de la SED La operación se puede examinar con la versión comentada.2.


Beneficios

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

[2] Para ver la anatomía del comando con más claridad, 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 utiliza 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.

Respondido 01 Feb 21, 13:02

otra forma de superar el BSD jurásico sed de OS X es usar gsed (GNU sed) en su lugar. Para conseguirlo, brew install gnu-sed - walter tross

@WalterTross ... Jurassic ... buen uso de adjetivos. Así que ahora tenemos dos formas de agrupar los paquetes de actualización de pip con una buena pista de auditoría en la terminal. (1) Use la opción -E como en la respuesta e (2) instale gsed para salir del período Jurásico. - douglas daseeco

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]

In cut -d ' ' -f1, -d ' ' establece "espacio" como delimitador, -f1 significa 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 adjuntos

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

Respondido el 18 de diciembre de 16 a las 18:12

Recibí esta advertencia DEPRECATION: 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. - Animar

@Reman: eso se debe a que está utilizando Pip v9.0.1. Este es solo un mensaje de desaprobación, lo que significa que algunas funcionalidades no sobrevivirán en una futura versión de Pip. No hay nada de que preocuparse ;) - alessiox

Sin embargo, esto debe marcarse como la solución final. De hecho, la respuesta aceptada se ejecutará en todos sus paquetes pip, lo cual es una pérdida de tiempo si tiene que actualizar solo 1 o 2 paquetes. Esta solución, en cambio, se ejecutará en todos los paquetes obsoletos: alessiox

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 requirements.txt, escribí esto mejorador de pip que también actualiza las versiones en su requirements.txt presentar para los paquetes elegidos (o todos los paquetes).

INSTALACIÓN

pip install pip-upgrader

Uso

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

cd en el directorio de su 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 preliminar / posterior al lanzamiento, agregue --prerelease argumento a su comando.

Divulgación completa: escribí este paquete.

Respondido 06 Oct 20, 23:10

Esto es lo que pip debería hacer por defecto. - Nostalg.io

Avisa con tu herramienta, algunos caracteres de escape no parecen funcionar correctamente en mi máquina con Windows, pero aparte de eso, está bien. Luke

Realmente no lo he probado en Windows, pero instalaré una máquina virtual. Gracias - Simion Agavriloae

If virtualenv no esta habilitado pip-upgrade --skip-virtualenv-check - Morse

Esto también funciona con una carpeta de requisitos que tiene requisitos comunes, de desarrollo y de producción. ¡Simplemente genial! - c susurrador

Versión de una sola línea 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()]'

Respondido 06 Oct 20, 22:10

subprocess.call ("sudo pip install ... en caso de que necesite permisos - Maximiliano Ríos

@MaximilianoRios Por favor no sudo pip install, utilizar una env virtual, en lugar de. - Bengt

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

Respondido 06 Oct 20, 22:10

Última confirmación hace 7 años - Boris

en el año 2013 d.C.- punto

Cuando se usa un virtualenv y si solo desea actualizar paquetes adicional a su virtualenv, es posible que desee hacer:

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

Respondido 06 Oct 20, 22:10

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

pip install pipdate
pipdate

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

respondido 03 mar '20, 05:03

Mientras que otras soluciones se estancaron al encontrar la más mínima anomalía, esta solución advirtió y luego saltó el problema para continuar con los otros paquetes. ¡Estupendo! - serge stroobandt

votando esto, funciona perfectamente en Windows - VladoPortos

Usé pipdate y ahora no puedo encontrar pip o python. Úselo bajo su propio riesgo. - jose konan

Solución Windows PowerShell

pip freeze | %{$_.split('==')[0]} | %{pip install --upgrade $_}

Respondido 06 Oct 20, 22:10

pip list --outdated | %{$_.split('==')[0]} | %{pip install --upgrade $_}? - Fofo

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

Utilice las AWK paquetes de actualización:

pip install -U $(pip freeze | awk -F'[=]' '{print $1}')

Windows PowerShell actualización

foreach($p in $(pip freeze)){ pip install -U $p.Split("=")[0]}

Respondido 06 Oct 20, 23:10

Y para python 3 ... pip3 install -U $ (pip3 freeze | awk -F '[=]' '{print $ 1}') - jimmy mg lim

Los programas pip_upgrade_outdated hace el trabajo. De acuerdo a su documentación:

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

Respondido 06 Oct 20, 23:10

Paso 1: pip install pip-upgrade-outdated Paso 2: pip-upgrade-outdated ... done - shao.lo

De hecho, este es un paquete realmente bueno. Necesita más publicidad, he estado trabajando en Python durante mucho tiempo y esta es la primera vez que lo escucho. ¡Lindo! - mario chapa

Puedes intentar esto:

for i in ` pip list | awk -F ' ' '{print $1}'`; do pip install --upgrade $i; done

Respondido 06 Oct 20, 22:10

esta es la forma más limpia y legible de actualizar los paquetes pip con la mayor brevedad. estupendo. - Mark Shust en M.academy

La yema bastante sorprendente lo hace 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 le resulten útiles.

Respondido 06 Oct 20, 22:10

Tu respuesta ha sido cambiada de yolk a yolk3k, su respuesta original definitivamente tuvo problemas con python3. - AXO

Un puro Asestar un golpe/Z shell una sola línea para lograr eso:

for p in $(pip list -o --format freeze); do pip install -U ${p%%=*}; done

O, de una manera bien formateada:

for p in $(pip list -o --format freeze)
do
    pip install -U ${p%%=*}
done

Respondido el 14 de diciembre de 20 a las 12:12

Que hace ¿representar? - ᐅ devrimbaris

@ ᐅ devrimbaris esto elimina la especificación de la versión y deja solo el nombre del paquete. Puedes verlo corriendo for p in $(pip list -o --format freeze); do echo "${p} -> ${p%%=*}"; done. De manera más general, ${haystack%%needle} significa delete longest match of needle from back of haystack. - Alemán Lashevich

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

Los programas site-packages check excluye mis paquetes de desarrollo, porque no se encuentran en el directorio site-packages del sistema. El try-except simplemente omite los paquetes que se han eliminado de PyPI.

Al endolito: Esperaba una fácil pip.install(dist.key, upgrade=True), también, pero no parece que pip estuviera destinado a ser usado por nada más que por la línea de comando (los documentos no mencionan la API interna y los desarrolladores de pip no usaron cadenas de documentos).

Respondido 06 Oct 20, 22:10

En Ubuntu (y otros derivados de Debian), pip aparentemente pone paquetes en /usr/local/lib/python2.7/dist-packages o similar. Puede usar '/ usr / local / lib /' en lugar de 'site-packages' en el if declaración en este caso. - drevicko

Una línea en PowerShell 5.1 con derechos de administrador, Python 3.6.5 y pepita 10.0.1 versión:

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 ...

Respondido 06 Oct 20, 23:10

El más corto y sencillo en Windows.

pip freeze > requirements.txt && pip install --upgrade -r requirements.txt && rm requirements.txt

Respondido 23 Abr '18, 08:04

@Enkouyami en Windows 7 este comando no funciona sin la -r. -r debe excluir la ruta al archivo de requisitos. - Chockomonkey

¿En que contexto? CMD? PowerShell? Cygwin? Anaconda? ¿Algo más? - Pedro Mortensen

Enviado a través de una solicitud de extracción a la gente de pip; Mientras tanto, use esta solución de biblioteca 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

Respondido 06 Oct 20, 22:10

Versión con manejo de errores (según comentario): gist.github.com/SamuelMarks/7885f2e8e5f0562b1063 - samuel marcos

Esto pareció funcionar para mí ...

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

solía printf con un espacio después para separar correctamente los nombres de los paquetes.

Respondido 06 Oct 20, 22:10

Uso:

pip install -r <(pip freeze) --upgrade

Respondido 06 Oct 20, 23:10

Esto debería ser 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 los paquetes obsoletos;
  2. grep -v -i warning coincidencia invertida 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 multilínea de cut en una lista separada por espacios de una sola línea;
  5. awk '{if(NR>=3)print}' omite las 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.

Respondido 06 Oct 20, 22:10

Aquí está mi salida: kerberos iwlib PyYAML Could pygpgme Could Could Could ... Tenga en cuenta todos los "Podría". Aquellos provienen de la salida de pip list -o de "No se pudo encontrar ninguna descarga que cumpla con el requisito "- DrStrangepork

¿Puedes pegar la salida de pip list -o ? - Alex V.

Los comentarios no tienen este formato 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 deberían usarse, sugeriría filtrar las líneas donde 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. - antibús

Recomiendo encarecidamente usar xargs preferiblemente. pip list -o | awk '/Current:/ {print $1}' | xargs -rp -- pip install -U Los programas -r bandera asegura que pip install -U no se ejecutará si no hay paquetes obsoletos. La -p La bandera solicita al usuario que confirme antes de ejecutar cualquier comando. Puede agregar el -n1 para que le pregunte antes de instalar cada paquete por separado. - Seis

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

luego debe asegurarse de que no se rompan las dependencias.

Respondido 04 Jul 17, 14:07

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.