pysqlite分割错误



我在OSX 10.6上,最近把我的Python从2.6升级到2.7,所以我不得不升级Python包。

这一次,我决定使用brew,并使用brew安装了sqlite、libspatialite和spatialite工具,brew doctor表示一切正常。当时,当我启动本地开发服务器(Django 1.4)时,它抱怨现有的pysqlite不支持扩展加载(这是spatialite所要求的)。

然后我下载了pysqlite-2.6.3,打开包,进行配置更改以启用扩展加载,然后:

python setup.py build_static
python setup.py install

如本文所述。

当我运行开发服务器时,现在我得到了一个"分段故障"。由于这并不能说明什么,我在导入语句之后将settrace添加到Django的manage.py中:

def trace(frame, event, arg):
    print "%s, %s:%d" % (event, frame.f_code.co_filename, frame.f_lineno)
    return trace
sys.settrace(trace)

分段故障之前的几行如下:

...
call, /Users/omat/workspace/devspaces/env/lib/python2.7/site-packages/django/db/backends/sqlite3/base.py:71
line, /Users/omat/workspace/devspaces/env/lib/python2.7/site-packages/django/db/backends/sqlite3/base.py:71
call, /Users/omat/workspace/devspaces/env/lib/python2.7/encodings/utf_8.py:15
line, /Users/omat/workspace/devspaces/env/lib/python2.7/encodings/utf_8.py:16
return, /Users/omat/workspace/devspaces/env/lib/python2.7/encodings/utf_8.py:16
return, /Users/omat/workspace/devspaces/env/lib/python2.7/site-packages/django/db/backends/sqlite3/base.py:71
Segmentation fault

我们非常感谢您对可能出现的问题的任何想法和帮助。谢谢

很可能您的Python中混合了不兼容的SQLite或Python SQLite本地绑定库。

在Python升级后重新安装问题中的所有包。

如果你想完全避免这样的问题,我的建议是使用托管环境安装Python、SQLite和Python绑定,在托管环境中,所有包都来自同一个源,比如Homebrew。

如果在该环境之外手动安装包,请确保在编译本机库时使用正确的Python库和Python头。也就是说,如果您使用Homebrew中的库,请使用Homebrew-提供的Python和Python头,而不是OSX默认值。

如何在Python 中跟踪segfault

http://wiki.python.org/moin/DebuggingWithGdb

这将告诉你实际的问题和问题中失败的单个库。

我最近(2018)在各种系统环境中使用新创建的Python虚拟机遇到了这个问题。

最初,通过安装Python包faulthander,并修改我的站点的manage.py以激活它,将段故障的原因隔离到SQLite,因此:

import faulthandler
faulthandler.enable()

我第一次遇到这个问题是在使用旧版本Python的MacOS上(我忘了是哪一个,可能是2.7.12)。当时,通过升级到Python 2.7.15并重新生成virtualenv解决了这个问题。

接下来是在Ubuntu 14.04上运行Python 2.7.5。我认为这是由于Ubuntu的旧版本,升级到16.04和Python 2.7.12,但问题仍然存在。在这种情况下,我想坚持Python的标准发行版安装。

这个Django票证表明了旧版本SQLite的问题(我推测它与旧的Python发行版一起提供),并且还包含一个指向这个Gist的链接,该链接解释了如何将SQLite for Python升级到工作版本。

因此,总而言之,在Ubuntu 16.04和Python 2.7.12:上

  1. 安装必备软件包:

    sudo apt-get install python-dev
    sudo apt-get install libsqlite3-dev
    
  2. 创建并激活一个新的Python虚拟机。

  3. 创建并转到工作目录;例如

    mkdir ~/sqlite
    cd ~/sqlite
    
  4. 运行本Gist中描述的脚本;即

    # install custom sqlite 3.14
    wget https://github.com/ghaering/pysqlite/archive/2.8.3.tar.gz
    wget https://www.sqlite.org/2016/sqlite-autoconf-3140100.tar.gz
    tar -xzvf sqlite-autoconf-3140100.tar.gz
    tar -xzvf 2.8.3.tar.gz
    cp -av sqlite-autoconf-3140100/. pysqlite-2.8.3/
    cd ./pysqlite-2.8.3 && python setup.py build_static install
    

在这一点上,我能够安装我的软件并运行测试,没有任何问题(好吧,没有任何不是我自己造成的问题:-o)。

相关内容

  • 没有找到相关文章

最新更新