Christian Theune
Jan Ulrich Hasecke
Martin v. Löwis
Thomas Lotze
Veit Schiele
2011-04-06
PEP 381 beschreibt die Mirroring-Infrastruktur für den Python Package Index PyPI.
Im PyPI werden mehr als 14.000 Pakete gehostet, wobei Systeme wie EasyInstall und zc.buildout PyPI intensiv nutzen.
Wird PyPI regelmäßig verwendet, konnte dieser zum single point of failure werden. Um eine zuverlässige Infrastruktur für Mirrors bereitstellen zu können, beschreibt die PEP 381
die Liste der Mirrors und die Registrierung am PyPI
die Seiten, die ein öffentlicher Mirror bereitstellen sollte; diese Seiten werden vom PyPI verwendet um die Download-Statistiken und das Datum der letzten Aktualisierung zu erhalten.
wie die Mirrors sich mit dem PyPI synchronisieren können
welchen Mechanismus PyPI-Clients, wie z.B. EasyInstall oder zc.buildout, beim Ausfall des PyPI oder eines Mirrors verwenden können.
Falls Sie einen offiziellen PypPI-Mirror betreiben wollen, beantragen Sie dies bitte auf der catalog-SIG-Mailingliste. Sofern Ihr Mirror standardkonform ist, wird er manuell in die Liste der PyPI-Mirrors eingefügt. Einen Überblick über alle offiziellen Mirrors, deren Standort, letzte Aktualisierung und Antwortzeiten erhalten Sie in PyPI Mirror Status.
Dabei folgen die Host-Namen der Form:
X.pypi.python.org
Die Werte für X
kommen aus der Abfolge a
, b
, c
, …, aa
, ab
, … wobei a.pypi.python.org
der Master-Server ist und der erste Mirror mit b
beginnt.
Ein CNAME-Eintrag für last.pypi.python.org
erzeugt einen Alias für den letzten eingetragenen Mirror.
Mirror sollten eine feste IP-Adresse haben. Geplante Änderungen in der IP-Adresse sollten auf der catalog-SIG-Mailingliste bekanntgegeben werden.
PyPI bietet Download-Statistiken in /stats/ an. Diese Statistiken werden täglich vom PyPI neu berechnet unter Einbeziehung aller Statistiken, die von den Mirrors bereitgestellt werden.
Bei einem verteilten System wollen PyPI-Clients überprüfen können, ob die gespiegelten Kopien der Pakete authentisch sind. Dabei beschreibt die PEP 381-Spezifikation, wie die Authentizität des Mirrors überprüft werden kann. Hierzu wird im Master-Index ein DSA-Schlüssel unter der URL /serverkey bereitgestellt.
Einmal im Jahr sollen die Schlüssel durch neue ersetzt werden. Die Mirrors müssten die neuen /serversig
-Seiten dann erneut abrufen. Aktuell unterstützt der pep381client noch nicht den automatischen Abruf neuer Schlüssel.
Rest-Version des Package Index, wodurch jede Ressource eine URL erhält, auf die mit HTTP zugegriffen werden kann.
Hier wird auch auf Pakete verweisen, die nicht im PyPI selbst gehostet werden.
Paketdistributionen, die im PyPI gehostet werden, sortiert nach Python-Versionen und Anfangsbuchstaben
Signaturen für die Simple Pages
Jeder öffentliche Mirror muss mit /last-modified
eine URL mit einer Textdatei bereitstellen, die das Datum der letzten Aktualisierung in GMT-Zeit im Format ISO 8601 enthält.
Jeder Mirror soll die Anzahl der Downloads ausgeben. Diese Angabe wird von PyPI verwendet um die Gesamtzahl aller Downloads anzuzeigen.
Diese Statistik wird als CSV-Datei mit einer Kopfzeile bereitgestellt. Im Einzelnen werden folgende Felder verwendet:
Die distutils-ID des Pakets
Der Dateiname der heruntergeladenen Datei
Der Client, der das Paket heruntergeladen hat.
Die Anzahl der Downloads.
Hier ein Auszug aus einer solchen Datei:
"package","filename","useragent","count"
zc.buildout-1.1.1.tar.gz,Python-urllib/2.5 distribute/0.6.10,1
zc.buildout,zc.buildout-1.1.1.tar.gz,Python-urllib/2.6 distribute/0.6.10,1
zc.buildout,zc.buildout-1.1.1.tar.gz,setuptools/0.6c11,3
zc.buildout,zc.buildout-1.1.1.tar.gz,setuptools/0.6c9,2
…
Die Zählung beginnt mit dem Tag, an dem der Mirror öffentlich zur Verfügung gestellt wird. Dabei wird für jeden Tag eine neue Datei bereitgestellt, die im bzip2-Format komprimiert wird und nach dem jeweiligen Tag benannt wird, also z.B. 2011-04-06.bz2
für den 6. April 2011.
Diese Dateien werden in einem Ordner /local-stats/days/
bereitgestellt.