Вопрос

Я пытаюсь настроить столик сена с бэкэнд. Когда я пытаюсь получить индекс [или любую индексную команду в этом отношении] я получаю:

TypeError: Item in ``from list'' not a string

Если я полностью удалю свой search_indexes.py, я получу одинаковую ошибку [так что я предполагаю, что он вообще не найдет этот файл

Что может вызвать эту ошибку? Он настроен на автоматическое обнаружение, и я уверен, что мое приложение установлено, потому что я в настоящее время использую его.

Полный след:

    Traceback (most recent call last):
  File "./manage.py", line 17, in <module>
    execute_manager(settings)
  File "/Users/ghostrocket/Development/Redux/.dependencies/django/core/management/__init__.py", line 362, in execute_manager
    utility.execute()
  File "/Users/ghostrocket/Development/Redux/.dependencies/django/core/management/__init__.py", line 303, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/Users/ghostrocket/Development/Redux/.dependencies/django/core/management/__init__.py", line 257, in fetch_command
    klass = load_command_class(app_name, subcommand)
  File "/Users/ghostrocket/Development/Redux/.dependencies/django/core/management/__init__.py", line 67, in load_command_class
    module = import_module('%s.management.commands.%s' % (app_name, name))
  File "/Users/ghostrocket/Development/Redux/.dependencies/django/utils/importlib.py", line 35, in import_module
    __import__(name)
  File "/Users/ghostrocket/Development/Redux/.dependencies/haystack/__init__.py", line 124, in <module>
    handle_registrations()
  File "/Users/ghostrocket/Development/Redux/.dependencies/haystack/__init__.py", line 121, in handle_registrations
    search_sites_conf = __import__(settings.HAYSTACK_SITECONF)
  File "/Users/ghostrocket/Development/Redux/website/../website/search_sites.py", line 2, in <module>
    haystack.autodiscover()
  File "/Users/ghostrocket/Development/Redux/.dependencies/haystack/__init__.py", line 83, in autodiscover
    app_path = __import__(app, {}, {}, [app.split('.')[-1]]).__path__
TypeError: Item in ``from list'' not a string

и вот мой search_indexes.py

from haystack import indexes
from haystack import site
from myproject.models import *

site.register(myobject)
Это было полезно?

Решение

Кажется, что вы сталкиваетесь с двумя проблемами.

Первый - это тот, который генерирует TypeError. Анкет Это происходит, когда Haystack ищет каждое приложение, в котором вы перечислены INSTALLED_APPS для search_indexes.py (так как вы автоматически регистрируете). Я не уверен, в чем проблема, но я бы начал с поиска в вашем проекте для from list и двойной проверка вашего кода. Я не сталкивался с этим исключением раньше, но если это происходит в коде, который вы написали, вы должны опубликовать какие -либо соответствующие разделы в своем вопросе

Я полагаю, что причина, по которой вы получаете ту же ошибку с или без файла search_indexes.py, заключается в том, что он никогда не достигает точки попытки выполнить код в этом файле.

Тем не менее, в этом файле должно быть больше (что является второй проблемой). Вы должны создать класс индекса (который наследует от haystack.indexes.searchindex) и зарегистрировать его с помощью модели. Видеть этот раздел документации Для инструкций и примера.

Я также задал этот вопрос в Django-Haystack Google Group Поскольку автор и другие пользователи Hay Stack увидят его там, и они, как правило, чрезвычайно полезны.

Другие советы

Я только что столкнулся с одним и тем же сообщением TypeError с совершенно другим стеком.

Поиск по всему сообщению об ошибке привел к двум результатам: этот вопрос и исходный код для Python's Import.c. Итак, после небольшого копания я обнаружил, что эта конкретная ошибка вызвана, когда __import__ Builtin передается импортному имени, которое не является строкой.

Важное слово есть нить - т.е. а str объект. Все остальное (например. unicode) будет отклонен с помощью ошибки, описанной здесь.

Таким образом, решение: где бы вы ни передали модуль/имя члена, что динамически импортирует его, убедитесь, что это str а не unicode.

Терпит неудачу:

__import__('mylib.foo', globals(), locals(), [u'bar'])

Работа:

__import__('mylib.foo', globals(), locals(), ['bar'])
__import__(u'mylib.foo', globals(), locals(), ['bar'])

Конечно, это, вероятно, имеет отношение только к Python 2.x, учитывая, что 3.x делает строки/Unicode по -разному.

В моем случае это произошло после того, как я обновил свой Django-Tastypie до V0.10. В рамках усилий по портированию PY3, from __future__ import unicode_literals был добавлен к вершине миграций.

Комментируя эту строку в каждом из файлов миграции Tastypie, мои миграции работали OK.

Что я нахожу загадочным, так это тот факт, что вчера миграции Tastypie работали вчера с новой версией Tastypie (в отдельном проекте, который разделяет тот же VirtualEnv). Это загадка для другого дня.

Прошлой ночью я столкнулся с той же ошибкой на кодовой базе, которая работала за 5 минут до каких -либо изменений. Насколько я прошел через свой репо, код, который работал ранее, вызвал ту же ошибку. Я отдал свое значение Unicode в строку, и это удалило проблему, но не решил основную причину.

Поэтому я понял это, если:

  1. это не исходило из моего кода
  2. он был поднят в функции Python импорт
  3. Ни мой питон, ни кодовая база не изменились

Проблема должна была быть в битовом коде. Я удалил каждый файл .pyc и .pyo в своем приложении. И ошибка исчезла.

Удаление файлов .py-:

find . -name "*.pyc" -exec rm -f {} \;
find . -name "*.pyo" -exec rm -f {} \;
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top