Как устранить ошибку ImportError при работе с базовой настройкой графена django с помощью учебника?

Я начал работать с graphene_django. учебник для базовой настройки с использованием Django и GraphQL.

Однако я не могу двигаться дальше из-за ошибки импорта:

ImportError at /graphql
Could not import 'cookbook.schema.schema' for Graphene setting 'SCHEMA'. ImportError: No module named schema.
Request Method: GET
Request URL:    http://127.0.0.1:8000/graphql
Django Version: 1.11.2
Exception Type: ImportError
Exception Value:    
Could not import 'cookbook.schema.schema' for Graphene setting 'SCHEMA'. ImportError: No module named schema.
Exception Location: /home/mackie/Code/graphene_django_tutorial/env/local/lib/python2.7/site-packages/graphene_django/settings.py in import_from_string, line 78
Python Executable:  /home/mackie/Code/graphene_django_tutorial/env/bin/python
Python Version: 2.7.12
Python Path:    
['/home/mackie/Code/graphene_django_tutorial/cookbook',
 '/home/mackie/Code/graphene_django_tutorial/env/lib/python2.7',
 '/home/mackie/Code/graphene_django_tutorial/env/lib/python2.7/plat-x86_64-linux-gnu',
 '/home/mackie/Code/graphene_django_tutorial/env/lib/python2.7/lib-tk',
 '/home/mackie/Code/graphene_django_tutorial/env/lib/python2.7/lib-old',
 '/home/mackie/Code/graphene_django_tutorial/env/lib/python2.7/lib-dynload',
 '/usr/lib/python2.7',
 '/usr/lib/python2.7/plat-x86_64-linux-gnu',
 '/usr/lib/python2.7/lib-tk',
 '/home/mackie/Code/graphene_django_tutorial/env/local/lib/python2.7/site-packages',
 '/home/mackie/Code/graphene_django_tutorial/env/lib/python2.7/site-packages']
Server time:    Sun, 4 Jun 2017 16:29:46 +0000

Вы можете увидеть текущее состояние кода здесь в минимальном репозитории.

Я думаю, что моя проблема как-то связана с тем, как я запускаю сервер: python3 manage.py runserver. Или, может быть, как я импортирую. Но я не знаю, как дальше отлаживать отсюда.

Все именно так, как указано в учебнике, и ничего особенно неправильного мне не кажется. Я также использую Linux с virtualenv, если это имеет значение.

Дайте мне знать, если вам нужна дополнительная информация, я буду внимательно следить за темой.

EDIT: приносим извинения! Я запускал его с python3 и python 2.7, ни один из них не работал. Вот след:

Environment:


Request Method: GET
Request URL: http://127.0.0.1:8000/graphql

Django Version: 1.10.6
Python Version: 2.7.12
Installed Applications:
['django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'graphene_django',
 'ingredients']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware']



Traceback:

File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/exception.py" in inner
  42.             response = get_response(request)

File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py" in _get_response
  187.                 response = self.process_exception_by_middleware(e, request)

File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py" in _get_response
  185.                 response = wrapped_callback(request, *callback_args, **callback_kwargs)

File "/usr/local/lib/python2.7/dist-packages/django/views/generic/base.py" in view
  62.             self = cls(**initkwargs)

File "/usr/local/lib/python2.7/dist-packages/graphene_django/views.py" in __init__
  70.             schema = graphene_settings.SCHEMA

File "/usr/local/lib/python2.7/dist-packages/graphene_django/settings.py" in __getattr__
  116.             val = perform_import(val, attr)

File "/usr/local/lib/python2.7/dist-packages/graphene_django/settings.py" in perform_import
  60.         return import_from_string(val, setting_name)

File "/usr/local/lib/python2.7/dist-packages/graphene_django/settings.py" in import_from_string
  78.         raise ImportError(msg)

Exception Type: ImportError at /graphql
Exception Value: Could not import 'cookbook.schema.schema' for Graphene setting 'SCHEMA'. ImportError: No module named schema.

person Mackie Drew    schedule 04.06.2017    source источник
comment
Не имеет смысла говорить, что вы запускаете python3 manage.py runserver, но ошибка показывает Python 2.7. Вы не показали полную трассировку, которая покажет, где происходит сбой импорта.   -  person Alasdair    schedule 04.06.2017
comment
Извиняюсь! Я запускал его в обоих случаях, я добавил полную трассировку в исходный пост.   -  person Mackie Drew    schedule 04.06.2017


Ответы (2)


GRAPHENE = {
    'SCHEMA': 'cookbook.schema.schema'
}

Чтобы cookbook.schema можно было импортировать, вам нужно поместить schema.py во внутренний каталог cookbook (тот, который содержит settings.py). На данный момент он у вас есть во внешнем каталоге cookbook (тот, который содержит manage.py). Чтобы импортировать его из внешнего каталога, вам нужно 'schema.schema' в настройках.

Аналогичная путаница возникает, когда в учебнике говорится добавить 'ingredients' к параметру INSTALLED_APPS (предполагается, что он должен находиться во внешнем каталоге cookbook), но код включает импорт, например from cookbook.ingredients.models import ... (предполагается, что ingredients должен находиться во внутреннем каталоге cookbook).

Вы можете попробовать переместить каталоги schema.py и ingredients во внутренний каталог cookbook и изменить запись в INSTALLED_APPS на 'cookbook.ingredients', как в этот репозиторий.

person Alasdair    schedule 04.06.2017
comment
Вы были абсолютно правы, в учебнике есть несколько опечаток, которые ведут меня по безумному пути отладки. Большое спасибо! Любой, у кого в будущем возникнут проблемы с учебником, просматривает этот раздел репозитория: github.com/graphql-python/graphene-django/tree/master/examples/ - person Mackie Drew; 04.06.2017
comment
Первая часть этого ответа кажется неверной. Я все еще получаю сообщение об ошибке со ссылкой на схему как `cookbook.schema.schema' и файл schema.py во внутреннем каталоге поваренной книги. - person Chad Van De Hey; 17.04.2018

Выполнить эту строку

pip install graphene_django
person Suraj Verma    schedule 16.10.2019