您的位置:首页 > 编程语言 > Python开发

解决python多版本时,import第三方模块出错的问题

2017-01-02 16:08 501 查看
转载自:http://bbs.fishc.com/thread-58472-1-1.html

由于学校导师要求需要使用 斯坦福大学的网络分析平台(SNAP),所以需要在python中导入第三方snap模块,

但是我电脑安装了python2.6,python2.7, python3.4三个版本,

按照 http://snap.stanford.edu/index.html 这个网址的指导,顺利安装snap.py,

但是每次启动python导入snap的时候,都会报下面的错误:

Fatal Python error: PyThreadState_Get: no current thread

Abort trap: 6

网上google了一下,很多人倒入第三方模块的时候,经常会出现上面的错误,由于现在python2和python3一般都会在我们的电脑中同时存在,存在多版本。出现这个错误的原因是,第三方模块配置的时候默认会关联系统层面的python命令(特别是OS X和Linux),所以我们如果自己安装过的话,需要重新关联第三方模块和自己使用的python命令。

所以我们可以使用下面命令来重新关联:

install_name_tool -change /System/Library/Frameworks/Python.framework/Versions/2.7/Python /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/libpython2.7.dylib _snap.so

sudo cp _snap.so /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/

otool -L  /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/_snap.so

以我的电脑为例,我的是OS X Yosemite,系统层级的python在/System/Library的文件夹下,然后我自己用的就放在/opt/local/Library/下,然后_snap.so是第三方模块的相关配置文件,所以第一条命令是install_name_tool -change来重新关联,第二条命令是将相关配置文件放入当前使用python命令的目录下,最后一条命令时用otool 来检查dylib下面使用的第三方库是否还有其他依赖。

之后,使用/opt/local/Library/下面的python命令再执行import snap等第三方模块,那么就不会再出现错误了!

PS:这些小问题很少出现,属于小众问题,但是要是真遇到,弄起来得花上不少时间,这里给大家分享一下,希望能帮助到大家

最新更新(2015/04/07):
有些朋友给我反应,通过上面的方法之后,import snap时依然报错,同样也是

Fatal Python error: PyThreadState_Get: no current thread

Abort trap: 6

我建议如果能看错误details的话,看看是不是因为libpython2.7.dylib crash了,这种错误因为不同版本的python会找不同路径下的libpython2.7.dylib。

比如我的python可能会默认找/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/libpython2.7.dylib

然后我的python可能去找自己建立的目录/sw/lib/libpython2.7.dylib,这种情况会导致lib冲突

解决方法是:

看错误详细信息,看看是哪个目录下的lib冲突了,我的例子是系统报了/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/libpython2.7.dylib冲突,那么我的python去找/sw/lib/libpython2.7.dylib了,而snap就去找前面opt的路径,这样两个lib会冲突,那么我们可以用opt里面的libpython2.7.dylib 去将/sw/lib/libpython2.7.dylib覆盖掉,那么你会发现可以import
snap了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: