2012-02-29 3 views
2

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

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

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

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

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

+0

Я также изучаю это, поддерживаю нас в курсе вашего прогресса! – monkut

+0

Заметка Collective.eggproxy: она была перенесена в github в начале февраля 2012 года: https://github.com/camptocamp/collective.eggproxy, поэтому теперь гораздо проще попробовать небольшие исправления (путем форкирования) или сообщить об ошибках и так далее. И да, вполне возможно, что он не поймает все сетевые ошибки. –

+0

Фактически, 'collect.eggproxy' работает отлично, но я не дал достаточно времени, чтобы запустить демон сервера, прежде чем пытаться использовать его в' easy_install' –

ответ

0

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

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

1

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

http://www.pip-installer.org/en/latest/usage.html#alternate-package-repositories

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

+0

. Я могу использовать опцию --find-links, но как я могу сохранить обновлен локальный кеш? –

+0

Я бы предпочел использовать реальный кеш, так как он ускоряет сборку, потому что мы избегаем загрузки локально кэшированных пакетов. –

+0

. Вы можете использовать комбинацию параметров альтернативного варианта репозитория пакетов * и * кеша загрузки кеша, чтобы получить как скорость, избыточности. – Amber

1

Я согласен с Amber об использовании пипса. пип предлагает по крайней мере, 3 варианта для поддержки пятнистый доступа PyPi:

  1. запасной аэродром флаги репозитория пакет, как описано в (-i для индекса URL и --find_links)

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

  3. Creating a bundle of all of your dependencies.

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

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

easy_install -i http://d.pypi.python.org/simple 
+0

2) Интернет-соединение по-прежнему требуется с PIP_DOWNLOAD_CACHE: см. Http://stackoverflow.com/a/4806458/145583 –

+0

true, поэтому мы сначала пошли с 3 :) – turtlebender

+0

С 3), я до сих пор не вижу как вы получаете свежие зависимости, когда соединение в порядке. Кроме того, мне кажется, что пакет будет построен на сервере непрерывной интеграции? Или я что-то пропустил? –

0

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

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

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

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

+0

Имея полное зеркало PyPI для всего одного проекта, кажется излишним для меня (нужно 30 ГБ !!). Вот почему я просто хочу кэш зависимостей * Я использую *. –

+0

Ваш второй момент интересен –

Смежные вопросы