Когда к команде присоединяется новый разработчик или Дженкинс запускает полную сборку, мне нужно создать новую виртуальную среду. Я часто обнаруживаю, что настройка 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: CheeseShop, а также несколько сторонних реализаций, таких как: djangopypi и pypiserver а> (см. сноску)
Проблема с этим подходом заключается в том, что меня не интересует полная функциональность PyPI с загрузкой файлов, я просто хочу отразить контент, который он предоставляет.
Запуск зеркала PyPI с помощью pep381client или pypi-зеркало.
Похоже, это может сработать, но для этого требуется, чтобы мое зеркало сначала загрузило все из PyPI. Я установил тестовый экземпляр pep381client, но моя скорость загрузки колеблется от 5 до 200 Кбит/с (бит, а не байт). Если где-то нет копии полного архива PyPI, мне потребуются недели, чтобы получить полезное зеркало.
Использование циклического прокси-сервера PyPI, такого как yopypi.
Это не имеет значения, поскольку http://pypi.python.org сам состоит из несколько географически разных серверов.
Копирование виртуальной среды между разработчиками или размещение папки текущего проекта зависимости.
Это не масштабируется: у нас есть несколько разных проектов Python, зависимости которых меняются (медленно) с течением времени. Как только зависимости любого проекта изменятся, эта центральная папка должна быть обновлена, чтобы добавить новые зависимости. Однако копирование virtualenv хуже, чем копирование пакетов, поскольку любые пакеты Python с модулями C необходимо скомпилировать для целевой системы. В нашей команде есть пользователи как Linux, так и OS X.
(Это по-прежнему выглядит как лучший вариант плохой группы.)
Использование интеллектуального кэширующего прокси-сервера PyPI: collective.eggproxy
Кажется, это было бы очень хорошим решением, но последняя версия PyPI датирована 2009 годом и обсуждает mod_python.
Чем занимаются другие крупные команды Python? Какое лучшее решение для быстрой установки одного и того же набора пакетов Python?
Сноски:
- Я видел вопрос Как свернуть мой собственный PyPI?, но этот вопрос касается размещения приватного кода.
- Вики Python список альтернативных реализаций PyPI
- Я также недавно обнаружил Crate.io, но я не верю, что это поможет мне при использовании Pip.
- Существует веб-сайт, отслеживающий состояние зеркала PyPI.
- Файлы некоторых пакетов в PyPI размещены в другом месте, так что даже идеальное зеркало не поможет всем зависимостям