Установленные приложения в Django - как насчет версий? - PullRequest
1 голос
/ 09 июня 2009

После просмотра главы, посвященной повторно используемым приложениям в Practical Django Projects и прослушивания лекции DjangoCon (Pycon?), Кажется, что делается акцент на том, чтобы сделать ваши приложения подключаемыми, установив их в путь Python, а именно на пакеты сайтов.

Чего я не понимаю, так это того, что происходит, когда изменяется версия одного из установленных приложений. Если я обновлю одно из приложений, установленных на пакетах сайта, то не сломает ли это все мои текущие проекты, которые его используют? Я никогда не замечал ничего в settings.py, чтобы вы указали версию импортируемого приложения.

Я думаю, что в Ruby / Rails они могут заморозить гемы для такой ситуации. Но что мы должны делать в Python / Django?

Ответы [ 3 ]

5 голосов
/ 09 июня 2009

Наличие нескольких версий одного и того же пакета становится беспорядочным (однако, это может сделать setuptools).

Мне показалось более понятным поместить каждый проект в свой virtualenv. Мы используем virtualevwrapper для легкого управления virtualenvs и опцию --no-site-packages, чтобы сделать каждый проект действительно автономным и переносимым между компьютерами.

Это рекомендуемая настройка для серверов mod_wsgi .

0 голосов
/ 09 июня 2009

Что мы делаем.

Мы помещаем только сторонние материалы в пакеты сайтов. Django, XLRD, PIL и др.

Мы сохраняем наш общий проект структурированным как набор пакетов и проектов Django. Каждый проект является частью общего сайта. У нас есть два отдельных поведения для порта 80 и порта 443 (SSL).

OverallProject/

    aPackage/
    anotherPackage/

    djangoProject80/
        settings.py
        logging.ini
        app_a_1/
            models.py # app a, version 1 schema
        app_a_2/
            models.py # app a, version 2 schema
        app_b_2/
            models.py
        app_c_1/
            models.py

    djangoProject443/

    test/
    tool/

Мы используем номер версии как часть названия приложения. Это основной номер версии, который связан со схемой, поскольку «использует-же-схему» является одним из определений совместимости основного выпуска.

Вы должны перенести данные и доказать, что все работает в новой версии. Затем вы можете удалить старую версию и удалить схему из базы данных. Перенос данных является сложной задачей, поскольку вы не можете запускать оба приложения одновременно.

В большинстве приложений установлена ​​только одна текущая версия.

0 голосов
/ 09 июня 2009

Вы определенно не хотите помещать свои приложения Django в пакеты сайтов, если у вас более одного сайта Django.

Лучший способ, как ответил Кен Арнольд, это использовать virtualenv (Virtual Python Environment Builder) Иана Бикинга. Это особенно верно, если вам нужно запустить несколько версий Django.

Однако, если вы можете запустить одну версию Python и Django, то, возможно, будет немного проще просто установить приложения в каталог вашего проекта. Таким образом, если внешнее приложение обновляется, вы можете обновлять каждый из ваших проектов по одному, как считаете нужным. Это структура Pinax , которая когда-то использовалась для внешних приложений Django, но я думаю, что теперь она использует virtualenv + pip (вместо setuptools / distutils).

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