Como atualizar / atualizar um pacote usando o pip?

168

Qual é a maneira de atualizar um pacote usando o pip? aqueles não funcionam:

pip update
pip upgrade

Eu sei que essa é uma pergunta simples, mas é necessária, pois não é tão fácil de encontrar (a documentação do pip não aparece e outras perguntas do estouro de pilha são relevantes, mas não são exatamente sobre isso)

borgr
fonte

Respostas:

274

O caminho é

sudo pip install [package_name] --upgrade

ou em suma

sudo pip install [package_name] -U

sudo solicitará que você digite sua senha root para confirmar a ação.

Se você não tiver uma senha root (se você não for o administrador), provavelmente deverá trabalhar com o virtualenv e, em seguida, soltar o sudo:

pip install [package_name] --upgrade
borgr
fonte
2
Como pip install --helpdisse: -U, --upgrade Upgrade all specified packages to the newest available version.. Portanto, deve ser a maiúscula -U, não -u.
Peter Liang
25
Por que tal uma opção comum não é mostrado quando você faz pip --helpé um enigma para mim ...
Husky
3
@Husky - Sim, na mesma linha, por que eles não fazem apenas um upgradecomando que faz o que você vê em resposta é uma boa pergunta. (Ou seja, se você usar 'upgrade', ele simplesmente faz o que install+ --upgradefaz.) Um 'alias' das sortes.
bshea
10

Para um pacote não específico e uma solução mais geral, você pode conferir o pip-review , uma ferramenta que verifica quais pacotes podem / devem ser atualizados.

$ pip-review --interactive
requests==0.14.0 is available (you have 0.13.2)
Upgrade now? [Y]es, [N]o, [A]ll, [Q]uit y
Até parece
fonte
3
Embora isso não responda diretamente à pergunta, pode ser o que algumas pessoas realmente procuram quando procuram essa mensagem.
borgr
8

script tl; dr para atualizar todos os pacotes instalados

Se você deseja atualizar apenas um pacote, consulte a resposta do @ borgr . Costumo achar necessário, ou pelo menos agradável, atualizar todos os meus pacotes de uma só vez. Atualmente, o pip não suporta nativamente essa ação, mas com o script sh é bastante simples. Você usa pip list, awk(ou cute tail), e substituição de comando. Meu one-liner normal é:

for i in $(pip list -o | awk 'NR > 2 {print $1}'); do sudo pip install -U $i; done

Isso solicitará a senha root. Se você não tiver acesso a isso, a --useropção pipou virtualenv pode ser algo a se considerar.

Aiden Woodruff
fonte
7
import subprocess as sbp
import pip
pkgs = eval(str(sbp.run("pip3 list -o --format=json", shell=True,
                         stdout=sbp.PIPE).stdout, encoding='utf-8'))
for pkg in pkgs:
    sbp.run("pip3 install --upgrade " + pkg['name'], shell=True)

Salvar como xx.py
Em seguida, execute o Python3 xx.py
Ambiente: python3.5 + pip10.0 +

Fofdsf
fonte
Eu gosto desta solução. Eu adicionei uma impressão para mostrar o nome do pacote durante a atualização:print('updating ', pkg['name'])
pvoj 9/07
4

Para atualizar o pip para Python3.4 +, você deve usar o pip3 da seguinte maneira:

sudo pip3 install pip --upgrade

Isso atualizará o pip localizado em: /usr/local/lib/python3.X/dist-packages

Caso contrário, para atualizar o pip para Python2.7, você usaria o pip da seguinte maneira:

sudo pip install pip --upgrade

Isso atualizará o pip localizado em: /usr/local/lib/python2.7/dist-packages

Nick D
fonte
7
Não foi isso que o OP pediu. Ele está perguntando como atualizar um pacote específico, não o próprio PIP.
commadelimitado 28/01
no entanto, parece ser útil ter aqui entre essas outras respostas
uhoh