Quelle est une manière élégante de trouver des versions de paquets sur un index de paquets pypi?

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

  •  22-07-2019
  •  | 
  •  

Question

Actuellement, j'utilise une approche très laide basée sur un regex pour trouver des liens et les séparer.

Je ne suis pas satisfait du code, je demande donc de meilleures solutions, en utilisant de préférence uniquement la bibliothèque standard.

Modifier

La tâche à accomplir comporte 2 parties:

  1. Recherchez toutes les distributions correspondant à certains critères (comme le préfixe du nom).
  2. Recherchez toutes les versions disponibles dans chaque distribution trouvée.

Le résultat attendu est une cartographie de la distribution - > versions - > fichiers.

Était-ce utile?

La solution 3

C'est dommage, mais à cause du manque de xmlrpc sur les autres index, j'ai besoin de garder ma solution

Autres conseils

Il existe une interface XML-RPC. Voir la page de wiki de Python.org sur Cheese Shop (ancien nom de PyPi) API .

Extrait de ce 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 et paquet_releases semblent être exactement ce que vous recherchez.

Commentaire de @ Ronny

Il vous suffit d'écrire du code en Python pour déterminer lequel des packages énumérés répond au critère; c'est-à-dire si le nom du paquet doit commencer par foo :

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

Nous allons publier distutils2 dans PyPI dans un avenir proche. Il contient un module distutils2.pypi qui vous permet de rechercher PyPI à partir de code Python et un programme pysetup qui est un script en ligne de commande permettant de faire la même chose (entre autres). La doc est toujours un travail en cours, mais il y a quelques exemples et une référence d'API:

Dans un buildout qui accède aux versions de pin pypi i comme ceci:

Products.PloneFormGen == 1.2.5

Ici, la recherche de la version 1.2.5 est utilisée ..

Je ne sais pas si c’est ce que vous cherchez ...

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top