2014-10-03 96 views
0

最近,在Centos 6上使用python 2.6.6导入smtplib和psycopg2时,我已经开始出现分段错误。它只会在smtplib之前导入psycopg2。在psycopg2之后导入smtplib时出现分段错误

例如,这工作得很好:

import smtplib 
import psycopg2 

这将导致分段错误:

import psycopg2 
import smtplib 

要尝试调试,我安装faulthandler跑这样的:

import faulthandler 
faulthandler.enable() 
import psycopg2 
import smtplib 

当我运行这个,我得到以下输出:

Fatal Python error: Segmentation fault 
Current thread 0xb7714940 (most recent call first): 
File "/usr/lib/python2.6/socket.py", line 50 in <module> 
File "/usr/lib/python2.6/smtplib.py", line 44 in <module> 
File "testpython.py", line 6 in <module> 
Segmentation fault 

这指向socket.py作为罪犯。我看着第50行,它只是导入_ssl。为了进一步调试,我跑了这一点:

import psycopg2 
import _ssl 

它还分段错误以同样的方式,所以在导入psycopg2后_ssl进口的问题,但我不能确定如何纠正它。我尝试重新安装psycopg2,然后卸载它并使用pip进行安装,但问题仍然存在。任何帮助解决这个问题将不胜感激。

+0

您正在使用Python 2.6,请尝试升级以查看问题是否仍然存在。 – 2014-10-04 10:43:54

+0

这是一个很好的建议,但我不能真正升级。 Yum依赖于python 2.6,所以我必须小心,而不是替换2.6。我可以安装2.7和2.6,但是随后我需要重新安装我们在任何地方使用的所有模块,并测试以确保所有生产脚本在2.7下仍能正常运行。这将是一个漫长的过程。 – Rhino 2014-10-06 14:05:28

+0

试图解决分段错误也不是一个快速的过程。我敢打赌,它比平行安装Python 2.7更长的时间,然后把你的项目指向它。它只是建立虚拟环境,然后安装每个项目的需求;一个简单的bash脚本可以在几分钟内处理它。如果你配置一个全局点子缓存,那么你不会再重新下载东西,节省你更多的时间。此外,它比现在的解决方案少得多。 – 2014-10-06 15:07:58

回答

0

段分割错误并不是Python程序员可以纠正的问题。我建议report a bug in the Python library

+0

现在,我不得不grep处理有问题的导入顺序的文件,只需切换顺序以避免出现分段错误。这有效,但不知道问题的根源有点吓人。 – Rhino 2014-10-06 14:06:49

+0

就像更新一样。我最近在同一台服务器上安装了python2.7,并且在使用Python 2.7.10时也会出现同样的问题。 – Rhino 2015-12-07 21:19:21