3

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

これが私のsearch_indexes.pyです

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

site.register(myobject)
4

4 に答える 4

8

スタックがまったく異なる同じTypeErrorメッセージが発生しました。

エラーメッセージ全体を検索すると、この質問とPythonのimport.cのソースコードの2つの結果が表示されました。少し掘り下げてみると、この特定のエラーは、__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'])

もちろん、3.xの文字列/ユニコードの動作が異なることを考えると、これはおそらくPython2.xにのみ関連します。

于 2010-04-21T14:09:43.510 に答える
2

私の場合、これはdjango-tastypieをv0.10にアップグレードした後に発生しました。Py3移植作業の一環としてfrom __future__ import unicode_literals、移行の最上位に追加されました。

各tastypie移行ファイルでその行をコメント化した後、移行は正常に実行されました。

私が困惑しているのは、昨日、新しいtastypieバージョン(同じvirtualenvを共有する別のプロジェクト)でtastypieの移行が正常に実行されたという事実です。それは別の日の謎です。

于 2013-08-08T17:13:17.807 に答える
1

あなたが遭遇している2つの問題があるようです。

1つ目は、それを生成しているものTypeErrorです。INSTALLED_APPSこれは、Haystackがsearch_indexes.pyをリストした各アプリを検索しているときに発生します(自動登録しているため)。問題が正確に何であるかはわかりませんが、プロジェクトを検索してfrom listコードを再確認することから始めます。私は以前にその例外に遭遇したことはありませんが、あなたが書いたコードでそれが起こっている場合は、質問に関連するセクションを投稿する必要があります

search_indexes.pyファイルの有無にかかわらず同じエラーが発生する理由は、そのファイル内のコードを実行しようとするポイントに到達しないためだと思います。

そうは言っても、そのファイルではもっと多くのことが起こっているはずです(これは2番目の問題です)。(haystack.indexes.SearchIndexから継承する)インデックスクラスを作成し、それをモデルに登録する必要があります。手順と例については、ドキュメントのこのセクションを参照してください。

django-haystack Googleグループでもこの質問をします。これは、haystackの作成者や他のユーザーがそこで表示し、非常に役立つ傾向があるためです。

于 2009-12-29T01:55:01.950 に答える
1

私は昨夜、5分前に何も変更せずに機能していたコードベースで、同じエラーに遭遇しました。gitリポジトリを調べた限り、以前は機能していたコードで同じエラーが発生していました。Unicode値を文字列にキャストしましたが、問題は解決しましたが、根本的な原因は解決しませんでした。

だから私はそれを理解しました:

  1. それは私のコードから来たのではありません
  2. Python関数のインポートで発生しました
  3. 私のPythonもコードベースも変更されていません

問題はビットコードにある必要がありました。アプリケーション内のすべての.pycファイルと.pyoファイルを削除しました。そして、エラーはなくなりました。

.py-ファイルの削除:

find . -name "*.pyc" -exec rm -f {} \;
find . -name "*.pyo" -exec rm -f {} \;
于 2013-05-05T12:07:59.823 に答える