代码之家  ›  专栏  ›  技术社区  ›  Keith Fitzgerald

草堆/草堆索引生成错误

  •  3
  • Keith Fitzgerald  · 技术社区  · 16 年前

    我正在尝试用whoosh后端设置haystack。当我尝试生成索引[或任何与此相关的索引命令]时,我收到:

    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
    

    这是我的搜索索引.py

    from haystack import indexes
    from haystack import site
    from myproject.models import *
    
    site.register(myobject)
    
    4 回复  |  直到 13 年前
        1
  •  1
  •   John Debs    16 年前

    你好像遇到了两个问题。

    第一个就是产生这个的那个 TypeError . 它发生在Haystack搜索你列出的每个应用程序时。 INSTALLED_APPS 搜索“indexes.py”(因为您正在自动注册)。我不确定到底是什么问题,但我会先在你的项目中搜索 from list 再次检查你的代码。我以前没有遇到过这个例外,但是如果这发生在你写的代码中,你应该在你的问题中发布任何相关的部分。

    我认为,使用或不使用search_indexes.py文件时出现相同错误的原因是,它从未达到尝试执行该文件中代码的程度。

    也就是说,应该在该文件中发生更多的事情(这是第二个问题)。您必须创建一个索引类(从haystack.indexes.searchindex继承)并将其注册到模型中。见 this section of the documentation 以获取说明和示例。

    我也会在 django-haystack Google Group 因为Haystack的作者和其他用户会在那里看到它,他们往往会非常有帮助。

        2
  •  8
  •   Romløk    16 年前

    我刚刚遇到了相同的类型错误消息和完全不同的堆栈。

    对整个错误消息的搜索产生了两个结果:这个问题和python的import.c的源代码。 因此,经过一点挖掘,我发现这个特定的错误是由 __import__ 向内置传递的导入名称不是字符串。

    重要的是 一串 -一个 str 对象。其他的(如 unicode )将被拒绝,并出现此处描述的错误。

    因此,解决方案是:无论您将模块/成员名称传递给将动态导入它的对象,请确保它是 STR 而不是 统一码 .

    失败:

    __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的处理方式不同。

        3
  •  2
  •   Ngure Nyaga    13 年前

    在我的例子中,这发生在我将Django Tastypie升级到v0.10之后。作为PY3移植工作的一部分, from __future__ import unicode_literals 被添加到迁移的顶部。

    在评论了每个tastypie迁移文件中的行之后,我的迁移运行正常。

    让我感到困惑的是,Tastypie迁移昨天与新的Tastypie版本(在共享同一个virtualenv的单独项目中)运行正常。这又是一个谜。

        4
  •  1
  •   Jens Erat    13 年前

    我昨晚在一个代码库中遇到了同样的错误,这个代码库在5分钟前运行,没有任何修改。 在我完成Git报告的过程中,以前工作的代码导致了相同的错误。 我将Unicode值强制转换为字符串,它消除了问题,但没有解决根本原因。

    所以我发现如果:

    1. 不是我的密码
    2. 它是在python函数中引发的 进口
    3. 我的python和代码库都没有改变

    问题必须在位代码中。我删除了我的应用程序中的所有.pyc和.pyo文件。错误就消失了。

    删除.py文件:

    find . -name "*.pyc" -exec rm -f {} \;
    find . -name "*.pyo" -exec rm -f {} \;