Qual è un modo elegante per trovare le versioni dei pacchetti su un indice dei pacchetti pypi?

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

  •  22-07-2019
  •  | 
  •  

Domanda

Attualmente sto usando un approccio molto brutto basato su una regex per trovare collegamenti e smontarli.

Non sono soddisfatto del codice, quindi sto chiedendo soluzioni migliori, preferibilmente usando solo lo stdlib.

Modifica

L'attività in corso ha 2 parti:

  1. Trova tutte le distribuzioni che soddisfano determinati criteri (come il prefisso del nome).
  2. Trova tutte le versioni disponibili in ogni distribuzione trovata.

Il risultato atteso è una mappatura della distribuzione - > versioni - > file.

È stato utile?

Soluzione 3

è sfortunato, ma a causa della mancanza di xmlrpc su altri indici devo mantenere la mia soluzione

Altri suggerimenti

Esiste un'interfaccia XML-RPC. Vedi la pagina wiki Python.org nella pagina Cheese Shop (vecchio nome per PyPi) .

Estratto da quel 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 sembrano essere esattamente quello che stai cercando.

@ Commento di Ronny

Devi solo scrivere del codice in Python per determinare quale dei pacchetti elencati soddisfa il criterio; ovvero se il nome del pacchetto deve iniziare con foo :

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

Rilasceremo distutils2 su PyPI nel prossimo futuro. Contiene un modulo distutils2.pypi che ti consente di cercare PyPI dal codice Python e un programma pysetup che è uno script da riga di comando per fare la stessa cosa (tra gli altri). Il documento è ancora in fase di elaborazione, ma ci sono alcuni esempi e un riferimento API:

In un buildout che accede a versioni di pypi i pin come questa:

Products.PloneFormGen == 1.2.5

Qui cerca la versione 1.2.5 e usa questo ..

Non so se è questo quello che stai cercando ...

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top