[WSL]pyenvへのPythonインストールで出るエラーを解決する

WSLのpyenvにPythonをインストールしようとするとエラーが出ました。その解決を含め、WSLのUbuntu環境にpyenvをインストールしてPythonを動かすまでの記録です。

環境によって出てくるエラーが変わることも往々にしてあるので、僕の環境を記載しておきます。

  • OS: Windows10
  • WSL: Ubuntu 18.04 LTS
  • Python3.6.9がプリインストールされている状態

gitとpyenvのインストール

まずはpyenvをインストールしますが、gitが入っていない場合は先にインストールしておきましょう。

sudo apt install git

gitが入っていれば下記を実行して、pyenvをインストールします。

git clone git://github.com/yyuu/pyenv.git ~/.pyenv

インストールが完了したら「pyenv」コマンドが通るよう、bashプロファイルに設定を書き込みます。

echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile
echo 'eval "$(pyenv init -)"' >> ~/.bash_profile
source .bash_profile

その後、pyenvでインストール可能なリストを確認してみましょう。もし下記のコマンドが通らないようであれば、そもそもpyenvがインストールされているか、上のプロファイル設定が正確に入力されたかを確認してください。

pyenv install --list

ズラーッとリストが出てくるので、そこからインストールしたいものを選択。ここではPythonの最新版3.8.2をインストールしてみます。

pyenv install 3.8.2

これでしばらく待てばOKのはずですが、ここでエラー。

エラー文1 (Ubuntuがクリーンな状態の場合)

僕の場合はこのエラーは出ませんでしたが、Ubuntuがインストール直後などのクリーンな状態だと、こちらのエラーが出てくるはず。

Downloading Python-3.8.1.tar.xz...
-> https://www.python.org/ftp/python/3.8.1/Python-3.8.1.tar.xz
Installing Python-3.8.1...

BUILD FAILED (Ubuntu 18.04 using python-build 1.2.16-5-g7097f820)

Inspect or clean up the working tree at /tmp/python-build.20200206004312.8157
Results logged to /tmp/python-build.20200206004312.8157.log

Last 10 log lines:
checking for python3... python3
checking for --enable-universalsdk... no
checking for --with-universal-archs... no
checking MACHDEP... "linux"
checking for gcc... no
checking for cc... no
checking for cl.exe... no
configure: error: in `/tmp/python-build.20200206004312.8157/Python-3.8.1':
configure: error: no acceptable C compiler found in $PATH
See `config.log' for more details

下から2行目はC言語のコンパイラが見つからない場合のエラー。他にもchecking…を見ると色々と足りないものがありそうです。このエラーが出る場合はビルドツールをインストールします。

sudo apt install build-essential

エラー文2 (zlibが無効)

僕の環境で出てきたのはこちらのエラー。

Downloading Python-3.8.1.tar.xz...
-> https://www.python.org/ftp/python/3.8.1/Python-3.8.1.tar.xz
Installing Python-3.8.1...

BUILD FAILED (Ubuntu 18.04 using python-build 1.2.16-5-g7097f820)

Inspect or clean up the working tree at /tmp/python-build.20200129113842.20029
Results logged to /tmp/python-build.20200129113842.20029.log

Last 10 log lines:
  File "/tmp/python-build.20200129113842.20029/Python-3.8.1/Lib/ensurepip/__init__.py", line 119, in _bootstrap
    return _run_pip(args + [p[0] for p in _PROJECTS], additional_paths)
  File "/tmp/python-build.20200129113842.20029/Python-3.8.1/Lib/ensurepip/__init__.py", line 27, in _run_pip
    import pip._internal
  File "<frozen zipimport>", line 241, in load_module
  File "<frozen zipimport>", line 709, in _get_module_code
  File "<frozen zipimport>", line 570, in _get_data
zipimport.ZipImportError: can't decompress data; zlib not available
Makefile:1186: recipe for target 'install' failed
make: *** [install] Error 1

全文そのまま載せてますが、注目するのは下から3行目。「zlibが有効ではないので、ファイルが解凍できない」と言われてます。なのでzlibのインストールを行いましょう。

sudo apt install zlib1g-dev

インストール後に再び同じ手順でPythonのインストールを試みます。しかし再びエラー。

エラー文3 (ライブラリが見当たらない)

WARNING: The Python bz2 extension was not compiled. Missing the bzip2 lib?
WARNING: The Python readline extension was not compiled. Missing the GNU readline lib?
ERROR: The Python ssl extension was not compiled. Missing the OpenSSL lib?

こちらは抜粋してます。Warning2つとErrorが1つ出てきましたが、どれも同じような内容です。「Ubuntuにあるべきライブラリが見当たらない」というメッセージ。

致命的なのはErrorの方なので、まずはOpenSSLをインストールします。

sudo apt install libssl-dev

Warningは致命的ではないかもしれませんが、ついでにbzip2とreadline、データベース用のsqlite3もまとめてインストールしておきます。

sudo apt install libbz2-dev libreadline-dev libsqlite3-dev

この状態でもう一度Pythonのインストールを試してみましょう。

pyenv install 3.8.2

僕の環境ではこれでインストールが正常終了しました。

Pythonインストール後

インストールが終了したら標準で使用するPythonインタープリタを指定しておきましょう。フォルダ単位かシステム全体のどちらかを選択してください。

フォルダ単位で指定するには、まず指定したいフォルダに移動して以下のコマンドを入力。

pyenv local 3.8.1

フォルダ単位ではなく全体に適用するにはこちらを実行。

pyenv global 3.8.1
タイトルとURLをコピーしました