paquetes instalar descargar actualizar python pip

python - descargar - instalar pip



Actualizando todos los paquetes con pip (30)

¿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 coincidencia invertida en la 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 del cut en una lista de una sola línea, separada por espacios;
  5. awk ''{if(NR>=3)print}'' salta las líneas del 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 de la misma y lo pasa al comando para actualizar la lista de paquetes.

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

Tenga en cuenta que hay una solicitud de características para esto en el rastreador de problemas oficial.


Aún no hay una bandera incorporada, pero puedes 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 intentando 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 definiciones de paquetes editables ("-e"), como lo sugiere @jawache. (Sí, puede reemplazar grep + cut con sed o awk o perl o ...).

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


Aquí está mi variación en la respuesta de rbp, que evita las distribuciones "editables" y de desarrollo. Comparte dos defectos del original: se vuelve a descargar y reinstala innecesariamente; y un error en un paquete evitará la actualización de cada paquete después de eso.

pip freeze |sed -ne ''s/==.*//p'' |xargs pip install -U --

Informes de errores relacionados, un poco inconexos después de la migración de bitbucket:


Aquí hay otra forma de hacerlo con un script en python.

import pip, tempfile, contextlib with tempfile.TemporaryFile(''w+'') as temp: with contextlib.redirect_stdout(temp): pip.main([''list'',''-o'']) temp.seek(0) for line in temp: pk = line.split()[0] print(''--> updating'',pk,''<--'') pip.main([''install'',''-U'',pk])


Aquí hay una secuencia de comandos que solo actualiza los paquetes desactualizados.

import os, sys from subprocess import check_output, call file = check_output(["pip.exe", "list", "--outdated", "--format=legacy"]) line = str(file).split() for distro in line[::6]: call("pip install --upgrade " + distro, shell=True)


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

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

Sin embargo, primero debes conseguir la yema:

$ sudo pip install -U yolk


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

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


Enviado a través de una solicitud de extracción a la gente 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


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

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

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

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

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

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

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

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


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 el cut -d '' '' -f1 , -d '' '' establece "espacio" como delimitador, -f1 significa obtener la primera columna.

Así que las líneas anteriores se convierten en:

urllib3 wheel

luego xargs 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 para que sea 1


Esto pareció funcionar para mí ...

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

Utilicé printf con un espacio para separar correctamente los nombres de los paquetes.


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: / Usuarios / Nombre de usuario>)

hacer

$ pip freeze > requirements.txt

abre el archivo de texto, reemplaza el == con> =

entonces hazlo

$ pip install -r requirements.txt --upgrade

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

También me gusta el método pip-review:

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.


He probado el código de Ramana y descubrí que en Ubuntu tienes que escribir sudo para cada comando. Aquí está mi script que funciona bien en ubuntu 13.10:

#!/usr/bin/env python import pip from subprocess import call for dist in pip.get_installed_distributions(): call("sudo pip install --upgrade " + dist.project_name, shell=True)



La yema bastante sorprendente hace esto fácil.

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

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

Puede hacer muchas cosas que probablemente encuentres útiles.


Los siguientes comentarios de una sola línea podrían ser de ayuda:

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

xargs -n1 sigue funcionando si se produce un error.

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

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

Aquí hay un ejemplo de trabajo:

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


Mi guion:

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


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

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

pip-review es una bifurcación de pip-tools . Ver el problema de pip-tools mencionado por @knedlsepp . pip-review paquete pip-review funciona pero el paquete pip-tools ya no funciona.

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


Puedes probar esto:

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


Puedes usar el siguiente código de Python. A diferencia de la pip freeze , esto no imprimirá advertencias y errores de 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)


Qué tal si:

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


Simplemente puede imprimir los paquetes que están desactualizados

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


Solución Windows PowerShell

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


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

Debido a que no había una manera fácil de actualizar paquete por paquete, y actualizar el archivo Requirements.txt, escribí este pip-upgrader que también actualiza las versiones en su archivo Requirements.txt 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 preliminar o posterior a la publicación, agregue el argumento --prerelease a su comando.

Revelación completa: escribí este paquete.


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

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


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()]''

`


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

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


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


Solución más robusta

Para pip3 usa esto:

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

Para pip, solo quita los 3s como tales:

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

OSX Oddity

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

Resolviendo problemas con soluciones populares

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

  • Problemas de portabilidad debido a las características cambiantes de la línea de comando pip
  • Bloqueo de xargs debido a fallas comunes en el proceso pip o pip3
  • Registro abarrotado de la salida de xargs en bruto
  • Confiar en un puente Python-to-OS y, potencialmente, actualizarlo 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 se pueden 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 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 bloqueo de la base de datos de paquetes o de interbloqueos.


La respuesta de @Ramana funcionó mejor para mí, de las 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 comprobación de los site-packages excluye mis paquetes de desarrollo, porque no se encuentran en el directorio de paquetes de sitio del sistema. El comando try-except simplemente omite los paquetes que se han eliminado de PyPI.

@endolith: También esperaba un pip.install(dist.key, upgrade=True) fácil pip.install(dist.key, upgrade=True) , pero no parece que pip esté destinado a ser usado por nada más que la línea de comandos (los documentos no mencionan la API interna, y los desarrolladores de pip no usaron cadenas de documentación).