2009-12-28 49 views
3

我想安裝乾草堆與whoosh後端。當我嘗試創該指數[或任何爲此事指數命令]我收到:乾草堆/飛快移動指數生成錯誤

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) 
+0

什麼的Python和嗖嗖的版本? – Tom 2009-12-28 20:23:22

+0

請發佈完整的回溯和search_indexes.py的內容。已發佈 – 2009-12-28 20:36:32

+0

。謝謝!我還包括一個稍微修改過的消息。 – 2009-12-28 22:39:18

回答

1

好像有你正在運行到兩個問題。

第一個是生成TypeError的那個。它發生在Haystack通過INSTALLED_APPS中列出的每個應用搜索search_indexes.py(因爲您正在自動註冊)。我不確定問題到底是什麼,但是我會先從您的項目中搜索from list開始,然後仔細檢查您的代碼。我之前沒有遇到過這種例外情況,但是如果發生在你寫的代碼中,你應該在你的問題中發佈任何相關部分

我相信你在使用或不使用search_indexes.py文件時得到相同錯誤的原因是因爲它從來沒有達到試圖執行該文件中的代碼的地步。

這就是說,應該有更多的事情發生在該文件中(這是第二個問題)。您必須創建一個索引類(從haystack.indexes.SearchIndex繼承)並將其註冊到模型中。有關說明和示例,請參見this section of the documentation

我也會在django-haystack Google Group中問這個問題,因爲作者和乾草堆的其他用戶會在那裏看到它,他們往往是非常有幫助的。

+0

謝謝!我已經通過完全繞過search_indexes.py並將所有內容放在search_sites.py中來實現它。我仍然試圖追查確切的問題,在這一點上,我一定會在這裏發佈。 再次感謝您的幫助! – 2009-12-29 03:03:26

8

我剛剛遇到了與完全不同的堆棧相同的TypeError消息。

對整個錯誤信息的搜索提出了兩個結果:這個問題以及Python import.c的源代碼。 因此,經過一點挖掘,我發現這個特定的錯誤是由於__import__內建函數傳入一個不是字符串的導入名稱造成的。

重要的詞有字符串 - 即。一個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的不同。

+0

令人敬畏的工作!我以與你一樣的隨機方式遇到了這個問題......在SO上搜索這個錯誤字符串只會提出這個問題。將我的unicode鑄造成一個精美的作品。 – 2011-12-19 22:41:47

+0

剛想把我從這個相同的Unicode進口問題的頭髮,今晚 - 謝謝你,給予好評! – eCaroth 2012-01-24 05:19:14

1

昨晚我碰到了同樣的錯誤,在那是以前工作的5分鐘內沒有任何種類的任何修改代碼庫。 就在我通過我的git repo時,以前工作的代碼導致了相同的錯誤。 我把我的unicode值轉換爲字符串,並且解決了問題,但沒有解決根本原因。

所以我想通了,如果:

  1. 它不是來自我的代碼
  2. 它是在Python函數提出進口
  3. 既不是我的Python也不代碼基礎已經改變

問題必須是在位代碼。我刪除了我的應用程序中的每個.pyc和.pyo文件。錯誤消失了。

刪除.py-文件:

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

在我的情況下,發生這種情況後,我升級我的Django tastypie到v0.10。作爲Py3移植工作的一部分,from __future__ import unicode_literals被添加到遷移的頂部。

評論說,線路輸出每個tastypie遷移文件後,我的遷移已經運行正常。

我感到不解的是,tastypie遷移昨日OK跑新版本tastypie(在一個單獨的項目共享相同的virtualenv)的事實。這是另一天的一個謎。