Ошибка генерации индекса сено
-
21-09-2019 - |
Вопрос
Я пытаюсь настроить столик сена с бэкэнд. Когда я пытаюсь получить индекс [или любую индексную команду в этом отношении] я получаю:
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 в строку, и это удалило проблему, но не решил основную причину.
Поэтому я понял это, если:
- это не исходило из моего кода
- он был поднят в функции Python импорт
- Ни мой питон, ни кодовая база не изменились
Проблема должна была быть в битовом коде. Я удалил каждый файл .pyc и .pyo в своем приложении. И ошибка исчезла.
Удаление файлов .py-:
find . -name "*.pyc" -exec rm -f {} \;
find . -name "*.pyo" -exec rm -f {} \;