Просто любопытный, как люди развертывают свои проекты Django в сочетании с virtualenv
Я использую мерзавца для scm, но у меня нет своего virtualenv в мерзавце repo - должен я, или лучше использовать замораживание зернышка и затем воссоздать среду на сервере с помощью вывода замораживания? (Если Вы делаете это, могли Вы описывать шаги - я нахожу, что очень мало хорошей документации относительно процесса размораживания - является чем-то как pip install -r freeze_output.txt
возможный?)
Я только что установил нечто подобное на работе, используя pip, Fabric и git. Поток в основном выглядит так, и в значительной степени заимствован из этого скрипта:
git log -1 --format=format:%h TREEISH
. Это дает нам SHA_OF_THE_RELEASE
git log -1 --format=format:%h SHA_OF_THE_RELEASE requirements.txt
. Это выдаст короткую версию хэша, например 1d02afc
, которая является SHA для этого файла для данного конкретного выпуска. 1d02afc
отсутствует, создается новая virtualenv и настраивается с помощью pip install -E /path/to/venv/1d02afc -r /path/to/requirements. txt
path/to/venv/1d02afc
, ничего не делаетсяМаленькая волшебная часть этого - передача любого дерева, которое вы хотите, в git, и его упаковка (из Fabric). Используя git archive my-branch
, git archive 1d02afc
или что-то ещё, я гарантированно получу нужные пакеты, установленные на моих удалённых машинах.
Я пошел по этому пути, поскольку не хотел иметь лишние virtuenvs, если пакеты не менялись между релизами. Мне также не нравится идея иметь пакеты, от которых я завишу, в моем собственном дереве исходных текстов.
Перед внесением изменения можно сохранить положение курсора, а затем восстановить его:
int i = richTextBox1.SelectionStart;
richTextBox1.Text += "foo";
richTextBox1.SelectionStart = i;
Если не требуется удалять подсветку, можно также выполнить то же самое с помощью SeliceLength. Обратите внимание, что это может вызвать странное поведение, если вставленный текст находится внутри выделенной области. Затем необходимо расширить выделенный фрагмент, включив в него длину вставленного текста.
-121--3119888- dict.fromkeys ([1, 2, 3, 4])
Это фактически классический метод, поэтому он также работает для подклассов dict (например, collections.defaultdict
). Дополнительный второй аргумент указывает значение, используемое для ключей (по умолчанию Нет
.)
Я использую эту bootstrap.py: http://github.com/ccnmtl/ccnmtldjango/blob/master/ccnmtldjango/template/bootstrap.py
, которая ожидает, что каталог называется "требования", который выглядит примерно так: http://github.com/ccnmtl/ccnmtldjango/tree/master/ccnmtldjango/template/requirements/
Есть apps.txt, libs.txt (который apps.txt includes - я просто люблю держать приложения django отдельно от других модулей python) и каталог src, который содержит
При запуске ./bootstrap.py он создает virtualenv (стирание предыдущего, если он существует) и устанавливает в него все, что соответствует требованиям/apps.txt. В противном случае я никогда ничего не устанавливаю в virtualenv. Если я хочу включить новую библиотеку, я поместил тарбол в требования/src/, добавить строку в один из текстовых файлов и запустить заново ./bootstrap.py.
bootstrap.py и требования проверяются в системе управления версиями (также копия pip.py, поэтому мне даже не нужно устанавливать эту систему в масштабах всей системы). Сам виртуален - нет. Сценарии, выдаваемые на производственный сервер, запускаются ./bootstrap.py на производственном сервере каждый раз. (bootstrap.py также идет на некоторые длины, чтобы убедиться, что он придерживается Python 2.5, так как это то, что мы имеем на производственных серверах (Ubuntu Hardy) и моей машины для разработки (Ubuntu Karmic) по умолчанию Python 2.6, если вы не осторожны)