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 размещены в других местах так что даже идеальное зеркало не поможет всем зависимостям