Cómo actualizar todos los paquetes de Python con pip
Frecuentes
Visto 1,369 equipos
30 Respuestas
2466
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
El grep
es omitir las definiciones de paquetes editables ("-e"), como sugiere @jawache. (Sí, podrías reemplazar grep
+cut
sed
or awk
or perl
o...).
El -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.
725
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
693
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
368
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 ==
>=
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
195
Utilice la herramienta 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+.
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
139
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
82
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
74
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). - jacktosa
@Jacktose creo que quisiste decir python -m pip list --outdated
. - Hugues
69
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
60
Solución más robusta
Si pip3, utilizar este:
pip3 freeze --local |sed -rn 's/^([^=# \t\\][^ \t=]*)=.*/echo; echo Processing \1 ...; pip3 install -U \1/p' |sh
Si 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.
Detalles
[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
42
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
36
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. Lucas
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
29
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
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
Respondido 06 Oct 20, 22:10
24
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
22
La solución más simple y rápida que encontré en el discusión del tema pip es:
pip install pipdate
pipdate
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
20
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
17
Utilice la herramienta 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
13
El 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
12
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
12
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
12
Un puro Comandos de Bash/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
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
El 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. - drevicho
10
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
9
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. - Chockomono
¿En que contexto? CMD? PowerShell? Cygwin? Anaconda? ¿Algo más? - Pedro Mortensen
9
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
9
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
9
Uso:
pip install -r <(pip freeze) --upgrade
Respondido 06 Oct 20, 23:10
8
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
pip list -o
enumera los paquetes obsoletos;grep -v -i warning
coincidencia invertida enwarning
para evitar errores al actualizarcut -f1 -d1' '
devuelve la primera palabra: el nombre del paquete desactualizado;tr "\n|\r" " "
convierte el resultado multilínea decut
en una lista separada por espacios de una sola línea;awk '{if(NR>=3)print}'
omite las líneas de encabezadocut -d' ' -f1
busca la primera columnaxargs -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
El -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
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
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 python pip or haz tu propia pregunta.
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 elbundle install
ornpm shrinkwrap
). Es mejor guardar una copia de eso antes de retocar. - Colonel PanicSi 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 - Cyberwiz
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í) - Xeнεi Ξэnвϵς