J'ai un script Python qui utilise l'analyseur de date en langage naturel Natty. Natty lui-même est écrit en Java mais enveloppé pour son utilisation en Python en utilisant Jpype. Le script fonctionne parfaitement bien sur ma machine de développement, mais renvoie une erreur de segmentation sur la machine de production:Erreur de segmentation lors de l'importation d'un module en Python
>>> import natty
Segmentation fault (core dumped)
Sur deux machines, en utilisant pip freeze
je reçois la même version des modules pertinents:
...
JPype==0.5.4.2
JPype1==0.6.1
...
natty==0.2.4
...
sur les deux machines , je lance les mêmes versions de Python
>>> import sys
>>> print (sys.version)
2.7.12 (default, Nov 19 2016, 06:48:10)
[GCC 5.4.0 20160609]
Sur les deux
machines, JAVA_HOME
est réglé sur la même valeur
>echo $JAVA_HOME
/usr/lib/jvm/java-8-oracle
En bref, je ne peux pas repérer les différences évidentes. J'ai trouvé ce Stackoverflow thread qui énumère les causes des défauts de segmentation, mais cela ne m'a pas vraiment aidé. Je suppose que c'est un code Java enveloppé avec Jpype, mais c'est juste une supposition.
Comment puis-je rechercher cette erreur?
EDIT:gdb python
me donne ce qui suit à mettre
(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
ne contient import natty
La vérification des dépendances installées est la même sur le développement et la production. – rkatkam
Pouvez-vous être un peu plus précis? Natty (paquet python) a seulement deux dépendances, 'JPype1' et' python-dateutil'. Les deux sont les mêmes et les dernières versions sur les deux machines. Ou référez-vous le fichier Natty JAR? Quand je vérifie [https://github.com/joestelmach/natty/blob/master/pom.xml](https://github.com/joestelmach/natty/blob/master/pom.xml) je vois un couple de dépendances, mais je ne sais pas comment procéder avec ça. – Christian