PyPI est lente. Comment puis-je utiliser mon propre serveur?

Lorsqu'un nouveau développeur a rejoint l'équipe, ou Jenkins exécute une construction complète, j'ai besoin de créer une nouvelle virtualenv. Je trouve souvent que la mise en place d'un virtualenv avec Pip et un grand nombre (plus de 10) des exigences prend un temps très long pour tout installer à partir de PyPI.
Souvent, il ne parvient pas tout à fait avec:

Downloading/unpacking Django==1.4.5 (from -r requirements.pip (line 1))
Exception:
Traceback (most recent call last):
  File "/var/lib/jenkins/jobs/hermes-web/workspace/web/.venv/lib/python2.6/site-packages/pip-1.2.1-py2.6.egg/pip/basecommand.py", line 107, in main
    status = self.run(options, args)
  File "/var/lib/jenkins/jobs/hermes-web/workspace/web/.venv/lib/python2.6/site-packages/pip-1.2.1-py2.6.egg/pip/commands/install.py", line 256, in run
    requirement_set.prepare_files(finder, force_root_egg_info=self.bundle, bundle=self.bundle)
  File "/var/lib/jenkins/jobs/hermes-web/workspace/web/.venv/lib/python2.6/site-packages/pip-1.2.1-py2.6.egg/pip/req.py", line 1018, in prepare_files
    self.unpack_url(url, location, self.is_download)
  File "/var/lib/jenkins/jobs/hermes-web/workspace/web/.venv/lib/python2.6/site-packages/pip-1.2.1-py2.6.egg/pip/req.py", line 1142, in unpack_url
    retval = unpack_http_url(link, location, self.download_cache, self.download_dir)
  File "/var/lib/jenkins/jobs/hermes-web/workspace/web/.venv/lib/python2.6/site-packages/pip-1.2.1-py2.6.egg/pip/download.py", line 463, in unpack_http_url
    download_hash = _download_url(resp, link, temp_location)
  File "/var/lib/jenkins/jobs/hermes-web/workspace/web/.venv/lib/python2.6/site-packages/pip-1.2.1-py2.6.egg/pip/download.py", line 380, in _download_url
    chunk = resp.read(4096)
  File "/usr/lib64/python2.6/socket.py", line 353, in read
    data = self._sock.recv(left)
  File "/usr/lib64/python2.6/httplib.py", line 538, in read
    s = self.fp.read(amt)
  File "/usr/lib64/python2.6/socket.py", line 353, in read
    data = self._sock.recv(left)
timeout: timed out

Je suis conscient de Pep --use-mirrors drapeau, et parfois, les gens de mon équipe ont travaillé autour en utilisant --index-url http://f.pypi.python.org/simple (ou un autre miroir) jusqu'à ce qu'ils ont un miroir qui répond en temps opportun. Nous sommes dans le royaume-UNI, mais il y a un PyPI miroir en Allemagne, et nous n'avons pas de problèmes de téléchargement de données à partir d'autres sites.

Donc, je suis à la recherche des moyens de miroir PyPI en interne pour notre équipe.

Les options que j'ai regardé sont:

  1. Mon propre PyPI instance. Il y a l'officiel PyPI mise en œuvre: CheeseShop ainsi que plusieurs tiers des mises en œuvre, telles que: djangopypi et pypiserver (voir note de bas de page)

    Le problème avec cette approche est que je ne suis pas intéressé à plein PyPI à la fonctionnalité de téléchargement de fichier, je veux juste mettre en miroir le contenu qu'il fournit.

  2. De l'exécution d'un PyPI miroir avec pep381client ou pypi-miroir.

    Cela ressemble à cela pourrait fonctionner, mais il nécessite de mon miroir de téléchargement tout de PyPI premier. J'ai mis en place une instance de test pep381client, mais ma vitesse de téléchargement varie entre 5 Ko/s et 200 Ko/s (bits, pas d'octets). Sauf si il y a une copie de l'intégralité du PyPI archive quelque part, il va me prendre des semaines pour avoir une durée de miroir.

  3. À l'aide d'un PyPI round-robin proxy comme yopypi.

    C'est sans importance maintenant que http://pypi.python.org lui-même se compose de plusieurs géographiquement distincts serveurs.

  4. Copie autour d'un virtualenv entre les développeurs, ou d'organiser un dossier du projet en cours de dépendances.

    Ce n'est pas à l'échelle: nous avons différentes Python projets dont les dépendances de changement (lentement) au fil du temps. Dès que les dépendances de tout projet de changement, de centre, le dossier doit être mis à jour pour ajouter les nouvelles dépendances. La copie de la virtualenv est pire que de copier les paquets, mais, depuis n'importe quel paquet Python avec C les modules doivent être compilées pour le système cible. Notre équipe a à la fois Linux et OS X, les utilisateurs.

    (Ce qui semble encore la meilleure option d'un mauvais groupe.)

  5. À l'aide d'un intelligent PyPI la mise en cache proxy: collective.eggproxy

    Il semble que ce serait une très bonne solution, mais la dernière version sur PyPI est datée de 2009 et discute avec mod_python.

Que font les autres grandes Python équipes de faire? Quelle est la meilleure solution pour installer rapidement le même ensemble de paquets python?

Notes de bas de page:

  • Personnellement, quand j'étais dans une situation où j'avais besoin de faire un script (répété) création d'un virtualenv, je viens de construire .oeuf fichiers pour les paquets que je voulais et vérifié dans le repo avec le script de création de la virtualenv. Je ne prétends pas être une partie de grand python équipe, cependant.