Пример manage.py. Решение ошибки "check for SOUTH_DATABASE_ADAPTER[S] settings"

20 ноября 2016 г. 8:51

Известно, что начиная с Django 1.7 нет необходимости подключать South, так как в Django 1.7 добавили встроенную систему миграций. Но иногда при установке зависимостей какие-то зависимости всё ещё тянут за собой приложение South. И когда пытаешься запустить своё приложение, то debug ругается:

There is no South database module 'south.db.postgresql_psycopg2' for your database. Please either choose a supported database, check for SOUTH_DATABASE_ADAPTER[S] settings, or remove South from INSTALLED_APPS.

Отсюда видно, что South предлагает добавить параметр SOUTH_DATABASE_ADAPTERS, например так:

SOUTH_DATABASE_ADAPTERS = {
    'default': "south.db.postgresql_psycopg2"
}

Но к сожалению, это у меня данный параметр почему-то не работает. Тогда я пошёл другим путём: добавил команду удаления South после команды сборки requirements.

Мой рабочий manage.py:

from os.path import join, exists, abspath, dirname
import os
import sys
import subprocess
import shutil

PROJECT_ROOT = abspath(dirname(__file__))
REQUIREMENTS = join(PROJECT_ROOT, 'requirements.txt')

VE_ROOT = join(PROJECT_ROOT, 'env')


def go_to_ve():
    # going into ve
    if not sys.prefix == VE_ROOT:
        if sys.platform == 'win32':
            python = join(VE_ROOT, 'Scripts', 'python.exe')
        else:
            python = join(VE_ROOT, 'bin', 'python')

        retcode = subprocess.call([python, __file__] + sys.argv[1:])
        sys.exit(retcode)

delete_ve = 'delete_ve' in sys.argv
if delete_ve:
    if exists(VE_ROOT):
        print 'Deleting env...'
        shutil.rmtree(VE_ROOT)
        print 'Done.'
        sys.exit(0)

update_ve = 'update_ve' in sys.argv
if update_ve:
    # install ve
    if not exists(VE_ROOT):
        import virtualenv
        print 'Creating virtualenv...'
        virtualenv.logger = virtualenv.Logger(consumers=[])
        virtualenv.create_environment(VE_ROOT, site_packages=False)
        print 'Done.'

    go_to_ve()
    # check requirements
    import pip
    pip.main(['install', '-r', REQUIREMENTS])
    pip.main(['uninstall', 'South', '--yes'])
    sys.exit(0)

if exists(VE_ROOT):
    go_to_ve()
    # print 'Found virtualenv. Entering...'

try:
    import settings
except ImportError:
    import sys
    sys.stderr.write(
        "Error: Can't find the file 'settings.py' in the directory")
    sys.exit(1)

if __name__ == "__main__":
    if not delete_ve:
        os.environ.setdefault("DJANGO_SETTINGS_MODULE", "settings")

        from django.core.management import execute_from_command_line
        execute_from_command_line(sys.argv)

Работает! Немного костыльно, но работает.

Оцените статью

0 из 5 (всего 0 оценок)

Поля, отмеченные звёздочкой ( * ) , являются обязательными.

Спасибо за ваш отзыв!

После нажатия кнопки "Отправить" ваше сообщение будет доставлено мне на почту.

Автор статьи

Права на использование материала, расположенного на этой странице http://vivazzi.pro/it/check-for-south-database-adapters/:

Разрешается копировать материал с указанием её автора и ссылки на оригинал без использования параметра rel="nofollow" в теге <a>. Использование:

Автор статьи: Мальцев Артём
Ссылка на статью: <a href="http://vivazzi.pro/it/check-for-south-database-adapters/">http://vivazzi.pro/it/check-for-south-database-adapters/</a>

Подробнее: Правила использования сайта

Комментариев: 0

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

Чтобы оставить комментарий от своего имени войдите или зарегистрируйтесь обычным способом или через социальные сети:

Отправить

На данный момент нет специального поиска, поэтому я предлагаю воспользоваться обычной поисковой системой, например, Google, добавив "vivazzi" после своего запроса.

Попробуйте