Когда новый разработчик присоединяется к команде, или Jenkins запускает полную сборку, мне нужно создать новый virtualenv. Я часто нахожу, что настройка virtualenv с помощью Pip и большое количество (более 10) требований занимает очень много времени, чтобы установить все из PyPI. Часто она не совсем с: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-mirror.
Похоже, что это может сработать, но для этого требуется, чтобы мое зеркало загрузило все, начиная с PyPI. Я установил тестовый экземпляр pep381client, но скорость загрузки варьируется от 5 Кбит/с до 200 Кбит/с (бит, а не байтов). Если там где-то копия полного архива PyPI, мне понадобится несколько недель, чтобы иметь полезное зеркало.
Использование прокси-сервера PyPI, такого как yopypi.
Это не имеет значения сейчас, когда http://pypi.python.org состоит из several geographically distinct servers.
Копирование виртуального пространства между разработчиками или размещение folder of the current project's dependencies.
Это не масштабируется: у нас есть несколько различных проектов Python, зависимости которых изменяются (медленно) со временем. Как только изменения любого проекта будут изменены, эта центральная папка должна быть обновлена, чтобы добавить новые зависимости. Копирование виртуального файла хуже, чем копирование пакетов, хотя, поскольку любые пакеты Python с модулями C необходимо скомпилировать для целевой системы. Наша команда имеет пользователей Linux и OS X.
(Это по-прежнему выглядит как самый лучший вариант плохого сгустка.)
Использование интеллектуального кэширования PyPI прокси: collective.eggproxy
Это кажется, что это будет очень хорошим решением, но the last version on PyPI is dated 2009 и обсуждает mod_python.
Что делают другие крупные команды Python? Какое лучшее решение для быстрой установки одного и того же набора пакетов python?
Сноска:
- Я видел вопрос How to roll my own PyPI?, но этот вопрос относится к хостингу личного кода.
- Питон вика lists alternative PyPI implementations
- Я также недавно обнаружил Crate.io, но я не верю, что мне помогает при использовании Пипа.
- Там есть веб-сайт мониторинга PyPI mirror status
- Some packages on PyPI have their files hosted elsewhere так даже идеальное зеркало не поможет все зависимости
Лично, когда я был в ситуации, когда мне нужно было написать (повторное) создание виртуального, я только что построил файлы .egg для пакетов, которые я хотел, и проверил их в репо вместе со сценарием для создания virtualenv. Однако я не утверждаю, что являюсь частью большой команды python. – FatalError