Непрерывная интеграция, проблемы с easy_install и загрузкой - PullRequest
2 голосов
/ 29 февраля 2012

Некоторые из моих проектов на Python тестируются в условиях непрерывной интеграции с установкой, подобной описанной здесь: "Довольно" Непрерывная интеграция для Python .

В настоящее время я использую easy_install для установки проекта, его зависимостей и инструментов тестирования (нос, покрытие).

Иногда мой сборочный отчет считается сбойным, поскольку easy_install не смог загрузить зависимости из-за проблем с сетью: либо интернет-соединение, PyPI или один из серверов загрузки пакетов не работает, либо, похоже, не отвечает.

Я бы хотел предотвратить сбой моей сборки в таком случае, используя локальный кеш пакетов: когда мы не можем загрузить новую зависимость, мы будем использовать локальную (которая должна обновляться, когда это возможно). Для меня важно сначала попытаться загрузить новую зависимость, потому что я хочу как можно скорее получить предупреждение о том, что мой проект прерван из-за изменения API в зависимости.

Мой вопрос: как я могу настроить такой кеш, который не ломается при проблемах с сетью? Сначала я попытался использовать fellow.eggproxy для этой проблемы, но, насколько мне известно, он не фиксирует все ошибки.

Ответы [ 4 ]

1 голос
/ 29 февраля 2012

Я согласен с Амбер об использовании pip.pip предлагает как минимум 3 варианта поддержки доступа пятнистого pypi:

  1. Флаги хранилища альтернативного пакета, как описано в (-i для URL индекса и --find_links)

  2. Кэш загрузки можно указать с помощью PIP_DOWNLOAD_CACHE.Загруженные файлы будут кэшированы для последующего доступа

  3. Создание пакета всех ваших зависимостей .

Мы использоваливсе три в той или иной точке.В течение долгого времени мы использовали исключительно 3, но с тех пор мы настроили свой собственный сервер Pypi с использованием basketweaver

easy_install также поддерживает тег --index-url, который позволяет вам указать другой индекс, например, один из существующихзеркала pypi:

easy_install -i http://d.pypi.python.org/simple 
1 голос
/ 29 февраля 2012

Рассматривали ли вы вместо этого pip? Если это так, вы можете воспользоваться его поддержкой для хранилищ альтернативных пакетов:

http://www.pip -installer.org / о / последняя / usage.html # альтернативных-пакет-хранилища

Если вы не хотите уходить от easy_install, вы можете попробовать использовать опцию --find-links с easy_install, чтобы предоставить базовый набор ссылок для пакетов, которые вам нужны.

0 голосов
/ 02 марта 2012

Я использовал collective.eggproxy для кэширования загрузок, но использовал задержку запуска после запуска collective.eggproxy в качестве демона, чтобы предотвратить возникновение ошибок при попытке использовать easy_install до полного запуска collective.eggproxy.

Тем не менее, ответы, предлагающие использование pip, для меня одинаково актуальны, но, поскольку я уже использую easy_install и collective.eggproxy, мне легче их придерживаться.

0 голосов
/ 29 февраля 2012

Если вы собираетесь запустить свой сервер сборки, я действительно рекомендую иметь локальный кеш pypi для вашей сборки. Если только для того, чтобы вы не загружали / действительно не увеличивали количество пакетов, которые вы используете для сборок, которые могут происходить все время. Недавно было очень хорошее сообщение в блоге о настройке одного из всех pypi:

http://aboutsimon.com/2012/02/24/create-a-local-pypi-mirror/

А для спринта я недавно использовал трюк с pip для настройки локального кэша пакетов, необходимых только для моего приложения:

http://paste.mitechie.com/show/548/

...