このブログは、旧・はてなダイアリー「檜山正幸のキマイラ飼育記 メモ編」(http://d.hatena.ne.jp/m-hiyama-memo/)のデータを移行・保存したものであり、今後(2019年1月以降)更新の予定はありません。

今後の更新は、新しいブログ http://m-hiyama-memo.hatenablog.com/ で行います。

SQLite3が使えない、Python作り直し

Pythonをビルド - 檜山正幸のキマイラ飼育記 メモ編の方法でビルドすると、SQLite3が使えない。


$ python
Python 2.6.4 (r264:75706, Jan 21 2010, 23:22:41)
[GCC 3.4.6 20060404 (Red Hat 3.4.6-10)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import sqlite3
Traceback (most recent call last):
File "", line 1, in
File "/usr/local/python/lib/python2.6/sqlite3/__init__.py", line 24, in
from dbapi2 import *
File "/usr/local/python/lib/python2.6/sqlite3/dbapi2.py", line 27, in
from _sqlite3 import *
ImportError: No module named _sqlite3

こうなる。DLL(so)モジュール _sqlite3 がないと言っている。Pythonをmakeするとき、事前にSQLite3がインストールされてないと組み込まないようだ。作り直しの必要がある。

まずSQLite3を持ってくる。


$ wget http://www.sqlite.org/sqlite-amalgamation-3.6.22.tar.gz

$ tar zxvf sqlite-amalgamation-3.6.22.tar.gz

$ cd sqlite-3.6.22/

$ ls
INSTALL README config.sub depcomp missing sqlite3.c sqlite3.pc.in
Makefile.am aclocal.m4 configure install-sh shell.c sqlite3.h sqlite3ext.h
Makefile.in config.guess configure.ac ltmain.sh sqlite3.1 sqlite3.pc

$

configureの--prefixにPythonと同じインストールプレフィックスを指定する。


# ./configure --prefix=/usr/local/python
... 省略 ...

# make
... 省略 ...

# make install
make[1]: Entering directory `/home/caty/DOWNLOAD/sqlite-3.6.22'
test -z "/usr/local/python/lib" || mkdir -p -- "/usr/local/python/lib"
/bin/sh ./libtool --mode=install /usr/bin/install -c 'libsqlite3.la' '/usr/local/python/lib/libsqlite3.la'
/usr/bin/install -c .libs/libsqlite3.so.0.8.6 /usr/local/python/lib/libsqlite3.so.0.8.6
(cd /usr/local/python/lib && { ln -s -f libsqlite3.so.0.8.6 libsqlite3.so.0 || { rm -f libsqlite3.so.0 && ln -s libsqlite3.so.0.8.6 libsqlite3.so.0; }; })
(cd /usr/local/python/lib && { ln -s -f libsqlite3.so.0.8.6 libsqlite3.so || { rm -f libsqlite3.so && ln -s libsqlite3.so.0.8.6 libsqlite3.so; }; })
/usr/bin/install -c .libs/libsqlite3.lai /usr/local/python/lib/libsqlite3.la
/usr/bin/install -c .libs/libsqlite3.a /usr/local/python/lib/libsqlite3.a
chmod 644 /usr/local/python/lib/libsqlite3.a
ranlib /usr/local/python/lib/libsqlite3.a
libtool: install: warning: remember to run `libtool --finish /home/caty/python2.6.4/lib'
test -z "/usr/local/python/bin" || mkdir -p -- "/usr/local/python/bin"
/bin/sh ./libtool --mode=install /usr/bin/install -c 'sqlite3' '/usr/local/python/bin/sqlite3'
/usr/bin/install -c .libs/sqlite3 /usr/local/python/bin/sqlite3
test -z "/usr/local/python/include" || mkdir -p -- "/usr/local/python/include"
/usr/bin/install -c -m 644 'sqlite3.h' '/usr/local/python/include/sqlite3.h'
/usr/bin/install -c -m 644 'sqlite3ext.h' '/usr/local/python/include/sqlite3ext.h'
test -z "/usr/local/python/share/man/man1" || mkdir -p -- "/usr/local/python/share/man/man1"
/usr/bin/install -c -m 644 './sqlite3.1' '/usr/local/python/share/man/man1/sqlite3.1'
test -z "/usr/local/python/lib/pkgconfig" || mkdir -p -- "/usr/local/python/lib/pkgconfig"
/usr/bin/install -c -m 644 'sqlite3.pc' '/usr/local/python/lib/pkgconfig/sqlite3.pc'
make[1]: Leaving directory `/home/caty/DOWNLOAD/sqlite-3.6.22'
... 省略 ...

#

Pythonを作り直す。


# make
...[snip]

Failed to find the necessary bits to build these modules:
_tkinter bsddb185 sunaudiodev
To find the necessary bits, look in setup.py in detect_modules() for the module's name.

running build_scripts


#

いくつか失敗しているが、大丈夫だろう。

どうも、PREFIX/lib/python*/lib-dynload/ に .soモジュールが入っているらしい。PREFIX/lib/python2.6/lib-dynload/_sqlite3.so が問題のブツだった。

[追記]ちなみに、pysqliteとかいうのは古いPython用だから要らないよ。