1

私は OSX 10.6 を使用しており、最近 Python を 2.6 から 2.7 にアップグレードしたため、Python パッケージをアップグレードする必要がありました。

今回はbrewを使用することに決め、sqlite、libspatialite、およびspatialite-toolsをbrewでインストールしましたが、すべて問題ありませんbrew doctor。その時点で、ローカル開発サーバー (Django 1.4) を起動すると、既存の pysqlite が拡張機能の読み込み (SpatiaLite で必要) をサポートしていないという不満がありました。

次に、解凍​​したpysqlite-2.6.3をダウンロードし、構成を変更して拡張機能の読み込みを有効にしてから、次のことを行いました。

python setup.py build_static
python setup.py install

ここで説明されているように。

開発サーバーを実行すると、「セグメンテーション違反」が発生します。これではあまりわからないので、Django の manage.py の import ステートメントの直後にsettraceを追加しました。

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

何が間違っている可能性があるかについてのアイデアと、いくつかの助けをいただければ幸いです。ありがとう。

4

2 に答える 2

2

ほとんどの場合、互換性のない SQLite または Python SQLite ネイティブ バインディング ライブラリが Python と混在しています。

Python のアップグレード後に、質問のすべてのパッケージを再インストールします。

このような問題を完全に回避したい場合、私の提案は、すべてのパッケージが Homebrew などの同じソースから取得される管理された環境を使用して、Python、SQLite、および Python バインディングをインストールすることです。

この環境外でパッケージを手動でインストールする場合は、ネイティブ ライブラリのコンパイル時に正しい Python ライブラリと Python ヘッダーが使用されていることを確認してください。つまり、Homebrew のライブラリを使用する場合は、OSX のデフォルトではなく、Homebrew が提供する Python および Python ヘッダーを使用してください。

Python でセグメンテーション違反を追跡する方法

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

これにより、実際の問題と、失敗している質問の個々のライブラリがわかります。

于 2012-09-11T11:25:53.550 に答える
0

私は最近 (2018 年)、さまざまなシステム環境で新しく作成された Python virtualenv を使用してこの問題に遭遇しました。

セグメント障害の原因は、Python パッケージをインストールしfaulthander、サイトを変更manage.pyしてアクティブ化することにより、最初は SQLite に分離されました。

import faulthandler
faulthandler.enable()

私が最初にこの問題に遭遇したのは、古いバージョンの Python を使用する MacOS でした (おそらく 2.7.12 については忘れました)。その際、Python 2.7.15 にアップグレードして virtualenv を再生成することで問題は解決しました。

次は、Python 2.7.5 を実行する Ubuntu 14.04 でした。これは古いバージョンの Ubuntu が原因だと考えて、16.04 と Python 2.7.12 にアップグレードしましたが、問題は解決しませんでした。今回は、Python の標準ディストリビューション インストールに固執したいと思いました。

この Django チケットは、古いバージョンの SQLite (古い Python ディストリビューションに同梱されていると推測しています) の問題を示唆しており、Python 用の SQLite を動作中のバージョンにアップグレードする方法を説明するこの Gistへのリンクも含まれています。

つまり、要約すると、Ubuntu 16.04 と Python 2.7.12 では次のようになります。

  1. 必須パッケージをインストールします。

    sudo apt-get install python-dev
    sudo apt-get install libsqlite3-dev
    
  2. 新しい Python virtualenv を作成してアクティブにします。

  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
    

この時点で、ソフトウェアをインストールしてテストを実行することができました。

于 2018-08-29T12:42:39.457 に答える