知に至る病

お勉強したことを忘れないように書き留めています。

WSL の Python で venv による仮想環境の作成がエラーになる

仮想環境の作成に失敗

WSL の Python で仮想環境を作ろうとしたら以下のエラーが出ました。

$ python3 -m venv .venv
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: ['/path/to/project/.venv/bin/python3', '-Im', 'ensurepip', '--upgrade', '--default-pip']

エラーメッセージによると,仮想環境を作るためには python3-venv をインストールする必要があるとのことです。 メッセージの指示に従い,下記のコマンドを実行してインストールしたところ,無事に仮想環境を作れるようになりました。

$ sudo apt install python3-venv

ensurepip が無効化されている

エラーメッセージにある通り,このエラーは Ubuntuensurepip が無効化されているために起こっているようです。 グローバル環境に pip が入っていると意図せずシステムを壊してしまう可能性があるため,DebianUbuntu では ensurepip が無効化されているとのことです。

$ python3 -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.

python3-venv をインストールしたことで仮想環境内では pip が使えるようになったのですが,グローバル環境では pip は使えないままです。

(.venv) $ pip3 --version
pip 8.1.1 from /path/to/project/.venv/lib/python3.5/site-packages (python 3.5)

$ pip3 --version
The program 'pip3' is currently not installed. You can install it by typing:
sudo apt install python3-pip

グローバル環境で pip を使いたい場合は,python3-pip をインストールすればよいようです。 以下のコマンドを実行すると pip3 が使えるようになりました。

$ sudo apt install python3-pip