Использование git для управления состоянием virtualenv: это вызовет проблемы?

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

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

Мой 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 как обычно, но со следующими преимуществами:

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

  • Нет никаких сетевых зависимостей: весь код, чтобы сделать работу с работой приложения в репозитории git.

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

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

Ответ 1

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

Ответ 2

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

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

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

Ответ 3

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

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