Использование 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, я думаю, что это серьезная проблема с этим подходом.