¿Cuál es una manera elegante de encontrar versiones de paquetes en un índice de paquete pypi?

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

  •  22-07-2019
  •  | 
  •  

Pregunta

Actualmente estoy usando un enfoque muy feo basado en una expresión regular para encontrar enlaces y desarmarlos.

No estoy satisfecho con el código, por lo que solicito soluciones más agradables, preferiblemente usando solo stdlib.

Editar

La tarea en cuestión tiene 2 partes:

  1. Encuentra todas las distribuciones que coinciden con un determinado criterio (como el prefijo del nombre).
  2. Encuentra todas las versiones disponibles en cada distribución encontrada.

El resultado esperado es un mapeo de distribución - > versiones - > archivos.

¿Fue útil?

Solución 3

es desafortunado, pero debido a la falta de xmlrpc en otros índices, necesito mantener mi solución

Otros consejos

Hay una interfaz XML-RPC. Consulte la página wiki Python.org en Cheese Shop (antiguo nombre de PyPi) API .

Extracto de esa 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 y package_releases parecen ser exactamente lo que está buscando.

@ Comentario de Ronny

Solo tiene que escribir un código en Python para determinar cuál de los paquetes enumerados cumple el criterio; es decir, si el nombre del paquete debe comenzar con foo :

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

Vamos a lanzar distutils2 a PyPI en el futuro a corto plazo. Contiene un módulo distutils2.pypi que le permite buscar PyPI desde el código Python y un programa pysetup que es un script de línea de comandos para hacer lo mismo (entre otros). El documento sigue siendo un trabajo en progreso, pero hay algunos ejemplos y una referencia de API:

En un buildout que accede a versiones de pipi y pin como esta:

Products.PloneFormGen == 1.2.5

Aquí busca la versión 1.2.5 y usa esto ...

No sé si es esto lo que estás buscando ...

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top