¿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 install
onpm shrinkwrap
). Lo mejor es guardar una copia de eso antes de jugar.pip
instalació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
grep
es omitir las definiciones de paquete editables ("-e"), como lo sugiere @jawache. (Sí, puede reemplazargrep
+cut
consed
oawk
operl
o ...).La
-n1
marca paraxargs
evita 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.tee
Agregarí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.-H
parasudo
evitar un mensaje de error molesto:$ pip freeze --local | grep -v '^\-e' | cut -d = -f 1 | xargs -n1 sudo -H pip install -U
Puede 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 pip
pip.install('packagename')
?Para actualizar todos los paquetes locales; podrías usar
pip-review
:pip-review
es un tenedor depip-tools
. Vea elpip-tools
problema mencionado por @knedlsepp .pip-review
el paquete funciona pero elpip-tools
paquete ya no funciona.pip-review
funciona en Windows desde la versión 0.5 .fuente
pip-review --local --auto
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
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.2
apython-dateutil
para todas las líneas.$ pip freeze | cut -d '=' -f1> requirements.txt
para eliminar la versiónpip3 install -r <(pip3 freeze) --upgrade
Efectivamente,<(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
FOR
Rob van der Woudefuente
for /F "delims= " %i in ('pip list --outdated') do pip install -U %i
Má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%%i
lugar de%i
. También tenga en cuenta que es más limpio actualizarpip
antes de ejecutar este comando usandopython -m pip install --upgrade pip
.Utilizar pipupgrade !
pipupgrade ayuda a actualizar su sistema, local o paquetes desde un
requirements.txt
archivo! 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...[0m
ModuleNotFoundError: 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 --outdated
genera una lista de todos los paquetes obsoletos en este formato: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ó SergioAraujo, eliminétail -n +3
yaawk
que 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 -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
-n1
indicador 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 --upgrade
Solució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
sed
de OS X es usargsed
(GNU sed) en su lugar. Para conseguirlo,brew install gnu-sed
Esto parece más conciso.
Explicación:
pip list --outdated
obtiene líneas como estasEn
cut -d ' ' -f1
,-d ' '
establece "espacio" como delimitador,-f1
significa obtener la primera columna.Entonces las líneas anteriores se convierten en:
luego páselos a
xargs
para ejecutar el comandopip install -U
, con cada línea como argumentos anexos-n1
limita el número de argumentos pasados a cada comandopip install -U
para 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.txt
archivo 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).
cd
en 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
--prerelease
argumento a su comando.Divulgación completa: escribí este paquete.
fuente
virtualenv
no está habilitadopip-upgrade --skip-virtualenv-check
Desde 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
yolk
ayolk3k
, 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-packages
verificació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
pip
aparentemente pone paquetes en/usr/local/lib/python2.7/dist-packages
o similares. Puede usar '/ usr / local / lib /' en lugar de 'site-packages' en laif
declaración en este caso.El
pip_upgrade_outdated
hace 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é
printf
un 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 -o
enumera paquetes obsoletos;grep -v -i warning
partido invertido enwarning
para evitar errores al actualizarcut -f1 -d1' '
devuelve la primera palabra: el nombre del paquete desactualizado;tr "\n|\r" " "
convierte el resultado decut
varias líneas en una lista de una sola línea, separada por espacios;awk '{if(NR>=3)print}'
omite 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.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.xargs
lugar.pip list -o | awk '/Current:/ {print $1}' | xargs -rp -- pip install -U
El-r
indicador garantiza quepip install -U
no se ejecutará si no hay paquetes desactualizados. El-p
indicador solicita al usuario que confirme antes de ejecutar cualquier comando. Puede agregar el-n1
indicador 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