概要
WSL2 + Ubuntu20.04 + pyenvという環境で、Python 3.11.1を導入しようとしたところ下記のように lzma
についてWARNINGが発生しました。
試そうとしているモジュールがlzmaを使うようなので対処メモを記録します。
インストールした際の状態
インストール時の出力メッセージです。
$ pyenv install 3.11.1
Downloading Python-3.11.1.tar.xz...
-> https://www.python.org/ftp/python/3.11.1/Python-3.11.1.tar.xz
Installing Python-3.11.1...
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/home/shinsaka/.pyenv/versions/3.11.1/lib/python3.11/lzma.py", line 27, in <module>
from _lzma import *
ModuleNotFoundError: No module named '_lzma'
WARNING: The Python lzma extension was not compiled. Missing the lzma lib?
Installed Python-3.11.1 to /home/shinsaka/.pyenv/versions/3.11.1
WARNINGメッセージ内容を翻訳するとこんな感じでしょうか。
lzmaライブラリがシステム上にないのでlzmaエクステンションはコンパイルされませんでした。
(それでも) Python3.11.1はインストールしました。
試しにインポートしてみるとエラーとなります。
Python自体はインストールされているが、 lzma
モジュールは含まれないので使えない状態のようです。
$ pyenv local 3.11.1
$ python
Python 3.11.1 (main, Jan 15 2023, 14:55:22) [GCC 9.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import lzma
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/shinsaka/.pyenv/versions/3.11.1/lib/python3.11/lzma.py", line 27, in <module>
from _lzma import *
ModuleNotFoundError: No module named '_lzma'
>>>
対処
まずはpyenvから対象バージョンを削除します。
$ pyenv uninstall 3.11.1
pyenv: remove /home/shinsaka/.pyenv/versions/3.11.1? [y|N] y
pyenv: 3.11.1 uninstalled
つぎにliblzma-dev
パッケージをインストールします。
$ sudo apt install liblzma-dev
...snip...
Setting up liblzma-dev:amd64 (5.2.4-1ubuntu1.1) ...
再度 Python3.11.1をインストールします。
WARNINGなしで完了します。
$ pyenv install 3.11.1
Downloading Python-3.11.1.tar.xz...
-> https://www.python.org/ftp/python/3.11.1/Python-3.11.1.tar.xz
Installing Python-3.11.1...
Installed Python-3.11.1 to /home/shinsaka/.pyenv/versions/3.11.1
lzmaモジュールをインポートしてみます。エラーは発生しません。
$ python
Python 3.11.1 (main, Jan 15 2023, 15:22:26) [GCC 9.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import lzma
>>>