8

neo4j に django 統合を使用していますが、ノードを作成しようとすると、次のトレースバックが表示されます。
JPype がインストールされていて、インポートできます。

 p = Person.objects.create(first_name='omer', last_name='katz')
Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/usr/local/lib/python2.7/dist-packages/django/db/models/manager.py", line 138, in create
    return self.get_query_set().create(**kwargs)
  File "/usr/local/lib/python2.7/dist-packages/Neo4j.py-0.1_SNAPSHOT-py2.7.egg/neo4j/model/django_model/__init__.py", line 362, in create
    obj.save(force_insert=True)
  File "/usr/local/lib/python2.7/dist-packages/django/db/models/base.py", line 460, in save
    self.save_base(using=using, force_insert=force_insert, force_update=force_update)
  File "/usr/local/lib/python2.7/dist-packages/Neo4j.py-0.1_SNAPSHOT-py2.7.egg/neo4j/_util.py", line 47, in __get__
    method, graphdb = self.descr_get(obj, cls)
  File "/usr/local/lib/python2.7/dist-packages/Neo4j.py-0.1_SNAPSHOT-py2.7.egg/neo4j/_util.py", line 41, in descr_get
    graphdb = self.accessor.__get__(obj, cls)
  File "/usr/local/lib/python2.7/dist-packages/Neo4j.py-0.1_SNAPSHOT-py2.7.egg/neo4j/model/django_model/__init__.py", line 58, in __get__
    return DjangoNeo.neo
  File "/usr/local/lib/python2.7/dist-packages/Neo4j.py-0.1_SNAPSHOT-py2.7.egg/neo4j/model/django_model/__init__.py", line 124, in neo
    return self.__setup_neo()
  File "/usr/local/lib/python2.7/dist-packages/Neo4j.py-0.1_SNAPSHOT-py2.7.egg/neo4j/model/django_model/__init__.py", line 136, in __setup_neo
    self.__neo = NeoService(resource_uri, **options)
  File "/usr/local/lib/python2.7/dist-packages/Neo4j.py-0.1_SNAPSHOT-py2.7.egg/neo4j/__init__.py", line 522, in __new__
    neo = core.load_neo(resource_uri, params)
  File "/usr/local/lib/python2.7/dist-packages/Neo4j.py-0.1_SNAPSHOT-py2.7.egg/neo4j/_core.py", line 180, in load_neo
    backend.initialize(**parameters)
  File "/usr/local/lib/python2.7/dist-packages/Neo4j.py-0.1_SNAPSHOT-py2.7.egg/neo4j/_backend/__init__.py", line 61, in initialize
    raise ImportError("No applicable backend found.")
ImportError: No applicable backend found.

編集:
ここで要求されたように、私のneo4j設定は次のとおりです。

NEO4J_RESOURCE_URI = '/var/neo4j/neo4django'
# NEO4J_RESOURCE_URI should be the path to where
#    you want to store the Neo4j database.

NEO4J_OPTIONS = {
    # this is optional and can be used to specify
    # extra startup parameters for Neo4j, such as
    # the classpath to load Neo4j from.
}

編集:
thobeの提案に従った後、自分のモデルをインポートしようとすると、次のようになります:

    ERROR:root:Importing native backends failed.
    Traceback (most recent call last):
      File "/usr/local/lib/python2.7/dist-packages/Neo4j.py-0.1_SNAPSHOT-py2.7.egg/neo4j/_backend/__init__.py", line 51, in initialize
        embedded, remote = implementation.initialize(classpath, params)
      File "/usr/local/lib/python2.7/dist-packages/Neo4j.py-0.1_SNAPSHOT-py2.7.egg/neo4j/_backend/reflection.py", line 44, in initialize
        jvm = jpype.getDefaultJVMPath()
      File "/usr/local/lib/python2.7/dist-packages/jpype/_core.py", line 96, in getDefaultJVMPath
        return _linux.getDefaultJVMPath()
      File "/usr/local/lib/python2.7/dist-packages/jpype/_linux.py", line 36, in getDefaultJVMPath
        jvm = _getJVMFromJavaHome()
      File "/usr/local/lib/python2.7/dist-packages/jpype/_linux.py", line 55, in _getJVMFromJavaHome
        if os.path.exists(java_home+"/bin/javac") :
    TypeError: unsupported operand type(s) for +: 'NoneType' and 'str'
    ERROR:root:Importing native backends failed.
    Traceback (most recent call last):
      FERROR:root:Importing native backends failed.
    Traceback (most recent call last):
      File "/usr/local/lib/python2.7/dist-packages/Neo4j.py-0.1_SNAPSHOT-py2.7.egg/neo4j/_backend/__init__.py", line 51, in initialize
        embedded, remote = implementation.initialize(classpath, params)
      File "/usr/local/lib/python2.7/dist-packages/Neo4j.py-0.1_SNAPSHOT-py2.7.egg/neo4j/_backend/reflection.py", line 44, in initialize
        jvm = jpype.getDefaultJVMPath()
      File "/usr/local/lib/python2.7/dist-packages/jpype/_core.py", line 96, in getDefaultJVMPath
        return _linux.getDefaultJVMPath()
      File "/usr/local/lib/python2.7/dist-packages/jpype/_linux.py", line 36, in getDefaultJVMPath
        jvm = _getJVMFromJavaHome()
      File "/usr/local/lib/python2.7/dist-packages/jpype/_linux.py", line 55, in _getJVMFromJavaHome
        if os.path.exists(java_home+"/bin/javac") :
    TypeError: unsupported operand type(s) for +: 'NoneType' and 'str'
    ERROR:root:Importing native backends failed.
    Traceback (most recent call last):
      File "/usr/local/lib/python2.7/dist-packages/Neo4j.py-0.1_SNAPSHOT-py2.7.egg/neo4j/_backend/__init__.py", line 51, in initialize
        embedded, remote = implementation.initialize(classpath, params)
      File "/usr/local/lib/python2.7/dist-packages/Neo4j.py-0.1_SNAPSHOT-py2.7.egg/neo4j/_backend/reflection.py", line 44, in initialize
        jvm = jpype.getDefaultJVMPath()
      File "/usr/local/lib/python2.7/dist-packages/jpype/_core.py", line 96, in getDefaultJVMPath
        return _linux.getDefaultJVMPath()
      File "/usr/local/lib/python2.7/dist-packages/jpype/_linux.py", line 36, in getDefaultJVMPath
        jvm = _getJVMFromJavaHome()
      File "/usr/local/lib/python2.7/dist-packages/jpype/_linux.py", line 55, in _getJVMFromJavaHome
        if os.path.exists(java_home+"/bin/javac") :
    TypeError: unsupported operand type(s) for +: 'NoneType' and 'str'
    ERROR:root:Importing native backends failed.
    Traceback (most recent call last):
      File "/usr/local/lib/python2.7/dist-packages/Neo4j.py-0.1_SNAPSHOT-py2.7.egg/neo4j/_backend/__init__.py", line 51, in initialize
        embedded, remote = implementation.initialize(classpath, params)
      File "/usr/local/lib/python2.7/dist-packages/Neo4j.py-0.1_SNAPSHOT-py2.7.egg/neo4j/_backend/reflection.py", line 44, in initialize
        jvm = jpype.getDefaultJVMPath()
      File "/usr/local/lib/python2.7/dist-packages/jpype/_core.py", line 96, in getDefaultJVMPath
        return _linux.getDefaultJVMPath()
      File "/usr/local/lib/python2.7/dist-packages/jpype/_linux.py", line 36, in getDefaultJVMPath
        jvm = _getJVMFromJavaHome()
      File "/usr/local/lib/python2.7/dist-packages/jpype/_linux.py", line 55, in _getJVMFromJavaHome
        if os.path.exists(java_home+"/bin/javac") :
    TypeError: unsupported operand type(s) for +: 'NoneType' and 'str'
    ERROR:root:Importing native backends failed.
    Traceback (most recent call last):
      File "/usr/local/lib/python2.7/dist-packages/Neo4j.py-0.1_SNAPSHOT-py2.7.egg/neo4j/_backend/__init__.py", line 51, in initialize
        embedded, remote = implementation.initialize(classpath, params)
      File "/usr/local/lib/python2.7/dist-packages/Neo4j.py-0.1_SNAPSHOT-py2.7.egg/neo4j/_backend/reflection.py", line 44, in initialize
        jvm = jpype.getDefaultJVMPath()
      File "/usr/local/lib/python2.7/dist-packages/jpype/_core.py", line 96, in getDefaultJVMPath
        return _linux.getDefaultJVMPath()
      File "/usr/local/lib/python2.7/dist-packages/jpype/_linux.py", line 36, in getDefaultJVMPath
        jvm = _getJVMFromJavaHome()
      File "/usr/local/lib/python2.7/dist-packages/jpype/_linux.py", line 55, in _getJVMFromJavaHome
        if os.path.exists(java_home+"/bin/javac") :
    TypeError: unsupported operand type(s) for +: 'NoneType' and 'str'
    ERROR:root:Importing native backends failed.
    Traceback (most recent call last):
      File "/usr/local/lib/python2.7/dist-packages/Neo4j.py-0.1_SNAPSHOT-py2.7.egg/neo4j/_backend/__init__.py", line 51, in initialize
        embedded, remote = implementation.initialize(classpath, params)
      File "/usr/local/lib/python2.7/dist-packages/Neo4j.py-0.1_SNAPSHOT-py2.7.egg/neo4j/_backend/reflection.py", line 44, in initialize
        jvm = jpype.getDefaultJVMPath()
      File "/usr/local/lib/python2.7/dist-packages/jpype/_core.py", line 96, in getDefaultJVMPath
        return _linux.getDefaultJVMPath()
      File "/usr/local/lib/python2.7/dist-packages/jpype/_linux.py", line 36, in getDefaultJVMPath
        jvm = _getJVMFromJavaHome()
      File "/usr/local/lib/python2.7/dist-packages/jpype/_linux.py", line 55, in _getJVMFromJavaHome
        if os.path.exists(java_home+"/bin/javac") :
    TypeError: unsupported operand type(s) for +: 'NoneType' and 'str'

ile "/usr/local/lib/python2.7/dist-packages/Neo4j.py-0.1_SNAPSHOT-py2.7.egg/neo4j/_backend/__init__.py", line 51, in initialize
    embedded, remote = implementation.initialize(classpath, params)
  File "/usr/local/lib/python2.7/dist-packages/Neo4j.py-0.1_SNAPSHOT-py2.7.egg/neo4j/_backend/reflection.py", line 44, in initialize
    jvm = jpype.getDefaultJVMPath()
  File "/usr/local/lib/python2.7/dist-packages/jpype/_core.py", line 96, in getDefaultJVMPath
    return _linux.getDefaultJVMPath()
  File "/usr/local/lib/python2.7/dist-packages/jpype/_linux.py", line 36, in getDefaultJVMPath
    jvm = _getJVMFromJavaHome()
  File "/usr/local/lib/python2.7/dist-packages/jpype/_linux.py", line 55, in _getJVMFromJavaHome
    if os.path.exists(java_home+"/bin/javac") :
TypeError: unsupported operand type(s) for +: 'NoneType' and 'str'
ERROR:root:Importing native backends failed.
Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/Neo4j.py-0.1_SNAPSHOT-py2.7.egg/neo4j/_backend/__init__.py", line 51, in initialize
    embedded, remote = implementation.initialize(classpath, params)
  File "/usr/local/lib/python2.7/dist-packages/Neo4j.py-0.1_SNAPSHOT-py2.7.egg/neo4j/_backend/reflection.py", line 44, in initialize
    jvm = jpype.getDefaultJVMPath()
  File "/usr/local/lib/python2.7/dist-packages/jpype/_core.py", line 96, in getDefaultJVMPath
    return _linux.getDefaultJVMPath()
  File "/usr/local/lib/python2.7/dist-packages/jpype/_linux.py", line 36, in getDefaultJVMPath
    jvm = _getJVMFromJavaHome()
  File "/usr/local/lib/python2.7/dist-packages/jpype/_linux.py", line 55, in _getJVMFromJavaHome
    if os.path.exists(java_home+"/bin/javac") :
TypeError: unsupported operand type(s) for +: 'NoneType' and 'str'
ERROR:root:Importing native backends failed.
Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/Neo4j.py-0.1_SNAPSHOT-py2.7.egg/neo4j/_backend/__init__.py", line 51, in initialize
    embedded, remote = implementation.initialize(classpath, params)
  File "/usr/local/lib/python2.7/dist-packages/Neo4j.py-0.1_SNAPSHOT-py2.7.egg/neo4j/_backend/reflection.py", line 44, in initialize
    jvm = jpype.getDefaultJVMPath()
  File "/usr/local/lib/python2.7/dist-packages/jpype/_core.py", line 96, in getDefaultJVMPath
    return _linux.getDefaultJVMPath()
  File "/usr/local/lib/python2.7/dist-packages/jpype/_linux.py", line 36, in getDefaultJVMPath
    jvm = _getJVMFromJavaHome()
  File "/usr/local/lib/python2.7/dist-packages/jpype/_linux.py", line 55, in _getJVMFromJavaHome
    if os.path.exists(java_home+"/bin/javac") :
TypeError: unsupported operand type(s) for +: 'NoneType' and 'str'
ERROR:root:Importing native backends failed.
Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/Neo4j.py-0.1_SNAPSHOT-py2.7.egg/neo4j/_backend/__init__.py", line 51, in initialize
    embedded, remote = implementation.initialize(classpath, params)
  File "/usr/local/lib/python2.7/dist-packages/Neo4j.py-0.1_SNAPSHOT-py2.7.egg/neo4j/_backend/reflection.py", line 44, in initialize
    jvm = jpype.getDefaultJVMPath()
  File "/usr/local/lib/python2.7/dist-packages/jpype/_core.py", line 96, in getDefaultJVMPath
    return _linux.getDefaultJVMPath()
  File "/usr/local/lib/python2.7/dist-packages/jpype/_linux.py", line 36, in getDefaultJVMPath
    jvm = _getJVMFromJavaHome()
  File "/usr/local/lib/python2.7/dist-packages/jpype/_linux.py", line 55, in _getJVMFromJavaHome
    if os.path.exists(java_home+"/bin/javac") :
TypeError: unsupported operand type(s) for +: 'NoneType' and 'str'
4

3 に答える 3

2

これを NEO4J_OPTIONS に追加すると、バックエンドが見つからなかった理由に関するより詳細な情報を取得できます。

NEO4J_OPTIONS = {
    log: True,
}

そのログからの出力により、実際の問題の診断と修正の提案が容易になります。

于 2011-06-27T12:43:28.530 に答える
1

私は同じ問題に遭遇しました。(Debian で) 何をしても、Python は JAVA_HOME 環境変数を見つけることができませんでした。これを修正する最も簡単な方法は、これを Django のどこかに追加するだけでよいと思いますが、これらの行を追加することです -

java_home = os.getenv("JAVA_HOME")
if(java_home == None):
    os.environ["JAVA_HOME"] = "/usr/lib/jvm/java-6-openjdk"

ここで、パスは使用する JDK の場所です (Java および javac プログラムの後に /bin フォルダーが必要です)。

私が試したのは、場所を /etc/bash.bashrc に追加することでした。私にはうまくいきませんでしたが、あなたにはうまくいくかもしれません。

JAVA_HOME=/usr/lib/jvm/java-6-openjdk
export JAVA_HOME
PATH=$PATH:$JAVA_HOME/bin
export PATH

とにかく、それはあなたを正しい方向に始めるはずです。しかし、今、私は別の関連する問題を抱えており、1週間答えがありません:(

于 2011-07-27T06:11:28.187 に答える
1

あなたのsettings.pyは問題ないようです..

Java SDK がインストールされ、JAVA_HOME 環境変数が JDK に設定されていますか? (Java JRE では不十分)

Neo4j.py ドキュメントから:

状況によっては、JPype コンパイル プロセスが適切な JNI ヘッダーにリンクされず、コンパイル エラーが発生することがあります。最初に注意すべきことは、JPype はビルドするために JDK からの JNI ヘッダーを必要とすることです。JPype をビルドするときに JRE をインストールするだけでは十分ではありません。JPype のビルド時に JAVA_HOME 環境変数が設定されていない場合、JPype のビルド スクリプト (setup.py) が適切な JNI ヘッダーを見つける際に問題が発生する可能性があります。sudo python setup.py install で JPype をビルドしている場合、JAVA_HOME 環境変数を sudo 環境に継承しない可能性があります。簡単な回避策は、インストール前に python setup.py bdist を実行することです。

于 2011-06-22T20:13:42.690 に答える