2012-03-10 9 views
63

Ho messo a package on PyPi per la prima volta ~ 2 mesi fa e ho apportato alcuni aggiornamenti di versione da allora. Ho notato questa settimana la registrazione del conteggio dei download e sono rimasto sorpreso nel vedere che era stato scaricato centinaia di volte. Nei giorni successivi, sono stato più sorpreso di vedere aumentare il conteggio dei download a volte centinaia di al giorno, anche se si tratta di una cassetta degli attrezzi di prova statistica di nicchia. In particolare, le versioni precedenti del pacchetto continuano a essere scaricate, a volte a tassi più elevati rispetto alla versione più recente.I conteggi di download di PyPi sembrano irrealistici

Cosa sta succedendo qui?

C'è un errore nel conteggio scaricato di PyPi, o c'è abbondanza di crawler che acquisisce il codice open source (come il mio)?

+2

congratulazioni! non vedo questo comportamento per i miei pacchetti ... vedo alcuni download di bot, ma non così tanti (forse 10-100 su una nuova versione?). forse hai davvero utenti ?! powerlaws sono piuttosto alla moda ... –

+1

Non possono essere così alla moda! Ho anche caricato [un altro] (http://pypi.python.org/pypi/avalanchetoolbox), un pacchetto di analisi scientifica MOLTO specializzato (avalanchetoolbox) allo stesso tempo, che ha un comportamento molto simile (> 1.000 download in 1.5 mesi in tutte le versioni). Non ci sono 1.000 persone al mondo che troverebbero quel pacchetto interessante, quindi qualcosa deve essere sbagliato. Come avalanchetoolbox fa affidamento su powerlaw, forse una singola persona realmente interessata al pacchetto ha impostato un cron job per controllare automaticamente e scaricare gli aggiornamenti, e il lavoro è bacato? – jeffalstott

+1

Scusa, tardi per il tè, ma lo stackoverflow è un po 'senza tempo, vero? Ho notato che PyPI offre un binario .exe di Windows e solo il formato di pacchetto tar.gz come formato di packaging sorgente per il tuo pacchetto powerlaw. Se invece offri .zip, .tar.bz2 e .tar.gz (tutti come formati sorgente), potresti ottenere * qualche * suggerimento sottraendo un po '. ** Ipotesi **: l'utente di Windows accetta .zip. La maggior parte dei download di numeri uguali .tar.gz e .tar.bz2 potrebbe derivare dal mirroring. Ha senso? – Dilettant

risposta

72

Questa è una specie di vecchia domanda a questo punto, ma ho notato la stessa cosa di un pacchetto che ho su PyPI e studiato ulteriormente. Si scopre che PyPI mantiene ragionevolmente dettagliato download statistics, compresi i programmi utente (apparentemente leggermente anonimizzati). Da ciò, era evidente che la maggior parte delle persone che scaricavano il mio pacchetto erano cose come "z3c.pypimirror/1.0.15.1" e "pep381client/1.5". (PEP 381 descrive un'infrastruttura di mirroring per PyPI.)

ho scritto a quick script coincidere tutto, prima tra cui tutti loro e quindi lasciando fuori i bot più evidenti, e si scopre che letteralmente il 99% del download l'attività per il mio pacchetto è stata causata da mirrorbots: 14.335 download totali, rispetto a solo 146 download con i bot filtrati. E questo sta solo tralasciando quelli molto ovvi, quindi probabilmente è ancora una sopravvalutazione.

Sembra che la ragione principale per cui PyPI ha bisogno di mirror è perché ce l'ha.

+0

https://pypi.python.org/stats/ sembra aver ricevuto l'ultimo aggiornamento a maggio 2013. –

+7

Come posso capire i miei download * reali * ora che la pagina degli stati è inattiva? Secondo un utente in #python è dovuto al passaggio a un CDN per il download dei pacchetti. – Winny

+20

Il collegamento sembra essere morto :( – tacaswell

10

Devi anche considerare che virtualenv sta diventando sempre più popolare. Se il tuo pacchetto è simile a una libreria di base che le persone usano in molti dei loro progetti, di solito lo scaricano più volte.

Si consideri che un singolo utente ha 5 progetti in cui utilizza il pacchetto e ognuno vive nella propria virtualizzazione. Utilizzando pip per soddisfare i requisiti, il pacchetto è già stato scaricato 5 volte in questo modo. Quindi questi progetti potrebbero essere configurati su macchine diverse, come lavoro, casa e computer portatili, inoltre potrebbe esserci una staging e un server live in caso di un'applicazione web. Riassumendo, si finisce con molti download da una sola persona.

Solo un pensiero ... forse il tuo pacchetto è semplicemente buono. ;)

+0

Vedere la risposta al commento di Andrew Cooke; Il pacchetto B si basa sul pacchetto A, quindi se il pacchetto B è popolare ha senso, ma il contenuto del pacchetto B non è così popolare. – jeffalstott

11

A partire dalla dichiarazione di sintesi di Cairnarvon:

"Sembra che il motivo principale per PyPI ha bisogno di specchi è perché ha loro".

avrei modificare leggermente questo:

Potrebbe essere più il modo PyPI effettivamente funziona e quindi ha da ribaltare, che potrebbe contribuire un ulteriore bit (o due :-) al reale traffico.

Al momento penso che DEVI interagire con l'indice principale per sapere cosa aggiornare nel tuo repository. Lo stato non è semplicemente accessibile tramite timestamp su alcune gerarchie di cartelle accessibili pubblicamente.Quindi, la cosa brutta è che rsync è fuori dall'equazione. La cosa buona è che POTREI parlare con l'indice attraverso le interfacce JSON, OAuth, XML-RPC o HTTP.

Per XML-RPC:

$> python 
>>> import xmlrpclib 
>>> import pprint 
>>> client = xmlrpclib.ServerProxy('http://pypi.python.org/pypi') 
>>> client.package_releases('PartitionSets') 
['0.1.1'] 

Per JSON ad es .:

$> curl https://pypi.python.org/pypi/PartitionSets/0.1.1/json 

Se ci sono circa. 30.000 pacchetti ospitati [1] con alcuni scaricati da 50.000 a 300.000 volte alla settimana [2] (come distribuire, pip, richieste, paramiko, lxml, boto, paramike, redis e altri) avete davvero bisogno di specchi almeno da una prospettiva di accessibilità. Immagina cosa succede a un utente quando pip install NeedThisPackage non riesce: Attendi? Anche i mirror PyPI aziendali sono abbastanza comuni come proxy per reti altrimenti non rintracciabili. Infine, non dimenticare il meraviglioso controllo multi versione abilitato tramite virtualenv e amici. Questi sono tutti usi legittimi e potenzialmente meravigliosi IMO di pacchetti ...

Alla fine, non si sa mai quale agente fa veramente con un pacchetto scaricato: gli utenti N lo usano davvero o lo sovrascrivono appena la volta successiva. .. e dopo tutto, gli autori del pacchetto IMHO dovrebbero preoccuparsi di più per numero e la natura di usi, rispetto al puro numero di utenti potenziali ;-)


Refs: I numeri sono da guestimated https://pypi.python.org/pypi (29303 pacchetti) e http://pypi-ranking.info/week (per il nu mbers, richiesto il 23/03/2013).

+1

Quindi quello che stai dicendo è che dovrei farlo in modo che il mio pacchetto telefoni a casa ogni volta che viene usato se voglio sapere come molti utenti che ho. (scherzando) – ArtOfWarfare

+0

@ArtOfWarfare No, suggerirei piuttosto di ignorare la parte fuzzy, come se gli implementatori lo facessero anche se raramente con gare e casi d'angolo saltati nel nostro codice: "sembra buono, funziona! Successivo() ... ";-) – Dilettant

2

Ipotesi: anche gli strumenti CI come Travis CI e Appveyor contribuiscono un po '. Potrebbe significare che ogni commit/push porta a una build di un pacchetto e all'installazione di tutto in requirements.txt