Dado o nome de um pacote Python que pode ser instalado com o pip , existe alguma maneira de descobrir uma lista de todas as versões possíveis dele que o pip poderia instalar? No momento, é tentativa e erro.
Estou tentando instalar uma versão para uma biblioteca de terceiros, mas a versão mais recente é muito nova, foram feitas alterações incompatíveis com versões anteriores. Então, de alguma forma, gostaria de ter uma lista de todas as versões que o pip conhece, para que eu possa testá-las.
pip install pylibmc==
é perfeita.Respostas:
(atualização: em março de 2020, muitas pessoas relataram que a gema, instalada via
pip install yolk3k
, retorna apenas a versão mais recente. A resposta de Chris parece ter o maior número de votos positivos e funcionou para mim)O script em pastebin funciona. No entanto, não é muito conveniente se você estiver trabalhando com vários ambientes / hosts, pois será necessário copiar / criar todas as vezes.
Uma solução geral melhor seria usar o yolk3k , que está disponível para instalação com o pip. Por exemplo, para ver quais versões do Django estão disponíveis:
yolk3k
é uma bifurcação do originalyolk
que interrompeu o desenvolvimento em 2012 . Emborayolk
não seja mais mantido (como indicado nos comentários abaixo),yolk3k
parece ser compatível com o Python 3.Nota: Não estou envolvido no desenvolvimento do yolk3k. Se algo parece não funcionar como deveria, deixar um comentário aqui não deve fazer muita diferença. Use o rastreador de problemas do yolk3k e considere enviar uma correção, se possível.
fonte
Para pip> = 9.0 use
- todas as versões disponíveis serão impressas sem realmente baixar ou instalar nenhum pacote adicional.
Para pip <9.0 use
onde
blork
pode haver qualquer sequência que não seja um número de versão válido .fonte
pip install --only-binary :all: pylibmc
, listará todas as versões do pylibmc disponíveis como pacotes binários.pip install pylibmc==9999999 | tr ', ' "\n" | sort -n
Atualização: a
partir de setembro de 2017, esse método não funciona mais:
--no-install
foi removido no pip 7Use
pip install -v
, você pode ver todas as versões disponíveisPara não instalar nenhum pacote, use uma das seguintes soluções:
ou
Testado com pip 1.0
fonte
pip 1.5.4
forneceDEPRECATION: --no-install, --no-download, --build, and --no-clean are deprecated. See https://github.com/pypa/pip/issues/906.
e não mostra as versões disponíveis para pacotes que já estão instalados.-v
. O restante da minha resposta é para evitar efeitos adicionais (instalação / download). Para o pkg instalado, basta adicionar --upgrade. De qualquer forma, você pode criar um virtualenv separado para simplificar tudo.no such option: --no-install
Você não precisa de um pacote de terceiros para obter essas informações. O pypi fornece feeds JSON simples para todos os pacotes sob
Aqui está um código Python usando apenas a biblioteca padrão que obtém todas as versões.
Esse código é impresso (em 23 de fevereiro de 2015):
fonte
versions = [x for x in data["releases"] if any([y["python_version"] in ['cp26', '2.6'] for y in data["releases"][x]])]
encontrar versões compatíveis com o Python 2.6. (Eu não vi emcp26
lugar algum, mas alguns pacotes o fizeramcp27
, especulo que isso possa existir em outros pacotes.) #curl -s https://pypi.python.org/pypi/{PKG_NAME}/json | jq -r '.releases | keys[]' | sort -t. -k 1,1n -k 2,2n -k 3,3n
ValueError
exceção para alguns pacotes que seguem esquemas de versão não tão rigorosos. Para corrigi-lo para esses pacotes, consulte esta lista .Eu vim com um script simples e simples. Graças ao autor de jq .
fonte
curl
trabalhar, possivelmente por causa de erros de certificado.wget --no-check-certificate
funciona, mas atécurl -k --insecure
não produz nada. O aviso que recebowget
dizERROR: certificate common name `www.python.org´ doesn´t match requested host name `pypi.python.org´.
sort -V
não funciona em OSX com a versão de homebrew dejq
Você pode usar o pacote yolk3k em vez de yolk. yolk3k é uma bifurcação da gema original e suporta python2 e 3.
https://github.com/myint/yolk
fonte
yolk -V attest
Attest 0.5.3
Depois de olhar para o código do pip por um tempo, parece que o código responsável por localizar pacotes podem ser encontrados na
PackageFinder
classepip.index
. Seu métodofind_requirement
procura as versões de umInstallRequirement
, mas infelizmente retorna apenas a versão mais recente.O código abaixo é quase uma cópia 1: 1 da função original, com o retorno na linha 114 alterado para retornar todas as versões.
O script espera um nome de pacote como primeiro e único argumento e retorna todas as versões.
http://pastebin.com/axzdUQhZ
Não posso garantir a correção, pois não estou familiarizado com o código do pip.Mas espero que isso ajude.
Saída de amostra
O código:
fonte
Você pode usar esse pequeno script Python 3 (usando apenas módulos de biblioteca padrão) para pegar a lista de versões disponíveis para um pacote do PyPI usando a API JSON e imprimi-las em ordem cronológica inversa. Ao contrário de outras soluções Python postadas aqui, isso não ocorre em versões soltas como
django
's2.2rc1
ouuwsgi
' s2.0.17.1
:Salve o script e execute-o com o nome do pacote como argumento, por exemplo:
fonte
https://pypi.python.org/pypi/Django/ - funciona para pacotes cujos mantenedores escolhem mostrar todos os pacotes https://pypi.python.org/simple/pip/ - deve executar o truque de qualquer maneira (lista todos os links)
fonte
Isso funciona para mim no OSX:
Retorna a lista uma por linha:
Ou, para obter a versão mais recente disponível:
Lembre-se de
gsort
que deve ser instalado (no OSX) para analisar as versões. Você pode instalá-lo combrew install coreutils
fonte
Meu projeto
luddite
tem esse recurso.Exemplo de uso:
Ele lista todas as versões de um pacote disponível, consultando a API json de https://pypi.org/
fonte
requirements.txt
arquivos em busca de pacotes desatualizados. É mais do que algumas linhas de código. Para verificar umrequirements.txt
arquivo, você precisa da funcionalidade para listar todas as versões do pacote. Esta parte é dissociada intencionalmente e faz parte da API pública do luddite. E é fonte Apache License 2.0, acho que não é justo chamar isso de pacote de software "caixa preta".Eu não tive qualquer sorte com
yolk
,yolk3k
oupip install -v
mas então acabei usando isso (adaptado para Python 3 de resposta de eric chiang):fonte
StrictVersion
não vai funcionar para muitos pacotes (django
,uwsgi
,psycopg2
para citar alguns). Você pode usar aparse_version()
partir desetuptools
(veja minha resposta para um exemplo).A solução alternativa é usar as APIs do Warehouse:
https://warehouse.readthedocs.io/api-reference/json/#release
Por exemplo, para o Flask:
irá imprimir:
fonte
bash
Script simples que depende apenas depython
si mesmo (suponho que, no contexto da pergunta, ele deva ser instalado) e um doscurl
ouwget
. Ele pressupõe que você tenha osetuptools
pacote instalado para classificar versões (quase sempre instalado). Não depende de dependências externas, como:jq
que pode não estar presente;grep
eawk
isso pode se comportar de maneira diferente no Linux e no macOS.Versão um pouco mais longa com comentários.
Coloque o nome do pacote em uma variável:
Obter versões (usando
curl
):Obter versões (usando
wget
):Imprimir versões ordenadas:
fonte
Minha opinião é uma combinação de algumas respostas postadas, com algumas modificações para torná-las mais fáceis de usar em um ambiente python em execução.
A idéia é fornecer um comando totalmente novo (modelado após o comando de instalação) que fornece uma instância do localizador de pacotes a ser usado. A vantagem é que ele trabalha com, e usa, quaisquer índices que o pip suporte e leia seus arquivos de configuração do pip local, para que você obtenha os resultados corretos como faria com uma instalação normal do pip.
Eu tentei torná-lo compatível com o pip v 9.xe 10.x .. mas tentei apenas no 9.x
https://gist.github.com/kaos/68511bd013fcdebe766c981f50b473d4
Saída de exemplo
fonte