Skip to main content
This is a pre-production deployment of Warehouse. Changes made here affect the production instance of PyPI (pypi.python.org).
Help us improve Python packaging - Donate today!

View PyPI download statistics with ease.

Project Description

pypinfo is a simple CLI to access PyPI download statistics via Google’s BigQuery.

Installation

This is relatively painless, I swear.

  1. Go to https://bigquery.cloud.google.com.
  2. Sign up if you haven’t already. The first TB of queried data each month is free. Each additional TB is $5.
  3. Go to https://console.developers.google.com/cloud-resource-manager and create a new project. Any name is fine, but I recommend you choose something to do with PyPI like pypinfo. This way you know what the project is designated for.
  4. Follow https://cloud.google.com/storage/docs/authentication#generating-a-private-key to create credentials in JSON format. During creation, choose BigQuery User as role. After creation, note the download location. Move the file wherever you want.
  5. pip install pypinfo
  6. pypinfo --auth path/to/your_credentials.json, or set an environment variable GOOGLE_APPLICATION_CREDENTIALS that points to the file.

Usage

$ pypinfo
Usage: pypinfo [OPTIONS] [PROJECT] [FIELDS]... COMMAND [ARGS]...

  Valid fields are:

  project | version | pyversion | percent3 | percent2 | impl | impl-version |

  openssl | date | month | year | country | installer | installer-version |

  setuptools-version | system | system-release | distro | distro-version | cpu

Options:
  -a, --auth TEXT         Path to Google credentials JSON file.
  --run / --test          --test simply prints the query.
  -j, --json              Print data as JSON.
  -t, --timeout INTEGER   Milliseconds. Default: 120000 (2 minutes)
  -l, --limit TEXT        Maximum number of query results. Default: 20
  -d, --days TEXT         Number of days in the past to include. Default: 30
  -sd, --start-date TEXT  Must be negative. Default: -31
  -ed, --end-date TEXT    Must be negative. Default: -1
  -w, --where TEXT        WHERE conditional. Default: file.project = "project"
  -o, --order TEXT        Field to order by. Default: download_count
  --version               Show the version and exit.
  --help                  Show this message and exit.

pypinfo accepts 0 or more options, followed by exactly 1 project, followed by 0 or more fields. By default only the last 30 days are queried. Let’s take a look at some examples!

Tip: If queries are resulting in NoneType errors, increase timeout.

Downloads for a project

$ pypinfo requests
download_count
--------------
11033343

All downloads

$ pypinfo ""
download_count
--------------
662834133

Downloads for a project by Python version

$ pypinfo django pyversion
python_version download_count
-------------- --------------
2.7            788060
3.5            400008
3.6            169665
3.4            134378
None           59415
2.6            8276
3.3            4831
3.7            2680
3.2            1560
1.17           41
2.5            15
2.4            15
3.1            6

All downloads by country code

$ pypinfo "" country
country download_count
------- --------------
US      427837633
None    26184466
IE      25595967
CN      19682726
DE      17338740
GB      16848703
AU      12201849
CA      9828255
FR      9780133
BR      9276365
JP      9247794
RU      8758959
IL      7578813
IN      7468363
KR      6809831
NL      6120287
SG      5882292
TW      3961899
CZ      2352650
PL      2270622

Downloads for a project by system and distribution

$ pypinfo cryptography system distro
system_name distro_name                     download_count
----------- ------------------------------- --------------
Linux       Ubuntu                          1226983
Linux       None                            701829
Linux       CentOS Linux                    254488
Linux       Debian GNU/Linux                207352
Linux       debian                          205485
Linux       CentOS                          195178
None        None                            179178
Windows     None                            126962
Darwin      macOS                           123389
Darwin      OS X                            51606
Linux       Amazon Linux AMI                43192
Linux       Red Hat Enterprise Linux Server 39157
Linux       Alpine Linux                    37721
Linux       Fedora                          25036
Linux       Virtuozzo                       10302
Linux       Raspbian GNU/Linux              4261
Linux       Linux                           4162
Linux       Oracle Linux Server             3754
FreeBSD     None                            3513
Linux       Debian                          3479

Percentage of Python 3 downloads of the top 100 projects in the past year

Let’s use --test to only see the query instead of sending it.

$ pypinfo --test --days 365 --limit 100 "" project percent3
SELECT
  file.project as project,
  ROUND(100 * SUM(CASE WHEN REGEXP_EXTRACT(details.python, r"^([^\.]+)") = "3" THEN 1 ELSE 0 END) / COUNT(*), 1) as percent_3,
  COUNT(*) as download_count,
FROM
  TABLE_DATE_RANGE(
    [the-psf:pypi.downloads],
    DATE_ADD(CURRENT_TIMESTAMP(), -366, "day"),
    DATE_ADD(CURRENT_TIMESTAMP(), -1, "day")
  )
GROUP BY
  project,
ORDER BY
  download_count DESC
LIMIT 100

Credits

Changelog

Important changes are emphasized.

3.0.0

  • Breaking: --json option is now just a flag and prints output as prettified JSON.

2.0.0

  • Added --json path option.

1.0.0

  • Initial release
Release History

Release History

This version
History Node

3.0.1

History Node

3.0.0

History Node

2.0.0

History Node

1.0.0

History Node

0.0.1

Download Files

Download Files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

File Name & Checksum SHA256 Checksum Help Version File Type Upload Date
pypinfo-3.0.1-py2.py3-none-any.whl (13.0 kB) Copy SHA256 Checksum SHA256 py2.py3 Wheel Jun 11, 2017

Supported By

WebFaction WebFaction Technical Writing Elastic Elastic Search Pingdom Pingdom Monitoring Dyn Dyn DNS Sentry Sentry Error Logging CloudAMQP CloudAMQP RabbitMQ Heroku Heroku PaaS Kabu Creative Kabu Creative UX & Design Fastly Fastly CDN DigiCert DigiCert EV Certificate Rackspace Rackspace Cloud Servers DreamHost DreamHost Log Hosting