É 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.
É 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.
pip freeze
(comobundle install
ounpm shrinkwrap
). É melhor salvar uma cópia disso antes de mexer.pip
instalação quando faz o upgraderequests
. A mensagem de erro écannot import name IncompleteRead
.Respostas:
Ainda não há um sinalizador interno, mas você pode usar
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:O
grep
é pular as definições de pacotes editáveis ("-e"), conforme sugerido por @jawache. (Sim, você pode substituirgrep
+cut
porsed
ouawk
ouperl
ou ...).O
-n1
sinalizador paraxargs
impede a interrupção de tudo se a atualização de um pacote falhar (obrigado @andsens ).fonte
pip install -U
, ele atualizará todos os pacotes. Receio que possa causar algum conflito com o apt-get.tee
usaria 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.-H
parasudo
evitar uma mensagem de erro irritante:$ pip freeze --local | grep -v '^\-e' | cut -d = -f 1 | xargs -n1 sudo -H pip install -U
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.1Para pip> = 10.0.1
fonte
import pip
pip.install('packagename')
?Para atualizar todos os pacotes locais; você poderia usar
pip-review
:pip-review
é um garfo depip-tools
. Veja opip-tools
problema mencionado por @knedlsepp .pip-review
pacote funciona, mas opip-tools
pacote não funciona mais.pip-review
funciona no Windows desde a versão 0.5 .fonte
pip-review --local --auto
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
abra o arquivo de texto, substitua
==
por>=
e executeSe 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:
Você pode selecionar 'a' para atualizar todos os pacotes; se uma atualização falhar, execute-a novamente e continua na próxima.
fonte
requirements.txt
's=={version}
. Por exemplo:python-dateutil==2.4.2
parapython-dateutil
para todas as linhas.$ pip freeze | cut -d '=' -f1> requirements.txt
a fim de remover a versãopip3 install -r <(pip3 freeze) --upgrade
Efetivamente,<(pip3 freeze)
é um pipe anônimo, mas ele vai agir como um objeto de arquivoVersão Windows após consulta de excelente documentação para
FOR
por Rob van der Woudefonte
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"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%%i
vez de%i
. Observe também que é mais fácil atualizarpip
antes de executar este comando usandopython -m pip install --upgrade pip
.Use pipupgrade !
O pipupgrade ajuda a atualizar seu sistema, local ou pacotes a partir de um
requirements.txt
arquivo! 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 +.NOTA: Sou o autor da ferramenta.
fonte
Checking...
sempre quando eu a experimentei.[0;93mChecking...[0m
ModuleNotFoundError: No module named 'ctypes.windll'
Você pode apenas imprimir os pacotes desatualizados
fonte
pip freeze --local | cut -d = -f 1 | xargs -n 1 pip search | grep -B2 'LATEST:'
python -m pip list outdated
(embora não esteja no formato de requisitos).Esta opção me parece mais direta e legível:
A explicação é que
pip list --outdated
gera uma lista de todos os pacotes desatualizados neste formato:No comando awk,
NR>2
pula os dois primeiros registros (linhas) e{print $1}
seleciona a primeira palavra de cada linha (como sugerido por SergioAraujo, eu removi,tail -n +3
poisawk
pode realmente lidar com pular registros).fonte
awk 'NR>2 {print $1}'
limpa a saída para vocêA seguinte linha única pode ser útil:
(pip> 20.0)
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
-n1
sinalizador 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:
fonte
| sed 's/^<First characters of the error>.*//'
necessários. Obrigado!pip list --outdated | cut -d ' ' -f 1 | xargs -n 1 pip install --upgrade
Solução mais robusta
Para o pip3, use o seguinte:
Para pip, basta remover os 3s como tal:
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.
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:
[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.
fonte
sed
do OS X é usargsed
(GNU sed). Para obtê-lo, #brew install gnu-sed
Isso parece mais conciso.
Explicação:
pip list --outdated
recebe linhas como estasEm
cut -d ' ' -f1
,-d ' '
define "espaço" como o delimitador,-f1
significa obter a primeira coluna.Portanto, as linhas acima se tornam:
depois passe-os para
xargs
executar o comandopip install -U
,, com cada linha como argumentos anexos-n1
limita o número de argumentos passados para cada comandopip install -U
como 1fonte
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.
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.txt
arquivo para os pacotes escolhidos (ou todos os pacotes).Instalação
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:Uso avançado
Se os requisitos forem colocados em um local não padrão, envie-os como argumentos:
Se você já sabe qual pacote deseja atualizar, basta enviá-los como argumentos:
Se você precisar atualizar para a versão de pré-lançamento / pós-lançamento, adicione
--prerelease
argumento ao seu comando.Divulgação completa: escrevi este pacote.
fonte
virtualenv
não está habilitadopip-upgrade --skip-virtualenv-check
Em https://github.com/cakebread/yolk :
no entanto, você precisa obter a gema primeiro:
fonte
Versão de uma linha da resposta de @ Ramana .
`
fonte
sudo pip install
use um ambiente virtual .ao usar um virtualenv e se você quiser apenas atualizar os pacotes adicionados ao seu virtualenv, convém:
fonte
A solução mais simples e rápida que encontrei na discussão do pip é:
Fonte: https://github.com/pypa/pip/issues/3819
fonte
Solução Windows Powershell
fonte
pip list --outdated | %{$_.split('==')[0]} | %{pip install --upgrade $_}
?pip list --outdated --format freeze | %{$_.split('==')[0]} | %{pip install --upgrade $_}
seja mais apropriado.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]}
fonte
Você pode tentar isso:
fonte
A gema bastante surpreendente facilita isso.
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.
fonte
yolk
parayolk3k
, sua resposta original definitivamente teve problemas com o python3.A resposta de @ Ramana funcionou melhor para mim, dentre os que estão aqui, mas tive que adicionar algumas capturas:
A
site-packages
verificaçã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).fonte
pip
aparentemente coloca pacotes dentro/usr/local/lib/python2.7/dist-packages
ou similares. Você pode usar '/ usr / local / lib /' em vez de 'site-packages' naif
instrução neste caso.O
pip_upgrade_outdated
faz o trabalho. De acordo com seus documentos :Passo 1:
Passo 2:
fonte
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:
fonte
Isso pareceu funcionar para mim ...
Eu usei
printf
com um espaço depois para separar corretamente os nomes dos pacotes.fonte
Esta é uma solução do PowerShell para Python 3:
E para Python 2:
Isso atualiza os pacotes um por um. Então um
posteriormente, verifique se não há dependências quebradas.
fonte
E se:
fonte
O mais curto e fácil no Windows.
fonte
Meu script:
fonte
Isso não é mais eficaz?
pip list -o
lista pacotes desatualizados;grep -v -i warning
correspondência invertida ativadawarning
para evitar erros ao atualizarcut -f1 -d1' '
retorna a primeira palavra - o nome do pacote desatualizado;tr "\n|\r" " "
converte o resultado multilinha decut
em uma lista de linha única, separada por espaço;awk '{if(NR>=3)print}'
pula linhas de cabeçalhocut -d' ' -f1
busca a primeira colunaxargs -n1 pip install -U
pega 1 argumento no canal à esquerda e passa para o comando para atualizar a lista de pacotes.fonte
kerberos iwlib PyYAML Could pygpgme Could Could Could ...
Observe todos os "Could" s. Aqueles-tronco a partir da saída depip list -o
de "Não foi possível encontrar todos os downloads que satisfaçam o requisito <pacote>"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" " ")
. Caso contrário, você poderá facilmente perder uma linha que não deseja e obter o resultado mencionado pelo DrStrangeprk.xargs
.pip list -o | awk '/Current:/ {print $1}' | xargs -rp -- pip install -U
O-r
sinalizador garante quepip install -U
não será executado se não houver pacotes desatualizados. O-p
sinalizador solicita que o usuário confirme antes de executar qualquer comando. Você pode adicionar o-n1
sinalizador para que ele seja solicitado antes da instalação de cada pacote separadamente.uma linha no powershell 5.1 com direitos adm, python 3.6.5 e pip ver 10.0.1:
funciona sem problemas se não houver pacotes quebrados ou rodas especiais na lista ...
fonte