Ошибка сегментации при импорте модуля в Python

У меня есть скрипт на Python, который использует синтаксический анализатор дат на естественном языке Natty. Сам Natty написан на Java, но упакован для использования в Python с использованием Jpype. Сценарий прекрасно работает на моей машине для разработки, но выдает ошибку сегментации на рабочей машине:

>>> import natty
Segmentation fault (core dumped)

На обеих машинах, используя pip freeze Я получаю ту же версию соответствующих модулей:

...
JPype==0.5.4.2
JPype1==0.6.1
...
natty==0.2.4
...

На обеих машинах я запускаю одинаковые версии 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

Короче говоря, я не могу заметить каких-либо очевидных различий. Я нашел этот поток Stackru, в котором перечислены причины ошибок сегментации, но он мне не очень помог. Я как бы предполагаю, что это Java-код, упакованный с использованием Jpype, но это только предположение.

Как я могу выследить эту ошибку?

РЕДАКТИРОВАТЬ: 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

1 ответ

Решение: Мне пришлось обновить ядро ​​моей установки Ubuntu на производственном компьютере.

Я заметил, что Jpype уже вызвал проблему

>>> import jpype  
>>> jpype.startJVM(jpype.getDefaultJVMPath())  
Segmentation fault

Поиск этой проблемы привел меня к этой теме Stackru и включенной ссылке на тему AskUbuntu. Ядро на рабочей машине было 4.4.0-81-generic, если ядро ​​упоминалось там. После обновления до 4.10.0-32-generic теперь все работает нормально.

Другие вопросы по тегам