gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 18:19:52 25 4
gpt4 key购买 nike

我有一个使用自然语言日期解析器的 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

简而言之,我无法发现任何明显的差异。我找到了这个 Stackoverflow thread列出了段错误的原因,但它并没有真正帮助我。我假设它是使用 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

最佳答案

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

我注意到 Jpype 已经引起了问题

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

搜索这个问题让我找到了这个 Stackoverflow thread以及指向 AskUbuntu thread 的链接.生产机器上的内核是 4.4.0-81-generic,如果那里提到内核的话。更新到 4.10.0-32-generic 后,现在一切正常。

关于python - 在 Python 中导入模块时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45810155/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com