pypi mirror status (no longer maintained see
Python Shell
Switch branches/tags
Nothing to show
Clone or download
Latest commit 8840b5d Aug 28, 2014
Failed to load latest commit information.
static added notifications (twitter, email) for when the mirrors are out of … Apr 23, 2012
templates use https links for (pypi|www) Mar 18, 2014
.gitignore added notifications (twitter, email) for when the mirrors are out of … Apr 23, 2012
README.rst updated README to show how to run Jul 27, 2013 fix #4 add a JSON data dump of the data Jul 27, 2013 Update Aug 27, 2014
crontab added a cronjob to kill all long running cronjobs that last more then… Aug 28, 2013 fixes for issue #8 and PEP 449 Feb 24, 2014
dotcloud.yml added redis and bumped up the version of pypimirrors and added jinja2… Apr 16, 2012 fixed url again for ip 2 location api Apr 16, 2012 fixes for issue #8 and PEP 449 Feb 24, 2014
nginx.conf fixed nginx.conf to point to correct static path Apr 7, 2012 added email_port as a config option Apr 30, 2012
requirements.txt fixes for issue #8 and PEP 449 Feb 24, 2014 fixes for issue #8 and PEP 449 Feb 24, 2014 added fix for finding location on mirrors with paths Apr 26, 2014 moved some things around to be better organized and changed the web s… Apr 16, 2012



Very simple tool that pings the PyPI mirrors and tells us when they were updated last.

I threw this together very quickly as a proof of concept feel free to fork, and send pull requests.



It requires redis in order to cache some of the data. For local development it is assuming it to be running at localhost:6379 db:1 and no password. see for more info.


In order to get the IP address geolocation lookup, you need to sign up for an account from . If you don't have the env variable set, you will not have access to the geo location information. set IPLOC_API_KEY with the API key they give you.

Email & Twitter

To get the twitter and email notifications to work correctly you need to create an environment.json file in /tmp with the variables and values shown below. replace <value> with the real values.


"IPLOC_API_KEY": "<value>",
"TWITTER_ACCESS_KEY" : "<value>",
"EMAIL_HOST" : "<value>",
"EMAIL_PORT" : "<value>",
"EMAIL_USER" : "<value>",
"EMAIL_PASSWORD" : "<value>",
"EMAIL_FROM" : "<value>",
"EMAIL_TO" : "<value>",
"EMAIL_BCC" : "<value>",
"EMAIL_TO_ADMIN": "<value>"

For installing the API Key on dotCloud you need to run the following command. replace <value> with the real values.

env variables:

dotcloud var set pypimirrors \
    'IPLOC_API_KEY=<value>' \
    'TWITTER_CONSUMER_KEY=<value>' \
    'TWITTER_ACCESS_KEY=<value>' \
    'EMAIL_HOST=<value>' \
    'EMAIL_PORT=<value>' \
    'EMAIL_USER=<value>' \
    'EMAIL_PASSWORD=<value>' \
    'EMAIL_FROM=<value>' \
    'EMAIL_TO=<value>' \
    'EMAIL_BCC=<value>' \

How it works

The script runs via a cron job and puts data into redis. There is one webpage that pull the data from redis and displays it. There is a daily cron job that runs and sends out notifications if the mirrors are out of date.


How to help

Pick one of the things on the TODO list and implement it and send a pull request.

Running locally

Make sure redis is running

  1. Collecting Data:

    $ python
  2. Running web server:

    $ python
    # connect to http://localhost:5000 in browser


  • Create a and add to PyPI
  • Add better documentation