pysqlite

Windows環境(Python2.5)で作ったあぷりをCentOS4.3に移植して実行してみたところ見事にエラー・・・sqlite3モジュールがないって怒られた・・・
CentOS4.3のPythonは2.4でsqlite3のモジュールは2.5から標準パッケージになったらしい。

早速モジュールをインストールしようと検索してみるとどうやらpysqliteなるモジュールをインストールすればよいことがわかりダウンロードしてインストールしてみる

#wget http://pysqlite.googlecode.com/files/pysqlite-2.5.6.tar.gz
#tar zxvf pysqlite-2.5.6.tar.gz
#cd pysqlite-2.5.6
#python setup.py install

エラーメッセージが〜

running install
running build
running build_py
creating build
creating build/lib.linux-i686-2.4
creating build/lib.linux-i686-2.4/pysqlite2
copying lib/__init__.py -> build/lib.linux-i686-2.4/pysqlite2
copying lib/dump.py -> build/lib.linux-i686-2.4/pysqlite2
copying lib/dbapi2.py -> build/lib.linux-i686-2.4/pysqlite2
creating build/lib.linux-i686-2.4/pysqlite2/test
copying lib/test/__init__.py -> build/lib.linux-i686-2.4/pysqlite2/test
copying lib/test/userfunctions.py -> build/lib.linux-i686-2.4/pysqlite2/test
copying lib/test/factory.py -> build/lib.linux-i686-2.4/pysqlite2/test
copying lib/test/py25tests.py -> build/lib.linux-i686-2.4/pysqlite2/test
copying lib/test/transactions.py -> build/lib.linux-i686-2.4/pysqlite2/test
copying lib/test/dump.py -> build/lib.linux-i686-2.4/pysqlite2/test
copying lib/test/hooks.py -> build/lib.linux-i686-2.4/pysqlite2/test
copying lib/test/regression.py -> build/lib.linux-i686-2.4/pysqlite2/test
copying lib/test/types.py -> build/lib.linux-i686-2.4/pysqlite2/test
copying lib/test/dbapi.py -> build/lib.linux-i686-2.4/pysqlite2/test
running build_ext
building 'pysqlite2._sqlite' extension
creating build/temp.linux-i686-2.4
creating build/temp.linux-i686-2.4/src
gcc -pthread -fno-strict-aliasing -DNDEBUG -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m32 -march=i386 -mtune=generic -fasynchronous-unwind-tables -D_GNU_SOURCE -fPIC -fPIC -DMODULE_NAME="pysqlite2.dbapi2" -DSQLITE_OMIT_LOAD_EXTENSION=1 -I/usr/include/python2.4 -c src/module.c -o build/temp.linux-i686-2.4/src/module.o
src/module.c:24 から include されたファイル中:
src/connection.h:33:21: error: sqlite3.h: そのようなファイルやディレクトリはありません
In file included from src/module.c:24:
src/connection.h:38: error: expected specifier-qualifier-list before ‘sqlite3’
In file included from src/module.c:25:
src/statement.h:37: error: expected specifier-qualifier-list before ‘sqlite3’
src/module.c: In function ‘module_complete’:
src/module.c:99: 警告: implicit declaration of function ‘sqlite3_complete’
src/module.c: トップレベル:
src/module.c:265: error: ‘SQLITE_OK’ undeclared here (not in a function)
src/module.c:266: error: ‘SQLITE_DENY’ undeclared here (not in a function)
src/module.c:267: error: ‘SQLITE_IGNORE’ undeclared here (not in a function)
src/module.c:268: error: ‘SQLITE_CREATE_INDEX’ undeclared here (not in a function)
src/module.c:269: error: ‘SQLITE_CREATE_TABLE’ undeclared here (not in a function)
src/module.c:270: error: ‘SQLITE_CREATE_TEMP_INDEX’ undeclared here (not in a function)
src/module.c:271: error: ‘SQLITE_CREATE_TEMP_TABLE’ undeclared here (not in a function)
src/module.c:272: error: ‘SQLITE_CREATE_TEMP_TRIGGER’ undeclared here (not in a function)
src/module.c:273: error: ‘SQLITE_CREATE_TEMP_VIEW’ undeclared here (not in a function)
src/module.c:274: error: ‘SQLITE_CREATE_TRIGGER’ undeclared here (not in a function)
src/module.c:275: error: ‘SQLITE_CREATE_VIEW’ undeclared here (not in a function)
src/module.c:276: error: ‘SQLITE_DELETE’ undeclared here (not in a function)
src/module.c:277: error: ‘SQLITE_DROP_INDEX’ undeclared here (not in a function)
src/module.c:278: error: ‘SQLITE_DROP_TABLE’ undeclared here (not in a function)
src/module.c:279: error: ‘SQLITE_DROP_TEMP_INDEX’ undeclared here (not in a function)
src/module.c:280: error: ‘SQLITE_DROP_TEMP_TABLE’ undeclared here (not in a function)
src/module.c:281: error: ‘SQLITE_DROP_TEMP_TRIGGER’ undeclared here (not in a function)
src/module.c:282: error: ‘SQLITE_DROP_TEMP_VIEW’ undeclared here (not in a function)
src/module.c:283: error: ‘SQLITE_DROP_TRIGGER’ undeclared here (not in a function)
src/module.c:284: error: ‘SQLITE_DROP_VIEW’ undeclared here (not in a function)
src/module.c:285: error: ‘SQLITE_INSERT’ undeclared here (not in a function)
src/module.c:286: error: ‘SQLITE_PRAGMA’ undeclared here (not in a function)
src/module.c:287: error: ‘SQLITE_READ’ undeclared here (not in a function)
src/module.c:288: error: ‘SQLITE_SELECT’ undeclared here (not in a function)
src/module.c:289: error: ‘SQLITE_TRANSACTION’ undeclared here (not in a function)
src/module.c:290: error: ‘SQLITE_UPDATE’ undeclared here (not in a function)
src/module.c:291: error: ‘SQLITE_ATTACH’ undeclared here (not in a function)
src/module.c:292: error: ‘SQLITE_DETACH’ undeclared here (not in a function)
src/module.c: In function ‘init_sqlite’:
src/module.c:419: 警告: implicit declaration of function ‘sqlite3_libversion’
src/module.c:419: 警告: passing argument 1 of ‘PyString_FromString’ makes pointer from integer without a cast
error: command 'gcc' failed with exit status 1
[root@vobis-sa01 pysqlite-2.5.6]# python
Python 2.4.3 (#1, Sep  3 2009, 15:37:12)
[GCC 4.1.2 20080704 (Red Hat 4.1.2-46)] on linux2
Type "help", "copyright", "credits" or "license" for more information.

うーん、急いでいるのに・・・sqlite3はインストールされているしと思いつつメッセージを眺めているとsqlite3.hがないのが原因と思われだいたいヘッダーファイルがないと言うことは・・・試しにsqlite-develパッケージをインストールしてから再度インストールしたら無事完了♪

再度プログラムをうごかしてみるとグローバル変数sqlite3がないと怒られた、どうやらpysqliteモジュールとsqlite3モジュールではちょっと名前が違うらしいので手抜きな修正で無事動いた!!

#import sqlite3 ←Python2.5の時
from pysqlite2 import dbapi2 as sqlite3 ←Python2.4の時