В Django ImportError нет модуля с именем x.настройки

#python #django

#python #django

Вопрос:

У меня есть следующая структура:

 mysite
  -> manage.py
  -> mysite (again)
        -> __init__.py
        -> wsgi.py
        -> settings.py
         etc
  -> myapp
        -> __init__.py            
        -> myscript.py
        -> models.py
        etc
  

Когда я запускаю скрипт из myapp (который выполняет связанные с myapp действия, например, помещая данные в базу данных), мне нужно сделать

 import django
django.setup()
  

для того, чтобы иметь возможность from models import MyModel . Но если я сделаю это в каталоге myapp, я получу:

 Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:Python27libsite-packagesdjango__init__.py", line 22, in setup
    configure_logging(settings.LOGGING_CONFIG, settings.LOGGING)
  File "C:Python27libsite-packagesdjangoconf__init__.py", line 53, in __getattr__
    self._setup(name)
  File "C:Python27libsite-packagesdjangoconf__init__.py", line 41, in _setup
    self._wrapped = Settings(settings_module)
  File "C:Python27libsite-packagesdjangoconf__init__.py", line 97, in __init__
    mod = importlib.import_module(self.SETTINGS_MODULE)
  File "C:Python27libimportlib__init__.py", line 37, in import_module
    __import__(name)
ImportError: No module named mysite.settings
  

Что я вроде понимаю, поскольку он находится дальше по дереву каталогов, а не в том же каталоге, что и, например, manage.py (корень, я полагаю?). Когда я запускаю интерпретатор python в mysite, где manage.py находится, я не получаю эту ошибку.

Что я должен сделать, чтобы иметь возможность размещать свои скрипты в myapp и при этом иметь возможность использовать django.setup() из этого каталога?

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

1. Вы пытаетесь использовать ‘.’ перед from models import MyModel модели должны быть .models import MyModel

2. Если вы используете Django и вам нужно запустить некоторые сценарии в контексте вашего приложения, вам следует использовать команды управления: docs.djangoproject.com/en/1.10/howto/custom-management-commands

Ответ №1:

Вам нужно убедиться, что корень вашего проекта находится в пути python при запуске скрипта. Что-то вроде этого может помочь.

импортировать ОС 
импортировать систему 
projpath = os.path.dirname(__file__) 
sys.path.append(os.path.join(projpath, '..'))