Пример manage.py. Решение ошибки "check for SOUTH_DATABASE_ADAPTER[S] settings"
20 ноября 2016 г. 13: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