繁体   English   中英

在Python中导入模块时出现分段错误

[英]Segmentation fault when importing module in Python

我有一个使用自然语言日期解析器Natty的Python脚本。 Natty本身是用Java编写的,但是它使用Jpype包装在Python中。 该脚本在我的开发机器上完美运行,但在生产机器上抛出了分段错误:

>>> 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

总之,我无法发现任何明显的差异。 我发现这个Stackoverflow线程列出了分段错误的原因,但它并没有真正帮助我。 我有点假设它是使用Jpype包装的Java代码,但这只是猜测。

我怎样才能找到那个错误?

编辑: 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 natty-test.py

解决方案:我必须在生产机器上更新我的Ubuntu安装的内核。

我注意到Jpype已经导致了这个问题

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

搜索此问题将我带到此Stackoverflow线程和包含到AskUbuntu线程的链接。 生产机器上的内核是4.4.0-81通用的,如果内核在那里提到的话。 更新到4.10.0-32-generic之后一切正常。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM