ソースからのPythonインストールが”ModuleNotFoundError: No module named ‘zlib'”エラーで失敗する

pipはPythonに同梱されているパッケージマネージャです。本記事ではPythonをソースからインストールする際、”ModuleNotFoundError: No module named ‘zlib'”といったエラーでインストールが失敗した場合の対処法を紹介します。

zlibをインストールする

zlibは、zip圧縮やgzip圧縮の内部で使われている圧縮アルゴリズムを実装したライブラリです。zlibがあらかじめOSにインストールされていない場合、ソースからのPythonのインストールは失敗します。この際、以下のようなエラーが発生します。

Traceback (most recent call last):
  File "", line 520, in _get_decompress_func
ModuleNotFoundError: No module named 'zlib'

During handling of the above exception, another exception occurred:
Traceback (most recent call last):
  File "", line 568, in _get_data
  File "", line 523, in _get_decompress_func
zipimport.ZipImportError: can't decompress data; zlib not available

エラーを解消するにはzlibをインストールします。Ubuntuの場合は以下のようにインストールできます。

$ sudo apt-get install zlib1g-dev
$ #または
$ sudo apt install zlib1g-dev

zlibをインストールした後、Pythonを再度インストールします。以下は基本的なダウンロード・インストール手順の一例です。Pythonバージョン等は必要に応じて置き換えます。

$ wget https://www.python.org/ftp/python/3.8.0/Python-3.8.0.tgz
$ tar -xzf Python-3.8.0.tgz
$ cd Python-3.8.0/
$ ./configure
$ make
$ sudo make install

zlibのインストール後はPythonが正常にインストールされます。なお、zlibインストール前後のmakeのログを見ると、zlibモジュールが正常にビルドされたかどうかを確認できます。以下はzlibインストール前にmakeしたときのログです。

Python build finished successfully!
The necessary bits to build these optional modules were not found:
_bz2                  _curses               _curses_panel      
_dbm                  _gdbm                 _hashlib           
_lzma                 _sqlite3              _ssl               
_tkinter              _uuid                 readline           
zlib                                                           
To find the necessary bits, look in setup.py in detect_modules() for the module's name.

ビルドされなかったモジュールの一覧にzlibが含まれているのが確認できます。次に、以下がzlibインストール後にmakeしたときのログです。

Python build finished successfully!
The necessary bits to build these optional modules were not found:
_bz2                  _curses               _curses_panel      
_dbm                  _gdbm                 _hashlib           
_lzma                 _sqlite3              _ssl               
_tkinter              _uuid                 readline           
To find the necessary bits, look in setup.py in detect_modules() for the module's name.

今度は一覧からzlibが消えており、zlibモジュールが正常にビルドされたことが確認できます。

関連記事

Pythonインストール後、環境によっては以下のリンク先で解説しているエラーにも遭遇するかもしれません。

参考リンク

Share - この記事をシェアする