30分くらいかかる。

概要

PythonでSQLite3を扱うとき標準ライブラリのsqlite3を使う。じつはこれ、専用のライブラリを予めインストールしてからPythonをビルドしないとエラーが出て使えない。ほかにもTkinterなど外部の開発用ライブラリと事前ビルドが必要なケースが結構ある。今回はそうした外部ライブラリを必要とする標準ライブラリが使えるようPythonをビルドする方法を記した。

目次

  1. Pythonをインストールする
    1. Python依存ライブラリ
    2. anyenv
    3. pyenv
    4. Python 3.10.5
    5. 使用するpythonのバージョンを指定する
  2. SQLite3をインストールする
    1. ソースコードをダウンロードする(SQLite 3.39.4)
    2. コンフィグを確認&セットする
    3. ビルドする
    4. 配置する
    5. パスを通す
  3. PythonでSQLite3を使う
    1. ソースコードを書く
    2. 実行する

1. Pythonをインストールする

依存ライブラリをインストールする

まずはPythonで使う依存ライブラリをインストールしておく。ここ大事。libsqlite3-devを入れてから後述するPythonビルドをしないとimport sqlite3が使えない。Pythonをビルドし直すハメになる。

sudo apt install -y libsqlite3-dev libbz2-dev libncurses5-dev libgdbm-dev liblzma-dev libssl-dev tcl-dev tk-dev libreadline-dev

もしかしたら他にもあるかもしれない。すべて網羅できた自信はない。今回はlibsqlite3-devがあれば大丈夫だと思う。

anyenvをインストールする

git clone https://github.com/anyenv/anyenv ~/.anyenv
echo 'export PATH="$HOME/.anyenv/bin:$PATH"' >> ~/.bash_profile
echo 'eval "$(anyenv init -)"' >> ~/.bash_profile
anyenv install --init

以下のように出るのでyを入力しEnterキーを押す。

Manifest directory doesn't exist: /home/pi/.config/anyenv/anyenv-install
Do you want to checkout https://github.com/anyenv/anyenv-install.git? [y/N]: 

ログが出て最後は以下のようになる。

...
Completed!

pyenvをインストールする

anyenv install pyenv
exec $SHELL -l

pythonをインストールする

まずはバージョンを確認する。

pyenv install --list

一覧から好きなのを選ぶ。今回は3.10.5

pyenv install 3.10.5

ちなみに既存のときは上書き確認が出るのでyで実行すればビルドし直してくれる。所要時間10分位。

使用するpythonのバージョンを指定する

pyenv global 3.10.5

以下で確認する。

pyenv version

2. SQLite3をインストールする

ソースコードをダウンロードする(SQLite 3.39.4)

downloadから最新かつ自分の環境にあったコードを取得する。

YEAR="$(date +%Y)"
NAME=sqlite-autoconf-3390400
ZIP=${NAME}.tar.gz
wget https://www.sqlite.org/$YEAR/$ZIP
tar -zxvf $ZIP
cd $NAME

コンフィグを確認&セットする

確認

./configure --help

セット

./configure --enable-readline

ビルドする

time make

所要時間10分位。

配置する

ディレクトリ一式をすべて任意パスに配置する。

異なるバージョンをインストールするかもしれないのでsudo make installはしない。

パスを通す

export PATH=任意パス:$PATH

任意パスsqlite3コマンドが存在するディレクトリパス。

Pythonで参照するライブラリにSQLite3パス/.libsをセットする。

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:SQLite3パス/.libs

3. PythonでSQLite3を使う

ソースコードを書く

vim hello.py

hello.py

#!/usr/bin/env python3
# coding: utf8
import sqlite3
con = sqlite3.connect(':memory:')
cur = con.cursor()
for row in cur.execute("select 'Hello SQLite3 !!';"):
	print(row[0])

SQLite3のAPIはsqlite3.html参照。

実行する

python hello.py
Hello SQLite3 !!

OK! これでSQLite3を操作するPythonができた。

sqlite3インポート確認

python

端末で上記コマンドを叩くとREPLモードで起動する。

...
>>> 

そこでsqlite3をインポートできれば成功。

import sqlite3

エラーなし。OK! 環境構築できた。

あとはsqlite3のドキュメントを読んでゴリゴリ書いてくだけ。