自然言語の日付パーサーNattyを使用するPythonスクリプトがあります。 Natty自体はJavaで書かれていますが、PythonでJpypeを使用するためにラップされています。このスクリプトは、私の開発マシン上で完全に正常に動作しますが、本番マシン上でセグメンテーションフォールトをスローします:Pythonでモジュールをインポートする際のセグメンテーションエラー
...
JPype==0.5.4.2
JPype1==0.6.1
...
natty==0.2.4
...
:pip freeze
私は、関連するモジュールの同じバージョンを取得使用して、両方マシンで
>>> import natty
Segmentation fault (core dumped)
マシンの両方で、私は同じPythonのバージョンを実行
>>> import sys
>>> print (sys.version)
2.7.12 (default, Nov 19 2016, 06:48:10)
[GCC 5.4.0 20160609]
両方上のマシン、JAVA_HOME
は要するに
>echo $JAVA_HOME
/usr/lib/jvm/java-8-oracle
同じ値に設定されている、私は、任意の明らかな違いを見つけることができません。私はこれを見つけましたStackoverflow threadセグメンテーションフォールトの原因を記載していますが、実際には役に立たなかった。私はそれがJpypeを使ってラップされたJavaコードだと考えていますが、それは単なる推測です。
どうすればそのエラーを見つけられますか?
EDIT
:gdb python
が出て、次の (gdb) run ~/tmp/natty-test.py
Starting program: /usr/bin/python ~/tmp/natty-test.py
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
Program received signal SIGSEGV, Segmentation fault.
0x00007fffe48bf2b4 in ??()
(gdb) backtrace
#0 0x00007fffe48bf2b4 in ??()
#1 0x0000000000000246 in ??()
#2 0x00007fffe48bf160 in ??()
#3 0x00007ffff5901990 in VM_Operation::_names()
from /usr/lib/jvm/java-8-oracle/jre/lib/amd64/server/libjvm.so
#4 0x00007fffffffcf90 in ??()
#5 0x00007ffff543168d in VM_Version::get_processor_features()()
from /usr/lib/jvm/java-8-oracle/jre/lib/amd64/server/libjvm.so
Backtrace stopped: previous frame inner to this frame (corrupt stack?)
natty-test.py
を置くだけimport natty
インストールされている依存関係が開発と運用で同じかどうかを確認します。 – rkatkam
少し具体的になりますか? Natty(pythonパッケージ)には、 'JPype1'と' python-dateutil'という2つの依存関係しかありません。両方とも同じで、両方のマシンの最新バージョンです。またはNatty JARファイルを参照していますか? [https://github.com/joestelmach/natty/blob/master/pom.xml](https://github.com/joestelmach/natty/blob/master/pom.xml)にチェックを付けると、私はそれをどのように進めるべきか分かりません。 – Christian