2012年12月22日土曜日

Python をソースからインストールすると sqlite3 とかいろいろモジュールのインポートに失敗する

Python をソースからインストールすると
>>> import sqlite3
Traceback (most recent call last):
  File "", line 1, in 
  File "/tmp/Python/lib/python3.3/sqlite3/__init__.py", line 23, in 
    from sqlite3.dbapi2 import *
  File "/tmp/Python/lib/python3.3/sqlite3/dbapi2.py", line 26, in 
    from _sqlite3 import *
ImportError: No module named '_sqlite3'
というように sqlite3 モジュールをインポートできなかったりしました。
sqlite3 モジュールはあるのですが、_sqlite3 モジュールが無いようです。
$ dpkg -l | grep -i sqlite
ii  libsqlite3-0                     3.7.7-2ubuntu2                          SQLite 3 shared library
ii  sqlite3                          3.7.7-2ubuntu2                          Command line interface for SQLite 3
sqlite3 はインストールされており、シェルのコマンドラインで sqlite3 コマンドもちゃんと使えます。
でも sqlite3 モジュールのインポートに失敗します。
(./configure ではなく) make した時の出力をよく見ると最後の方に
Python build finished, but the necessary bits to build these modules were not found:
_bz2               _curses            _curses_panel   
_dbm               _gdbm              _lzma           
_sqlite3           _ssl               _tkinter        
readline           zlib                               
To find the necessary bits, look in setup.py in detect_modules() for the module's name.
って出てました。 sqlite3 以外にも import できないモジュールがいろいろありそうです。
setup.py の detect_modules() の該当箇所を見てねって書いてあるんですが読んでみてもよくわかりません。
今までいろいろソースからインストールした経験から、sqlite3 関連の dev パッケージが無いのが原因ではないかとう気がしたのでやってみました。
$ apt-cache search sqlite
で出てくる中でそれらしいものを探します。libsqlite3-dev がそれっぽいのでインストールしてみます。
$ sudo apt-get install libsqlite3-dev
$ make
... snip ...
Python build finished, but the necessary bits to build these modules were not found:
_bz2               _curses            _curses_panel   
_dbm               _gdbm              _lzma           
_ssl               _tkinter           readline        
zlib                                                  
To find the necessary bits, look in setup.py in detect_modules() for the module's name.
... snip ...
ビルドできないものリストの中から _sqlite3 が消えました。
正解だったようです。
最終的に以下のパッケージをインストールしてすべてビルドできるようにしました。
  • libsqlite3-dev
  • libbz2-dev
  • libncurses5-dev
  • libgdbm-dev
  • liblzma-dev
  • libssl-dev
  • tcl-dev
  • tk-dev
  • libreadline-dev

とりあえず
>>> import sqlite3
>>> 
sqlite3 モジュールはインポートできるようになりました。
その他のモジュールはインポートできるか試していませんが、多分大丈夫でしょう。

./configure で必要なライブラリがあるかどうかチェックして欲しいです。。。

0 件のコメント:

コメントを投稿