Пример 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