概要
pyenvでインストールしたPythonにて、あるライブラリをインポートしようとしたところ、以下のようなエラーがでました。
上記の問題に加えて他もモジュールに対しての対処を行っていきます。
実行環境 |
---|
Windows Subsystem for Linux 1 |
pyenv 2.3.6-4-g904fe964 |
当初「ModuleNotFoundError: No module named '_sqlite3'」のようなエラーが出力された時、「sqlite3はPython標準ライブラリのはずなのに?」と不思議に思いつつ色々調べていたら、システム自体にsqlite3を扱う為の開発ファイルが足りていないせいであるとわかった。
それもそのはずで、pyenvでお求めのPythonバージョンをインストールされる最中のログに以下のようなワーニングが出力されていたのである。
$ pyenv install 3.7.1
Downloading Python-3.7.1.tar.xz...
-> https://www.python.org/ftp/python/3.7.1/Python-3.7.1.tar.xz
Installing Python-3.7.1...
WARNING: The Python bz2 extension was not compiled. Missing the bzip2 lib?
WARNING: The Python curses extension was not compiled. Missing the ncurses lib?
WARNING: The Python readline extension was not compiled. Missing the GNU readline lib?
WARNING: The Python sqlite3 extension was not compiled. Missing the SQLite3 lib?
WARNING: The Python tkinter extension was not compiled and GUI subsystem has been detected. Missing the Tk toolkit?
WARNING: The Python lzma extension was not compiled. Missing the lzma lib?
Installed Python-3.7.1 to /home/kenno/.pyenv/versions/3.7.1
4つ目のWARNINGに「WARNING: The Python sqlite3 extension was not compiled. Missing the SQLite3 lib?」、翻訳すると「警告: Python sqlite3 拡張機能はコンパイルされていません。 SQLite3 ライブラリがありませんか?」という警告文を出している。
この場合sqlite3の開発ファイルをビルドせずにPythonバージョンが作成されてしまったため、そのPythonバージョンではsqlite3の開発ファイルをシステムにインストールしても問題のエラーは解消されないのである。
なのでsqlite3の開発ファイルである「libsqlite3-dev」をシステムにインストールした後に、もう一度お求めのPythonバージョンをインストールする必要があります。
$ sudo apt install libsqlite3-dev
$ pyenv uninstall 3.7.1
$ pyenv install 3.7.1
以下pyenvの公式にもあるように、Pythonバージョンをインストールする前に各Python標準ライブラリに必要な開発ファイルをシステムにインストールしておく必要があります。
$ sudo apt update
$ sudo apt install make build-essential libssl-dev zlib1g-dev \
libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm \
libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev
無事インストールが完了したら、お求めのPythonバージョンをインストールします。
$ pyenv install 3.7.0
以上となります。
最後までご覧いただきありがとうございました。