python Atualizando todos os pacotes com pip





15 Answers

Você pode usar o seguinte código Python. Ao contrário do pip freeze , isso não imprimirá avisos e erros do 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)
python pip

É possível atualizar todos os pacotes do Python de uma só vez com o pip ?

Observe que há uma solicitação de recurso para isso no rastreador de problemas oficial.




Funciona no Windows. Deve ser bom para os outros também. ($ é qualquer diretório no qual você esteja, no prompt de comando, por exemplo, C: / Users / Username>)

Faz

$ pip freeze > requirements.txt

abra o arquivo de texto, substitua o == por> =

então faça

$ pip install -r requirements.txt --upgrade

Se você tiver um problema com um certo pacote que está atrasando a atualização (às vezes numpy), vá até o diretório ($), comente o nome (adicione # antes dele) e execute a atualização novamente. Você pode mais tarde descomentar essa seção. Isso também é ótimo para copiar ambientes globais de python.

Eu também gosto do método de revisão pip:

py2
$ pip install pip-review

$ pip-review --local --interactive

py3
$ pip3 install pip-review

$ py -3 -m pip_review --local --interactive

Você pode selecionar 'a' para atualizar todos os pacotes; se uma atualização falhar, execute-a novamente e continue na próxima.




Você pode apenas imprimir os pacotes que estão desatualizados

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



Esta opção parece-me mais simples e legível:

pip install -U `pip list --outdated | tail -n +3 | awk '{print $1}'`

A explicação é que a pip list --outdated exibe uma lista de todos os pacotes desatualizados neste 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

tail -n +3 pula as duas primeiras linhas e awk '{print $1}' seleciona a primeira palavra de cada linha.




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

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

no entanto, você precisa primeiro obter gema:

$ sudo pip install -U yolk



Versão de uma linha da resposta de @ Ramana .

python -c 'import pip, subprocess; [subprocess.call("pip install -U " + d.project_name, shell=1) for d in pip.get_installed_distributions()]'

`




Ao usar um virtualenv e se você quiser apenas atualizar pacotes adicionados ao seu virtualenv, você pode querer fazer:

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



Você pode tentar isto:

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



A gema bastante surpreendente torna isso fácil.

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

Para mais informações sobre o yolk: https://pypi.python.org/pypi/yolk/0.4.3

Pode fazer muitas coisas que você provavelmente achará úteis.




Isso pareceu funcionar para mim ...

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

Eu usei printf com um espaço depois para separar corretamente os nomes dos pacotes.




Meu script:

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



import pip
pkgs = [p.key for p in pip.get_installed_distributions()]
for pkg in pkgs:
    pip.main(['install', '--upgrade', pkg])

ou mesmo:

import pip
commands = ['install', '--upgrade']
pkgs = commands.extend([p.key for p in pip.get_installed_distributions()])
pip.main(commands)

Funciona rápido, pois não está constantemente lançando um shell. Eu adoraria encontrar tempo para fazer isso realmente usando a lista desatualizada para acelerar ainda mais as coisas.




use pacotes de atualização do awk: pip install -U $(pip freeze | awk -F'[=]' '{print $1}')




uma linha no powershell 5.1 com direitos adm, python 3.6.5 e pip ver 10.0.1:

pip list -o --format json | ConvertFrom-Json | foreach {pip install $_.name -U --no-warn-script-location}

funciona sem problemas se não houver pacotes quebrados ou rodas especiais na lista ...




Eu tentei o código de Ramana e descobri que no Ubuntu você tem que escrever sudo para cada comando. Aqui está o meu script que funciona bem no 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)



Related


Tags

python   pip