Como atualizar todos os pacotes Python com pip?


2051

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

Nota : existe uma solicitação de recurso para isso no rastreador oficial de problemas.


37
Cuidado com a podridão do software - atualizar dependências pode danificar seu aplicativo. Você pode listar a versão exata de todos os pacotes instalados com pip freeze(como bundle installou npm shrinkwrap). É melhor salvar uma cópia disso antes de mexer.
— Coronel Panic

Cuidado ao fazer isso, você estraga sua pipinstalação quando faz o upgrade requests. A mensagem de erro é cannot import name IncompleteRead.
— Paul Rooney

11
Eu tentei um monte de respostas e uma (resposta de pontuação e, portanto, baixo) mais recente produz uma saída muito melhor: stackoverflow.com/questions/2720014/...
— FauChristian

Solicitação e discussão de recursos atualizados: github.com/pypa/pip/issues/4551
— cledoux

Esta pergunta é tão antiga e tão útil que só quero alertar qualquer pessoa que venha aqui a partir de agora que agora existe uma nova melhor maneira oficial de fazer tudo isso: pipenv. Os documentos estão aqui: docs.pipenv.org/basics e o Pycon 2018 do autor fala sobre o assunto: youtube.com/watch?v=GBQAKldqgZs . Feliz codificação!
— Malik A. Rumi

Respostas:


2260

Ainda não há um sinalizador interno, mas você pode usar

pip list --outdated --format=freeze | grep -v '^\-e' | cut -d = -f 1  | xargs -n1 pip install -U

Nota: existem infinitas variações potenciais para isso. Estou tentando manter esta resposta curta e simples, mas sugira variações nos comentários!

Na versão anterior pip, você pode usar isso:

pip freeze --local | grep -v '^\-e' | cut -d = -f 1  | xargs -n1 pip install -U

O grepé pular as definições de pacotes editáveis ​​("-e"), conforme sugerido por @jawache. (Sim, você pode substituir grep+ cutpor sedou awkou perlou ...).

O -n1sinalizador para xargsimpede a interrupção de tudo se a atualização de um pacote falhar (obrigado @andsens ).


59
Certo :( O problema agora está em github.com/pypa/pip/issues/59 . Mas todas as sugestões parecem ser respondidas com "Sim, mas tenho certeza se X é o caminho certo para fazer Y" ... agora é melhor do que não Praticidade bate pureza :(?
— rbp

20
Ele também imprime os pacotes que foram instalados com um gerenciador de pacotes normal (como apt-get ou Synaptic). Se eu executar isso pip install -U, ele atualizará todos os pacotes. Receio que possa causar algum conflito com o apt-get.
— Jabba

8
Que tal mudar grep para: egrep -v '^ (\ - e | #)' (eu recebo esta linha ao executá-la no ubuntu 12.10: "## FIXME: não foi possível encontrar o svn URL em dependency_links para este pacote:".
— LasseValentini

32
Eu teeusaria um antes de fazer a atualização real para que você possa obter uma lista das versões originais. Por exemplo, pip freeze --local | tee before_upgrade.txt | ...dessa forma, seria mais fácil reverter se houver algum problema.
— Emil H

10
Eu adicionei -Hpara sudoevitar uma mensagem de erro irritante: $ pip freeze --local | grep -v '^\-e' | cut -d = -f 1 | xargs -n1 sudo -H pip install -U
— Mario S

683

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

21
Isso funciona incrivelmente bem… É sempre tão gratificante quando uma tarefa leva MUITO tempo … e oferece um monte de coisas novas! PS: Execute-o como root se você estiver no OS X!
— Alex Gray

52
Não há como instalar usando o pip sem chamar um subprocesso? Algo como import pip pip.install('packagename')?
— endolith 6/03/12

6
Eu envolvi isso em um fabfile.py . Obrigado!
— Josh K

5
@ BenMezger: Você realmente não deveria estar usando pacotes de sistema no seu virtualenv. Você também não deve executar mais que um punhado de programas conhecidos e confiáveis ​​como root. Execute seus virtualenvs com --no-site-packages (padrão nas versões recentes).
— jeffcook2150

3
Perfeito para este, a resposta escolhida (acima) falha se um pacote não puder mais ser encontrado. Esse script simplesmente continua para os próximos pacotes, maravilhoso.
— Josh

643

Para atualizar todos os pacotes locais; você poderia usar pip-review:

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

pip-reviewé um garfo de pip-tools. Veja o pip-toolsproblema mencionado por @knedlsepp . pip-reviewpacote funciona, mas o pip-toolspacote não funciona mais.

pip-reviewfunciona no Windows desde a versão 0.5 .


2
@hauzer: Ele não suporta Python 3. Embora isso possa ser um erro
— jfs

7
@mkoistinen É uma boa ferramenta, mas até ser mesclada no PIP, significa instalar algo adicional que nem todos podem querer fazer.
— Wernight

2
@ Daniel: pip-tools não funciona mais, pip-review (fork de pip-tools) funciona.
— JFS

7
pip-review funciona muito bem (pelo menos para Python versão 3.5.0)
— FredrikHedman

15
Para atualizar tudo sem o modo interativo:pip-review --local --auto
— Dlamini

333

Funciona no Windows. Também deve ser bom para os outros. ($ é qualquer diretório em que você esteja, no prompt de comando. por exemplo, C: / Usuários / Nome de usuário>)

Faz

$ pip freeze > requirements.txt

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

$ pip install -r requirements.txt --upgrade

Se você tiver um problema com um determinado pacote que interrompe a atualização (às vezes fica entorpecido), vá para o diretório ($), comente o nome (adicione um # antes) e execute a atualização novamente. Mais tarde, você pode descomentar essa seção. Isso também é ótimo para copiar ambientes globais em python.


Outra maneira:

Também gosto do 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

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


29
Você deve remover requirements.txt's =={version}. Por exemplo: python-dateutil==2.4.2para python-dateutilpara todas as linhas.
— Youngminz 15/05

4
Descobri que isso não atualizou os pacotes no macOS.
— jkooker

10
@youngminz Eu recomendaria um rápido 'Replace all "=="> "> ="' em seu editor / ide antes de executar 'pip install ...' para corrigir isso #
— Amaury Liet

7
para Linux: $ pip freeze | cut -d '=' -f1> requirements.txta fim de remover a versão
— Cavaz

1
Se o shell que você usa é bash, você pode encurtar-lo em um comando via pip3 install -r <(pip3 freeze) --upgrade Efetivamente, <(pip3 freeze)é um pipe anônimo, mas ele vai agir como um objeto de arquivo
— Sergiy Kolodyazhnyy

128

Versão Windows após consulta de excelente documentação para FORpor Rob van der Woude

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

19
for /F "delims= " %i in ('pip list --outdated') do pip install -U %i Mais rápido, uma vez que só vai tentar atualizar pacotes "desatualizados"
— Refael Ackermann

3
@RefaelAckermann Eu suspeito que isso será mais lento que o original :) Para saber quais pacotes estão desatualizados, o pip precisa primeiro verificar qual é a versão mais recente de cada pacote. Ele faz exatamente o mesmo que o primeiro passo na atualização e não prossegue se não houver uma versão mais recente disponível. No entanto, em sua versão, o pip verificará as versões duas vezes, a primeira vez para estabelecer a lista de pacotes desatualizados e a segunda vez ao atualizar os pacotes nessa lista.
— Piotr Dobrogost

2
@RefaelAckermann A rotação de pip é uma ordem de magnitude mais rápida que a versão de um pacote pela rede, de modo que esse é o número de verificações que devem ser otimizadas e não o número de rotações. O meu faz n testes, o seu faz n + m testes.
— Piotr Dobrogost

2
+1 - É 20 de abril de 2019, estou usando o Python 3.7.3 no Windows 10, e essa foi a melhor maneira de atualizar todos os meus pacotes locais.
— MacItaly 20/06/19

1
Precisa pular as duas primeiras linhas da saída: for /F "skip=2 delims= " %i in ('pip list --outdated') do pip install --upgrade %i. Se isso for executado a partir de um arquivo em lotes, use-o em %%ivez de %i. Observe também que é mais fácil atualizar pipantes de executar este comando usando python -m pip install --upgrade pip.
— 13139 Andy

127

Use pipupgrade !

$ pip install pipupgrade
$ pipupgrade --verbose --latest --yes

O pipupgrade ajuda a atualizar seu sistema, local ou pacotes a partir de um requirements.txtarquivo! Ele também atualiza seletivamente pacotes que não quebram as alterações. O pipupgrade também garante a atualização dos pacotes presentes em vários ambientes Python. Compatível com Python2.7 +, Python3.4 + e pip9 +, pip10 +, pip18 +, pip19 +.

insira a descrição da imagem aqui

NOTA: Sou o autor da ferramenta.


1
Este método tem saída mais limpa muito de resposta de @ rbp
— Gaia

7
Boa ideia, mas ela fica presa para Checking...sempre quando eu a experimentei.
— CGFoX 22/03/19

1
Basta instalar-lo e também preso na verificação[0;93mChecking...[0m
— Chris

1
@nathandrake gostaria de abrir um problema na página de problemas?
— Achilles Gasper Rasquinha

2
Erro no Windows 10 e Python 3.7.5:ModuleNotFoundError: No module named 'ctypes.windll'
— Qin Heyang

74

Você pode apenas imprimir os pacotes desatualizados

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

14
Dentro de um virtualenv, faço assim: #pip freeze --local | cut -d = -f 1 | xargs -n 1 pip search | grep -B2 'LATEST:'
— Jeremy Blanchard

Atualmente, você também pode fazer isso com python -m pip list outdated(embora não esteja no formato de requisitos).
— 21416 Jacktose

74

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

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

A explicação é que pip list --outdatedgera 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

No comando awk, NR>2pula os dois primeiros registros (linhas) e {print $1}seleciona a primeira palavra de cada linha (como sugerido por SergioAraujo, eu removi, tail -n +3pois awkpode realmente lidar com pular registros).


Se uma atualização falhar, nenhuma das atualizações acontecerá.
— Boris

2
você pode evitar cauda awk 'NR>2 {print $1}'limpa a saída para você
— SergioAraujo

@SergioAraujo, isso faz com que a solução pareça também mais limpa, obrigado pela dica!
— Marc

67

A seguinte linha única pode ser útil:

(pip> 20.0)

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

Versões mais antigas:

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

xargs -n1 continua se ocorrer um erro.

Se você precisar de mais controle "refinado" sobre o que é omitido e o que gera um erro, não adicione o -n1sinalizador e defina explicitamente os erros a serem ignorados, "canalizando" a seguinte linha para cada erro separado:

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

Aqui está um exemplo de trabalho:

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

Tive que adicionar filtros para linhas começando com 'Could' e 'Some', porque aparentemente o pip envia avisos para o stdout :(
— Chip Camden

OK, isso é justo: você pode adicionar quantos forem | sed 's/^<First characters of the error>.*//'necessários. Obrigado!
— raratiru

14
Ou:pip list --outdated | cut -d ' ' -f 1 | xargs -n 1 pip install --upgrade
— Jens

51

Solução mais robusta

Para o pip3, use o seguinte:

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

Para pip, basta remover os 3s como tal:

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

OSX Oddity

O OSX, em julho de 2017, é enviado com uma versão muito antiga do sed (uma dúzia de anos). Para obter expressões regulares estendidas, use -E em vez de -r na solução acima.

Solução de problemas com soluções populares

Essa solução foi bem projetada e testada 1 , enquanto há problemas até nas soluções mais populares.

  • Problemas de portabilidade devido à alteração dos recursos da linha de comando pip
  • Falha no xargs porque falhas comuns no processo filho pip ou pip3
  • Registro lotado da saída bruta de xargs
  • Confiando em uma ponte de Python para OS e atualizando-a potencialmente 3

O comando acima usa a sintaxe de pip mais simples e mais portátil em combinação com sed e sh para superar esses problemas completamente. Detalhes da operação sed podem ser examinados com a versão comentada 2 .


Detalhes

[1] Testado e usado regularmente em um cluster Linux 4.8.16-200.fc24.x86_64 e testado em outros cinco tipos de Linux / Unix. Também é executado no Cygwin64 instalado no Windows 10. É necessário testar no iOS.

[2] Para ver a anatomia do comando mais claramente, este é o equivalente exato do comando pip3 acima com comentários:

# 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] Atualizar um componente Python ou PIP que também é usado na atualização de um componente Python ou PIP pode ser uma causa potencial de um impasse ou corrupção de banco de dados de pacotes.


1
Outra maneira de superar o BSD jurássico seddo OS X é usar gsed(GNU sed). Para obtê-lo, #brew install gnu-sed
— 911 Walter Tross

@WalterTross ... Jurassic ... bom uso de adjetivo. Portanto, agora temos duas maneiras de agrupar pacotes de atualização de pip com uma boa trilha de auditoria no terminal. (1) Use a opção -E como na resposta e (2) instale o gsed para sair do período jurássico.
— Douglas Daseeco

41

Isso parece mais conciso.

pip list --outdated | cut -d ' ' -f1 | xargs -n1 pip install -U

Explicação:

pip list --outdated recebe linhas como estas

urllib3 (1.7.1) - Latest: 1.15.1 [wheel]
wheel (0.24.0) - Latest: 0.29.0 [wheel]

Em cut -d ' ' -f1, -d ' 'define "espaço" como o delimitador, -f1significa obter a primeira coluna.

Portanto, as linhas acima se tornam:

urllib3
wheel

depois passe-os para xargsexecutar o comando pip install -U,, com cada linha como argumentos anexos

-n1limita o número de argumentos passados ​​para cada comando pip install -Ucomo 1


Recebi este avisoDEPRECATION: 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.
— Reman

2
@ Reman: isso é porque você está usando o Pip v9.0.1. Esta é apenas uma mensagem de descontinuação, o que significa que algumas funcionalidades não sobreviverão em uma versão futura do Pip. Nada para se preocupar;)
— AlessioX

No entanto, isso deve ser marcado como a solução final. Na verdade, a resposta aceita será executada em todos os seus pacotes de pip, o que é uma perda de tempo se você precisar atualizar apenas 1 ou 2 pacotes. Esta solução, em vez disso, será executada em todos os pacotes desatualizados
— AlessioX

34

Eu tive o mesmo problema com a atualização. O problema é que eu nunca atualizo todos os pacotes. Eu atualizo apenas o que eu preciso, porque o projeto pode quebrar.

Como não havia uma maneira fácil de atualizar pacote por pacote e atualizar o arquivo requirements.txt, escrevi este pip-upgradeer que também atualiza as versões do seu requirements.txtarquivo para os pacotes escolhidos (ou todos os pacotes).

Instalação

pip install pip-upgrader

Uso

Ative seu virtualenv (importante, porque também instalará as novas versões dos pacotes atualizados no virtualenv atual).

cd no diretório do projeto e execute:

pip-upgrade

Uso avançado

Se os requisitos forem colocados em um local não padrão, envie-os como argumentos:

pip-upgrade path/to/requirements.txt

Se você já sabe qual pacote deseja atualizar, basta enviá-los como argumentos:

pip-upgrade -p django -p celery -p dateutil

Se você precisar atualizar para a versão de pré-lançamento / pós-lançamento, adicione --prereleaseargumento ao seu comando.

Divulgação completa: escrevi este pacote.


8
É isso que o pip deve fazer por padrão.
— Nostalg.io

heads-up com a sua ferramenta de alguns escapes de caracteres parecem não funcionar corretamente na minha máquina Windows, mas diferente do que ele está bem
— Lucas

realmente não testei no Windows, mas instalarei uma máquina virtual. Obrigado
— Simion Agavriloaei

Se virtualenvnão está habilitadopip-upgrade --skip-virtualenv-check
— Morse

2
Isso funciona também com uma pasta de requisitos com requisitos comuns, dev e prod. Simplesmente ótimo!
— Cshisperer 03/10/19



22

ao usar um virtualenv e se você quiser apenas atualizar os pacotes adicionados ao seu virtualenv, convém:

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


18

Solução Windows Powershell

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

pip list --outdated | %{$_.split('==')[0]} | %{pip install --upgrade $_}?
— Carrega

2
Talvez pip list --outdated --format freeze | %{$_.split('==')[0]} | %{pip install --upgrade $_}seja mais apropriado.
— brainplot

16

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

atualização do windows powershell foreach($p in $(pip freeze)){ pip install -U $p.Split("=")[0]}


congelamento de pip | awk -F '[=]' '{print $ 1}' | xargs pip install -U
— JohnDHH 13/03

E para python 3 ... pip3 instala -U $ (pip3 freeze | awk -F '[=]' '{print $ 1}')
— Jimmy MG Lim

12

Você pode tentar isso:

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

essa é a maneira mais limpa e legível de atualizar pacotes pip com a maior brevidade possível. ótimo.
— Mark Shust em M.academy

12

A gema bastante surpreendente facilita isso.

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

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

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


3
Sua resposta foi alterada de yolkpara yolk3k, sua resposta original definitivamente teve problemas com o python3.
— AXO

10

A resposta de @ Ramana funcionou melhor para mim, dentre os que estão aqui, mas tive que adicionar algumas 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

A site-packagesverificação exclui meus pacotes de desenvolvimento, porque eles não estão localizados no diretório de pacotes de sites do sistema. O try-except simplesmente ignora os pacotes que foram removidos do PyPI.

@ endolith: Eu estava esperando por um fácil pip.install(dist.key, upgrade=True) também, mas não parece que o pip fosse usado para nada além da linha de comando (os documentos não mencionam a API interna e os desenvolvedores do pip não usaram instruções).


No Ubuntu (e outros derivados Debian), pipaparentemente coloca pacotes dentro /usr/local/lib/python2.7/dist-packagesou similares. Você pode usar '/ usr / local / lib /' em vez de 'site-packages' na ifinstrução neste caso.
— drevicko

10

O pip_upgrade_outdatedfaz o trabalho. De acordo com seus documentos :

usage: pip_upgrade_outdated [-h] [-3 | -2 | --pip_cmd PIP_CMD]
                            [--serial | --parallel] [--dry_run] [--verbose]
                            [--version]

Upgrade outdated python packages with pip.

optional arguments:
  -h, --help         show this help message and exit
  -3                 use pip3
  -2                 use pip2
  --pip_cmd PIP_CMD  use PIP_CMD (default pip)
  --serial, -s       upgrade in serial (default)
  --parallel, -p     upgrade in parallel
  --dry_run, -n      get list, but don't upgrade
  --verbose, -v      may be specified multiple times
  --version          show program's version number and exit

Passo 1:

pip install pip-upgrade-outdated

Passo 2:

pip_upgrade_outdated

1
Passo 1: pip instalar pip-upgrade-ultrapassada Passo 2: pip-upgrade-ultrapassada ... feito
— shao.lo

9

Enviado através de uma solicitação de recebimento para o pessoal da pip ; Enquanto isso, use esta solução de biblioteca pip que escrevi:

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

Versão com tratamento de erros (conforme comentário): gist.github.com/SamuelMarks/7885f2e8e5f0562b1063
— Samuel Marks

9

Isso pareceu funcionar para mim ...

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

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


7

Esta é uma solução do PowerShell para Python 3:

pip3 list --outdated --format=legacy | ForEach { pip3 install -U $_.split(" ")[0] }

E para Python 2:

pip2 list --outdated --format=legacy | ForEach { pip2 install -U $_.split(" ")[0] }

Isso atualiza os pacotes um por um. Então um

pip3 check
pip2 check

posteriormente, verifique se não há dependências quebradas.



7

O mais curto e fácil no Windows.

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

@Enkouyami no Windows 7, este comando não funciona sem o comando -r. -r deve impedir o caminho para o arquivo de requisitos.
— Chockomonkey 16/07/19

6

Meu script:

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

6

Isso não é mais eficaz?

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 lista pacotes desatualizados;
  2. grep -v -i warningcorrespondência invertida ativada warningpara evitar erros ao atualizar
  3. cut -f1 -d1' ' retorna a primeira palavra - o nome do pacote desatualizado;
  4. tr "\n|\r" " "converte o resultado multilinha de cutem uma lista de linha única, separada por espaço;
  5. awk '{if(NR>=3)print}' pula linhas de cabeçalho
  6. cut -d' ' -f1 busca a primeira coluna
  7. xargs -n1 pip install -U pega 1 argumento no canal à esquerda e passa para o comando para atualizar a lista de pacotes.

Aqui está a minha saída: kerberos iwlib PyYAML Could pygpgme Could Could Could ...Observe todos os "Could" s. Aqueles-tronco a partir da saída de pip list -ode "Não foi possível encontrar todos os downloads que satisfaçam o requisito <pacote>"
— DrStrangepork

Você pode colar a saída de pip list -o?
— Alex V

Os comentários não formatam isso muito bem, mas aqui está um trecho (as terminações de linha são marcadas com ';'):# 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;
— DrStrangepork 17/17/14

em vez de filtrar todas as linhas que não devem ser usados, gostaria de sugerir para filtrar as linhas onde existe uma atualização: pip install -U $(pip list -o | grep -i current | cut -f1 -d' ' | tr "\n|\r" " ") . Caso contrário, você poderá facilmente perder uma linha que não deseja e obter o resultado mencionado pelo DrStrangeprk.
— antibus

Eu recomendo fortemente o uso xargs. pip list -o | awk '/Current:/ {print $1}' | xargs -rp -- pip install -UO -rsinalizador garante que pip install -Unão será executado se não houver pacotes desatualizados. O -psinalizador solicita que o usuário confirme antes de executar qualquer comando. Você pode adicionar o -n1sinalizador para que ele seja solicitado antes da instalação de cada pacote separadamente.
— Seis

6

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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.