Google ColaboratoryでPyTorchを使って作業していたコードを、ローカルの環境で再現してみようと思ってMacBook Air上で実行したところ、ライブラリをインポートしたところでなぜかModuleNotFoundError: No module named ‘_lzma’ のエラーが表示されて悩むことに。
ここではそのエラー対処法をまとめてみました。
ModuleNotFoundError: No module named ‘_lzma’
Google ColaboratoryでPyTorchを使って作業をしていました。Colab上では動いていたので、M1のMacBook Air上にpythonのvenvを使って仮想環境を作ってColab上で動いていたコードを動かしたみようとした時のことでした。
Jupyter Labを利用してコードを実行すると、インポートしているライブラリが無いと表示されたので、それらを全てインストール。これで動くかと思って再度実行すると…
ModuleNotFoundError: No module named ‘_lzma’
Google Colaboratoryでは特に何も問題なかったのでどうしたものかと悩みます。
Pythonにlzmaが組み込まれていない?
Jupyter Lab上ではなくでPythonの対話モードを起動してlzmaをインポートしてみましたが…
>>> import lzma
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Users/ユーザー名/.pyenv/versions/3.11.1/lib/python3.11/lzma.py", line 27, in <module>
from _lzma import *
ModuleNotFoundError: No module named '_lzma'
このようにエラーが出ます。
どうも私の環境下のPythonにlzmaが組み込まれていないような挙動のようです。他のバージョンのPythonではエラーも出ずにインポートできたんですよね。
pyenvが原因?Pythonを再インストール
私のPythonの環境はpyenvを利用しているのですが、ネットで調べてみるとどうもそこに原因があるようでPythonを再インストールすれば解決するというような意見を目にしました。
この環境を構築してから結構時間が経過しているので公式サイトのPythonとは違うものは、何かのビルド時の修正でもこの間に入ったのかなとも思いました。
pyenvのPythonを次のコマンドで確認してみます。
% pyenv versions
system
* 3.11.1 (set by /Users/ユーザー名/.pyenv/version)
バージョン3.11.1のPython を使っていました。
このバージョンを次のコマンドで再インストールしてみます。
% pyenv install 3.11.1
その前に一回アンインストールした方がいいのかもしれませんが、このまま上書きでインストールしてみました。
ターミナルから対話モードでPython を起動して、lzmaをインポートしてみます。
% python
Python 3.11.1 (main, Dec 29 2022, 11:25:45) [Clang 14.0.0 (clang-1400.0.29.202)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import lzma
>>>
今度はModuleNotFoundError: No module named ‘_lzma’のエラーは出ずに、無事インポートすることができました。
Jupyter Labでもエラー表示は出ず、無事ローカル環境でもコードを実行することができました。
これで問題解決でした。
まとめ
PythonでModuleNotFoundError: No module named ‘_lzma’が出た時は、Python自体に何か不具合があるかも。
pyenvを使ってPythonを利用している私の環境では、Pythonを再インストールしてみると解決しました。