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