PyPI работает медленно. Как мне запустить свой собственный сервер?

Когда новый разработчик присоединяется к команде или Jenkins запускает полную сборку, мне нужно создать новый virtualenv. Я часто нахожу, что для установки virtualenv с Pip и большим количеством (более 10) требований требуется очень много времени для установки всего из PyPI. Часто это не удается вместе с:

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

Я в курсе Пипса--use-mirrors флаг, и иногда люди в моей команде обходились с помощью--index-url http://f.pypi.python.org/simple (или другое зеркало), пока у них нет зеркала, которое отвечает своевременно. Мы находимся в Великобритании, но в Германии есть зеркало PyPI, и у нас нет проблем с загрузкой данных с других сайтов.

Итак, я ищу способы зеркально отразить PyPI для нашей команды.

Варианты, на которые я смотрел:

Запуск моего собственного экземпляра PyPI. Есть официальная реализация PyPI:Сырная лавка а также несколько сторонних реализаций, таких как:djangopypi а такжеpypiserver (см. сноску)

Проблема этого подхода заключается в том, что меня не интересует полная функциональность PyPI с загрузкой файлов, я просто хочу отразить содержимое, которое он предоставляет.

Запуск зеркала PyPI сpep381client или жеPyPI-зеркало.

Похоже, это может сработать, но для этого нужно, чтобы мое зеркало сначала загрузило все из PyPI. Я настроил тестовый экземпляр pep381client, но моя скорость загрузки варьируется от 5 Кбит / с до 200 Кбит / с (биты, а не байты). Если где-нибудь не будет копии полного архива PyPI, мне понадобятся недели, чтобы получить полезное зеркало.

Использование циклического прокси PyPI, такого какyopypi.

Это не имеет значения сейчас, когдаhttp://pypi.python.org сам состоит изнесколько географически разных серверов.

Копирование вокруг virtualenv между разработчиками или хостингпапка с зависимостями текущего проекта.

Это не масштабируется: у нас есть несколько разных проектов Python, чьи зависимости меняются (медленно) с течением времени. Как только зависимости любого проекта изменяются, эта центральная папка должна быть обновлена, чтобы добавить новые зависимости. Копирование virtualenv хуже, чем копирование пакетов, поскольку любые пакеты Python с модулями C должны быть скомпилированы для целевой системы. В нашей команде есть пользователи как Linux, так и OS X.

(Это все еще выглядит как лучший вариант плохой связки.)

Использование интеллектуального кеширующего прокси PyPI:collective.eggproxy

Кажется, это было бы очень хорошим решением, нопоследняя версия на PyPI датирована 2009 годом и обсуждает mod_python.

Что делают другие большие команды Python? Какое лучшее решение для быстрой установки одного и того же набора пакетов Python?

Примечания:

Я видела вопросКак свернуть мой собственный PyPI?, но этот вопрос касается размещения частного кода.Питон википеречисляет альтернативные реализации PyPIЯ также недавно обнаружилCrate.io но я не верю, что это помогает мне при использовании Pip.Есть мониторинг сайтаСостояние зеркала PyPIНекоторые пакеты в PyPI размещены в других местах так что даже идеальное зеркало не поможет всем зависимостям

Ответы на вопрос(5)

Ваш ответ на вопрос