O que é uma maneira elegante para encontrar versões dos pacotes em um índice de pacotes pypi?

StackOverflow https://stackoverflow.com/questions/646515

  •  22-07-2019
  •  | 
  •  

Pergunta

Atualmente estou usando uma abordagem muito feio baseado em um regex para encontrar ligações e desmontá-los.

Eu estou infeliz com o código, então eu estou pedindo soluções mais agradáveis, de preferência usando apenas a stdlib.

Editar

A tarefa tem 2 partes:

  1. Encontre todas as distribuições que correspondem a determinados critérios (como prefixo do nome).
  2. Encontre todas as versões disponíveis em cada distribuição encontrada.

O resultado esperado é um mapeamento da distribuição -> versões -.> Arquivos

Foi útil?

Solução 3

Sua infeliz, mas devido à falta de xmlrpc em outros índices Preciso manter a minha solução

Outras dicas

Há uma interface XML-RPC. Veja a página de Python.org wiki em Cheese Shop (antigo nome para PyPI) API .

Trecho do que wiki:

>>> import xmlrpclib
>>> server = xmlrpclib.Server('http://pypi.python.org/pypi')
>>> server.package_releases('roundup')
['1.1.2']
>>> server.package_urls('roundup', '1.1.2')
[{'has_sig': True, 'comment_text': '', 'python_version': 'source', 'url': 'http://pypi.python.org/packages/source/r/roundup/roundup-1.1.2.tar.gz', 'md5_digest': '7c395da56412e263d7600fa7f0afa2e5', 'downloads': 2989, 'filename': 'roundup-1.1.2.tar.gz', 'packagetype': 'sdist', 'size': 876455}, {'has_sig': True, 'comment_text': '', 'python_version': 'any', 'url': 'http://pypi.python.org/packages/any/r/roundup/roundup-1.1.2.win32.exe', 'md5_digest': '983d565b0b87f83f1b6460e54554a845', 'downloads': 2020, 'filename': 'roundup-1.1.2.win32.exe', 'packagetype': 'bdist_wininst', 'size': 614270}]

list_packages e package_releases parece ser exatamente o que você está procurando.

@ do Ronny Comment

Você apenas tem que escrever algum código em Python para determinar qual dos pacotes listados satisfazer o critério; ou seja, se o nome do pacote deve começar com foo:

>>> packages = server.list_packages()
>>> match_foo = [package for package in packages if package.startswith('foo')]
>>> print len(match_foo)
2

Vamos liberar distutils2 para PyPI no futuro de curto prazo. Ele contém um módulo distutils2.pypi que permite pesquisar PyPI a partir do código Python e um programa pysetup que é um script de linha de comando para fazer a mesma coisa (entre outros). O doc ainda é um trabalho em andamento, mas existem alguns exemplos e uma referência de API:

Em um buildout que acesso PyPI i pin versões como este:

Products.PloneFormGen == 1.2.5

Aqui ele procura para a versão 1.2.5 um usa esta ..

Não sei se é isso que u procurando ...

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top