WSL (Ubuntu 18.04) + Python 3.7 で venv による仮想環境構築にエラーが出た時の対処法

Ubuntu 18.04 LTS の WSL (Windows Subsystem for Linux) で Python 3.7 を使用して venv による環境構築を行った際にエラーが出た場合の対処法をメモとして残しておきます。

環境

  • WSL (Ubuntu 18.04)
  • Python 3.7

venv 起動によるエラー

エラー画面

venv を使用して仮想環境を作成しようとした際に以下のエラーが表示されました。

$ python -m venv [project dir]
The virtual environment was not created successfully because ensurepip is not
available. On Debian/Ubuntu systems, you need to install the python3-venv
package using the following command.

    apt-get install python3-venv

You may need to use sudo with that command. After installing the python3-venv
package, recreate your virtual environment.

Failing command: ['/home/tatsu/doc/testdir/bin/python', '-Im', 'ensurepip', '--upgrade', '--default-pip']

デフォルトの Ubuntu では pip が無効化されている?

ハッキリとした原因は分からなかったのですが、どうやら WSL または Ubuntu ではシステム保護のために pip がインストールされていない、もしくはインストールされているとしても無効化されているようです。そのため、venv による仮想環境を作成しようとしたときにエラーが出たと思われます。

$ python -m ensurepip
ensurepip is disabled in Debian/Ubuntu for the system python.

Python modules for the system python are usually handled by dpkg and apt-get.

  apt-get install python-<module name>

Install the python-pip package to use pip itself. Using pip together
with the system python might have unexpected results for any system installed
module, so use it on your own risk, or make sure to only use it in virtual
environments.

そこで、 venv を実行した際のエラーメッセージにも書かれていますが、 python3-venv のインストールを実行します。

python3-venv のインストール

Python と揃えたバージョンの python3-venv が必要

しかし、私の環境では python3-venv をインストールしただけでは venv が機能せず、 Python のバージョンに合わせた python3.7-venv をインストールする必要がありました。

# python3-venv のインストールでは再びエラーが表示された
$ sudo apt install python3-venv

# 使用している Python と同じバージョンの python3.7-venv が必要
$ sudo apt install python3.7-venv

もしかすると、python3-venv と python3.7-venv の両方必要かもしれない

わたしのメイン環境では、 python3.7-venv のインストールのみで venv のエラーは解消されましたが、同じ構成のサブ PC (WSL/Ubuntu18.04 + Python3.7) では python3-venvpython3.7-venv の両方をインストールしないと venv による仮想環境構築が正しく実行されませんでした。

python3.7-venv をインストールしてもエラーが解消されなかった場合は、両方インストールすることを試してみてください。

参考