Использование git для управления состоянием virtualenv: не вызовет ли это проблем? - PullRequest
19 голосов
/ 10 мая 2011

В настоящее время я настроил git и virtualenv таким образом, чтобы соответствует моим потребностям и до сих пор не вызвало никаких проблем. Однако я знаю, что мои настройки нестандартны, и мне интересно, если кто-нибудь более знаком с Virtualenv внутренние органы могут указать, если и где это может пойти не так.

Моя настройка

Мой virtualenv находится внутри моего репозитория git, но git настроен на игнорирование каталогов bin и include и всего в lib , кроме для каталога site-packages.

Точнее, мой .gitignore файл выглядит так:

*.pyc

# Ignore all the virtualenv stuff except the actual packages
# themselves
/bin
/include
/lib/python*/*
!/lib/python*/site-packages

# Ignore easyinstall and setuptools
/lib/python*/site-packages/easy-install.pth
/lib/python*/site-packages/setuptools.pth
/lib/python*/site-packages/setuptools-*
/lib/python*/site-packages/pip-*

При таком расположении я - и любой другой, работающий над оформлением заказа - могу использовать virtualenv и pip как обычно, но со следующими преимуществами:

  1. Если кто-либо обновляет или устанавливает пакет и отправляет свои изменения, то любой, кто извлекает эти изменения, автоматически получает обновление: ему не нужно замечать, что файл requirements.txt изменился, или выполнить любое post-receive крючок магии.

  2. Сетевых зависимостей нет: весь код для работы приложения живет в репозитории git.

Я знаю, что это работает только с чисто Python-пакетами, но это все, что меня сейчас интересует.

Кто-нибудь знает о каких-либо других проблемах с этим подходом, о которых мне следует знать?

Ответы [ 3 ]

9 голосов
/ 16 мая 2011

Это интересный вопрос. Я думаю, что два других ответа (пока) поднимают хорошие конкретные вопросы Ясно, что вы продумали это и пришли к решению, которое вам нравится, но я отмечу, что здесь есть философский раскол среди пользователей virtualenv.

Один лагерь, к которому, как я предполагаю, вы принадлежите, чувствует, что локальная виртуальная среда является частью проекта (т. Е. Она должна находиться под контролем версий). Другой считает, что виртуальная среда должна, по сути, рассматриваться как артефакт разработки - этот файл require.txt должен быть частью репозитория проекта, но вы должны иметь возможность сдуть и воссоздать виртуальную среду по мере необходимости.

Я просто упоминаю об этом, потому что когда я впервые увидел это различие, оно помогло сформировать мое мышление о virtualenv. (Я во втором лагере, FWIW, потому что мне это кажется проще и чище, но это не значит, что пребывание в первом лагере не подходит для вашего конкретного проекта.)

6 голосов
/ 14 мая 2011

Если у вас есть -e элементы в вашем requirements.txt - другими словами, если у вас есть какие-либо редактируемые зависимости, как описано в формате , которые используют систему контроля версий git, вы будете наиболее Вероятно, возникнут проблемы при фиксации каталога src. Если вы просто добавите /src к вашему .gitignore, то сможете избежать этой проблемы, но часто при установке просто добавляется указатель в site-packages на это место, поэтому вам это нужно!

2 голосов
/ 14 мая 2011

В /lib/python2.7/site-packages в моем virtualenv у меня есть абсолютные пути, например, в Django.egg-link У меня есть /Users/henry/.virtualenv/mowapp/src/django (это Mac).

Проверьте, есть ли у вас абсолютные пути, отмеченныеgit, я думаю, что это серьезная проблема с этим подходом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...