¿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.
¿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.
pip freeze(comobundle installonpm shrinkwrap). Lo mejor es guardar una copia de eso antes de jugar.pipinstalación, cuando actualizarequests. El mensaje de error escannot import name IncompleteRead.Respuestas:
Todavía no hay una bandera incorporada, pero puede usar
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:El
grepes omitir las definiciones de paquete editables ("-e"), como lo sugiere @jawache. (Sí, puede reemplazargrep+cutconsedoawkoperlo ...).La
-n1marca paraxargsevita detener todo si falla la actualización de un paquete (gracias @andsens ).fuente
pip install -U, actualizará todos los paquetes. Me temo que puede causar algún conflicto con apt-get.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.-Hparasudoevitar un mensaje de error molesto:$ pip freeze --local | grep -v '^\-e' | cut -d = -f 1 | xargs -n1 sudo -H pip install -UPuede usar el siguiente código de Python. A diferencia
pip freeze, esto no imprimirá advertencias y errores FIXME. Para pip <10.0.1Para pip> = 10.0.1
fuente
import pippip.install('packagename')?Para actualizar todos los paquetes locales; podrías usar
pip-review:pip-reviewes un tenedor depip-tools. Vea elpip-toolsproblema mencionado por @knedlsepp .pip-reviewel paquete funciona pero elpip-toolspaquete ya no funciona.pip-reviewfunciona en Windows desde la versión 0.5 .fuente
pip-review --local --autoFunciona 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
abra el archivo de texto, reemplace
==con>=y ejecuteSi 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:
Puede seleccionar 'a' para actualizar todos los paquetes; Si una actualización falla, ejecútela nuevamente y continúa en la siguiente.
fuente
requirements.txt's=={version}. Por ejemplo:python-dateutil==2.4.2apython-dateutilpara todas las líneas.$ pip freeze | cut -d '=' -f1> requirements.txtpara eliminar la versiónpip3 install -r <(pip3 freeze) --upgradeEfectivamente,<(pip3 freeze)es una tubería anónima, pero actuará como un objeto de archivoVersión de Windows después de consultar una excelente documentación de
FORRob van der Woudefuente
for /F "delims= " %i in ('pip list --outdated') do pip install -U %iMás rápido ya que solo intentará actualizar paquetes "obsoletos"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 actualizarpipantes de ejecutar este comando usandopython -m pip install --upgrade pip.Utilizar pipupgrade !
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 +.NOTA: Soy el autor de la herramienta.
fuente
Checking...siempre cuando lo intenté.[0;93mChecking...[0mModuleNotFoundError: No module named 'ctypes.windll'Simplemente puede imprimir los paquetes que están desactualizados
fuente
pip freeze --local | cut -d = -f 1 | xargs -n 1 pip search | grep -B2 'LATEST:'python -m pip list outdated(aunque no está en formato de requisitos).Esta opción me parece más sencilla y legible:
La explicación es que
pip list --outdatedgenera una lista de todos los paquetes obsoletos en este formato: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 +3yaawkque de hecho puedo manejar omitir registros).fuente
awk 'NR>2 {print $1}'limpie la salida por tiLa siguiente frase podría ser de ayuda:
(pip> 20.0)
pip list --format freeze --outdated | sed 's/=.*//g' | xargs -n1 pip install -Uxargs -n1continú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:
fuente
| sed 's/^<First characters of the error>.*//'como sea necesario. ¡Gracias!pip list --outdated | cut -d ' ' -f 1 | xargs -n 1 pip install --upgradeSolución más robusta
Para pip3 use esto:
Para pip, simplemente elimine los 3 como tales:
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.
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:
[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.
fuente
sedde OS X es usargsed(GNU sed) en su lugar. Para conseguirlo,brew install gnu-sedEsto parece más conciso.
Explicación:
pip list --outdatedobtiene líneas como estasEn
cut -d ' ' -f1,-d ' 'establece "espacio" como delimitador,-f1significa obtener la primera columna.Entonces las líneas anteriores se convierten en:
luego páselos a
xargspara ejecutar el comandopip install -U, con cada línea como argumentos anexos-n1limita el número de argumentos pasados a cada comandopip install -Upara ser 1fuente
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.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
Uso
Active su virtualenv (importante, porque también instalará las nuevas versiones de paquetes actualizados en virtualenv actual).
cden su directorio de proyecto, luego ejecute:Uso avanzado
Si los requisitos se colocan en una ubicación no estándar, envíelos como argumentos:
Si ya sabe qué paquete desea actualizar, simplemente envíelos como argumentos:
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.
fuente
virtualenvno está habilitadopip-upgrade --skip-virtualenv-checkDesde https://github.com/cakebread/yolk :
sin embargo, primero debes obtener la yema:
fuente
Versión única de la respuesta de @ Ramana .
``
fuente
sudo pip install, use un entorno virtual en su lugar.cuando use un virtualenv y si solo desea actualizar los paquetes agregados a su virtualenv, puede hacer lo siguiente:
fuente
La solución más simple y rápida que encontré en la discusión del tema pip es:
Fuente: https://github.com/pypa/pip/issues/3819
fuente
Solución de Windows Powershell
fuente
pip list --outdated | %{$_.split('==')[0]} | %{pip install --upgrade $_}?pip list --outdated --format freeze | %{$_.split('==')[0]} | %{pip install --upgrade $_}sería más apropiado.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]}fuente
Puedes probar esto:
fuente
La yema bastante sorprendente hace que esto sea fácil.
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.
fuente
yolkayolk3k, su respuesta original definitivamente tenía problemas con python3.La respuesta de @ Ramana funcionó mejor para mí, de los que están aquí, pero tuve que agregar algunas capturas:
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).fuente
pipaparentemente pone paquetes en/usr/local/lib/python2.7/dist-packageso similares. Puede usar '/ usr / local / lib /' en lugar de 'site-packages' en laifdeclaración en este caso.El
pip_upgrade_outdatedhace el trabajo. Según sus documentos :Paso 1:
Paso 2:
fuente
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í:
fuente
Esto pareció funcionar para mí ...
Utilicé
printfun espacio después para separar adecuadamente los nombres de los paquetes.fuente
Esta es una solución de PowerShell para Python 3:
Y para Python 2:
Esto actualiza los paquetes uno por uno. Entonces un
después debe asegurarse de que no se rompan dependencias.
fuente
Qué tal si:
fuente
El más corto y fácil en Windows.
fuente
Mi guión:
fuente
¿No es esto más efectivo?
pip list -oenumera paquetes obsoletos;grep -v -i warningpartido invertido enwarningpara evitar errores al actualizarcut -f1 -d1' 'devuelve la primera palabra: el nombre del paquete desactualizado;tr "\n|\r" " "convierte el resultado decutvarias líneas en una lista de una sola línea, separada por espacios;awk '{if(NR>=3)print}'omite líneas de encabezadocut -d' ' -f1busca la primera columnaxargs -n1 pip install -Utoma 1 argumento de la tubería a la izquierda y lo pasa al comando para actualizar la lista de paquetes.fuente
kerberos iwlib PyYAML Could pygpgme Could Could Could ...cuenta todos los "podría". Los resultados provienen de la salida depip list -o"No se encontraron descargas que satisfagan el requisito <paquete>"pip list -o?# 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;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.xargslugar.pip list -o | awk '/Current:/ {print $1}' | xargs -rp -- pip install -UEl-rindicador garantiza quepip 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.una línea en powershell 5.1 con derechos adm, python 3.6.5 y pip ver 10.0.1:
funciona sin problemas si no hay paquetes rotos o ruedas especiales en la lista ...
fuente