SSブログ

Python 2.5.2 で、 SQLite が使えるはずだったのに。 [プログラム三昧]このエントリーを含むはてなブックマーク#

私が借りているさくらのレンタルサーバで、先ごろ OS アップグレードが行われました。 OS と一緒に、 Python のバージョンも 2.5.2 に上がりました。 そのため、 SQLite に対応するモジュールが標準装備になり、 Python から直接 SQLite のデータベース操作が出来るようになると喜んでいました。 ところが、

最初の一歩 : visitor_world7.cgi

作ろうとしたのは、前回作成した visitor_world6.cgi と同等の機能を持つファイルだったのですが、不具合の原因を突き止める過程でここまでシンプルになってしまいました。

#!/usr/local/bin/python

import cgitb

cgitb.enable()

import sqlite3

要するに、 "Traceback" の機能をイネーブルして、 sqlite3 モジュールを読み込んでいるだけです。 ところが、この CGI を呼び出してみるとわかるように、 _sqlite3 モジュールが無いというエラーが発生します。

 /home/noritan/www/noritan_org/cgi/visitor_world7.cgi in ()
    3 import cgitb
    4 
    5 cgitb.enable()
    6 
    7 import sqlite3
sqlite3 undefined
 /usr/local/lib/python2.5/sqlite3/__init__.py in ()
   20 # 2. Altered source versions must be plainly marked as such, and must not be
   21 #    misrepresented as being the original software.
   22 # 3. This notice may not be removed or altered from any source distribution.
   23 
   24 from dbapi2 import *
dbapi2 undefined
 /usr/local/lib/python2.5/sqlite3/dbapi2.py in ()
   25 import time
   26 
   27 from _sqlite3 import *
   28 
   29 paramstyle = "qmark"
_sqlite3 undefined

<type 'exceptions.ImportError'>: No module named _sqlite3
      args = ('No module named _sqlite3',)
      message = 'No module named _sqlite3' 

なぜ、存在しないのか、ユーザにはわかりませんので、現在、問い合わせ中です。

2009-07-07 22:33 追記

Python 2.5.2 で sqlite3 が使えずに困っている方のための情報です。 Python 2.5.2 のオンライン・ドキュメントの"What's New"に、13.4 The sqlite3 packageという項目があり、このように書かれています。

If you're compiling the Python source yourself, note that the source tree doesn't include the SQLite code, only the wrapper module. You'll need to have the SQLite libraries and headers installed before compiling Python, and the build process will compile the module when the necessary headers are available.

Pythonのソース・コードを自分でコンパイルするときには、ソース・コードにSQLite本体は含まれず、ラッパ・モジュールだけが含まれていることに注意すべし。 Pythonをコンパイルする前にSQLiteのライブラリとヘッダ・ファイルを配置する必要があり、必要なヘッダ・ファイルが使用可能なときに限りsqlite3モジュールがコンパイルされるであろう。

つまり、SQLiteをインストールしてから、Pythonをインストールしないと、Pythonでsqlite3モジュールを使うことはできないということのようです。

と、さくらインターネットに指摘したところ、Python 2.5.2 を再コンパイルする代わりに、Python 2.6.2 をインストールしてくれたようです。 2.6.2では、2.4.5との互換性の問題が少しばかり発生しているので、いくぶん修正が必要になってしまいました。

参考文献

文献が必要になる段階までたどりついていません。

初めてのPython 第3版

初めてのPython 第3版

  • 作者: Mark Lutz
  • 出版社/メーカー: オライリージャパン
  • 発売日: 2009/02/26
  • メディア: 大型本
Learning Python 3e (Learning)

Learning Python 3e (Learning)

  • 作者: M Lutz
  • 出版社/メーカー: Pragma
  • 発売日: 2007/11/06
  • メディア: ペーパーバック

nice!(0)  コメント(5)  トラックバック(0)  このエントリーを含むはてなブックマーク#

nice! 0

コメント 5

noritan

「PythonでもSQLiteに対応して欲しい」との要望を出したところ、6月25日にPythonのバージョンが2.6.2に上がり、同時にSQLiteに対応するようになりました。

ところが、

バージョン2.6.2では、"os.popen2"が"depreciated"としてレポートされるため、 visitor_world6.cgi で出力されるXMLが崩れてしまい、リストが正常に出力されない状態であることに気が付きました。

バージョンが、ちょっと変わるだけで、簡単に仕様がひっくり返る。 Python って、そういうヤツです。

by noritan (2009-06-30 22:07) 

_

2.6.2なんて面倒な仕様になったのはあなたが原因でしたか
by _ (2009-07-23 14:44) 

noritan

すいません。
「私が原因じゃない。」と言い張れないような状況のようです。

私も、エラーの発生でバージョン変更を知ったクチです。FreeBSDのアップグレードでは、あれだけ事前に通知があったのにPythonのアップグレードは事実上通知なし。ほんと、pythonには、冷たいのね。

by noritan (2009-07-23 18:22) 

kim395

これは noritan さんのせいじゃなく、さくらの中の人の選択がまずいと思います。
sqlite3 を使えるようにするだけなら 2.5.2 のリコンパイルで済むのに、なんで 2.6.2 へのアップグレードなんてリスキーな選択をしちゃったんでしょう…。
アップグレードするにしても、make altinstall で 2.5.2 と 2.6.2 を共存させることもできたはずなんですよね。

「さくらのレンタルサーバ」を仕事で使っているので、私もヒヤリとしました。
幸い実害はありませんでしたが。

by kim395 (2009-08-06 06:01) 

noritan

kim395さん、わざわざ、弁護していただきありがとうございます。
私の要望も、「再コンパイルしてくれ」だったのですが、いきなり 2.6.2 に上がっていて面食らっています。

まあ、「ライトプラン」というTELNETも使えないような安いプランを利用しているので、仕方が無いと自分を納得させています。

by noritan (2009-08-11 11:46) 

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

トラックバックの受付は締め切りました

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。