30分くらいかかる。
概要
PythonでSQLite3を扱うとき標準ライブラリのsqlite3を使う。じつはこれ、専用のライブラリを予めインストールしてからPythonをビルドしないとエラーが出て使えない。ほかにもTkinterなど外部の開発用ライブラリと事前ビルドが必要なケースが結構ある。今回はそうした外部ライブラリを必要とする標準ライブラリが使えるようPythonをビルドする方法を記した。
目次
- Pythonをインストールする
- Python依存ライブラリ
- anyenv
- pyenv
- Python 3.10.5
- 使用するpythonのバージョンを指定する
- SQLite3をインストールする
- ソースコードをダウンロードする(SQLite 3.39.4)
- コンフィグを確認&セットする
- ビルドする
- 配置する
- パスを通す
- PythonでSQLite3を使う
- ソースコードを書く
- 実行する
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のドキュメントを読んでゴリゴリ書いてくだけ。