2014-04-17 8 views
7

ho bisogno di trovare tutti i pacchetti su PyPI che corrispondono a una particolare espressione regolare:Pip ricerca di espressioni regolari

^django-.*?admin.*$ 

In sostanza, il nome del pacchetto dovrebbe iniziare con django- e hanno admin parola dopo. Ad esempio, i seguenti pacchetti devono corrispondere:

django-redis-admin 
django-admin-ckeditor 
django-admintools-bootstrap 

posso fare pip search django-, ma c'è una grande quantità di pacchetti che io non sono interessato a

Does pip forniscono un modo per trovare i pacchetti in base. una regex? Oppure, devo semplicemente inviare i risultati di django- a grep per filtrare i pacchetti non pertinenti?

Inoltre, probabilmente un "incrocio" di pip search django- e pip search admin sarebbe di aiuto.

+4

C'è qualche ragione per cui non si voglia canalizzare i risultati della ricerca pip in grep? – hackyday

+0

@hackyday se pip non lo supporta, o non ci sono pacchetti di terze parti che possono farlo, quindi sto bene con l'opzione pipe + grep. Grazie. – alecxe

+0

Sarebbe davvero bello sapere il motivo (i) per i downvotes. Desideroso di un feedback. Grazie. – alecxe

risposta

14

aleckxe, credo che questo sia il one-liner che stai cercando.

pip search django | grep -P "^django-(?=[-\w]*?admin)[-\w]+" 

Come suggerito dal cromato nel commento qui sotto, si potrebbe facilmente pipe per ordinare per una lista ordinata se si voleva.

pip search django | grep -P "^django-(?=[-\w]*?admin)[-\w]+" | sort 

Fammi sapere se desideri qualche ritocco.

Spiegazione:

Dopo il tubo | che reindirizza l'output del comando pip per <stdin> per il comando grep, si entra in modalità grep Perl -P. Questo è necessario, altrimenti non saremmo autorizzati a usare un lookahead.

Ancoriamo il motivo all'inizio della stringa con ^ e corrisponde immediatamente a django- come valore letterale. Assumiamo quindi (guarda avanti) che in questa posizione saremo in grado di abbinare qualsiasi numero di trattini o caratteri di parole (che includono cifre e trattini bassi), seguito dalla stringa letterale admin.

Avendo fatto questa asserzione (che è una forma di convalida), ora corrispondiamo a tanti trattini e caratteri di parola che possiamo, che dovrebbero portarci alla fine del nome del modulo.

Esistono diversi modi per esprimere questo e per questo schema semplice le variazioni sono in gran parte una questione di preferenza o di umore.

Se avete sempre voluto cambiare questo per abbinare django- modelli che contengono someword, basta sostituire admin con someword.

L'uscita:

django-smoke-admin  - django-smoke-admin tests that all admin pages for all registered models responds correctly (HTTP 200). 
    django-adminskin   - UNKNOWN 
    django-admin-exporter  - Simple admin actions to download/export selected items in CSV, JSON, XML, etc. 
    django-treeadmin-fork-alt-storage - Tree UI for mptt-managed models, extracted from FeinCMS. This is a fork with support for alternative storage engines 
    django-relatedadminwidget - Get edit and delete links in your django admin. A utility class to let your model admins inherit from. 
    django-admin-langswitch - Adds easy language switch in admin 
    django-authy-admin  - A drop in replacement for django's default admin site that provides two-factor authentication via authy's REST API. 
    django-frontendadmin  - A a set of templatetags to allow an easy and unobstrusive way to edit model-data in the frontend of your page. 
    django-admin-app-names-singleton - Django admin enhancer 
    django-mobileadmin  - The Django admin interface for mobile devices. 

(. L'elenco potrebbe continuare)

Tra l'altro, guardando il pip search documentation, non vedo un modo di fare questo senza il tubo.

+1

O forse 'pip cerca django | egrep "^ django - [^] *? admin. * $" | sort' è anche una buona idea, per ottenere una lista ordinata. Penso che sia una questione di gusti, ma mi piace 'egrep' di più che digitare' grep -P'. Vedi anche http://stackoverflow.com/questions/18058875/difference-between-egrep-and-grep per le differenze tra entrambi. – dotcs

+0

@chromate Bella idea, grazie, ho aggiunto il suggerimento di ordinamento con attribuzione al cromato. :) Mi piace molto 'grep -P' ma immagino che ogni uomo abbia la sua colonia preferita. – zx81

+0

Questa è davvero una risposta grandiosa e completa, grazie per il tuo contributo. – alecxe

3

Sembra che il metodo di ricerca PyPI non supporti l'espressione regolare. Pip usa xmlrpc per le chiamate di metodo ma non ho trovato alcuna informazione per il metodo ricerca (o qualsiasi altro) non in docs o anche con methodSignature o methodHelp per il server PyPI XML-RPC. Puoi creare il tuo script come alternativa a grep (ma non ha molto senso). Esempio rapido:

1

Un approccio è il metodo sopra indicato che convoglia i risultati della ricerca del pip a grep. Vi consiglio di usarlo se volete usare la ricerca regex una volta o raramente.

Tuttavia, se avete bisogno di questa funzione regolarmente si dovrebbe verificare yip che è un pacchetto che ho scritto per compiere ricerca regex accanto ad altre utili aggiunte che la ricerca di pip non può fare come la visualizzazione di informazioni extra (dimensioni, caricare il tempo, homepage o licenza) o colorazione dell'output per la leggibilità.