WSL の Python 環境を更新 (pyenv -> venv)

Python の環境管理を pyenv + Anaconda から venv へと移行しました。そして、プロジェクトごとに仮想環境を作成し、必要なパッケージをプロジェクトごとに管理するようにしました。また、ついでに WSL の Ubuntu を 16.04 LTS から 18.04 LTS へとアップデートしました。

環境

  • WSL (Ubuntu 16.04 LTS)

移行の理由

venv は Python 標準ライブラリ

venv は Python3.3 から公式に標準ライブラリとして採用されました。そのため、今後は(既に) Python のパッケージ管理の標準として venv が使われていくことが予想されます。

郷に入っては郷に従えの精神から、私も venv を試してみようと思いました。

Python3 の最新版のみで十分

私が以前使用していた pyenv の大きな強みは、簡単に Python のバージョンを変更できる点にあります。しかし、私は Python を主にデータ解析のみに使用しており、Python のバージョンを変更するという機会が全くありませんでした。そのため、私には pyenv はオーバースペックであると判断しました。

一方、アプリやライブラリの開発をされている方には pyenv は非常に便利なツールだと思います。また、 Pyhon2 系を使用される場合、 venv は対応していないため、その前身である vertualenv を使用する必要があります。

Anaconda は大きすぎて把握できない

Anaconda は、よく使うであるライブラリを一通りそろえており、ライブラリ同士の依存関係も解決してくれる素晴らしいディストリビューションです。初学者の方や、とりあえず Python を使ってみたいという用途には Anaconda は最適です。しかし、Anaconda は様々な使用を想定しているため、非常に多くのライブラリが含まれており、全体の把握が困難です。また、私の使用用途では、全く使用していないライブラリも多数含まれていました。

今後、GCP などのクラウド環境や、Docker などで環境を使用していきたいと考えており、容量やダウンロード時間を小さくするために 必要最低限の Python 環境を自力で作れるようになりたいため、Anaconda の使用を辞めました。

Ubuntu 16.04 で Python3.7 のインストールが少し手間だった

2019年1月15日現在の Python の最新版は Python3.7 です。Ubuntu 16.04 でも Python3.7 は デフォルトの apt レポジトリに含まれていません。もちろん、自身で PPA (パーソナル・パッケージ・リポジトリ) を追加してインストールすることもできるのですが、Ubuntu 18.04 ではデフォルトのリポジトリに Python 3.7 が含まれています。私の環境では、 Ubuntu 16.04 にこだわる理由はなかったため、これを機にアップデートを行いました。

pyenv + Anaconda のアンインストール

私の環境 では、 Anacondapyenv の下で管理しているため、 pyenv をアンインストールすれば、 Anaconda も一緒にアンインストールされます。

pyenv のアンインストール

# アンインストール前の環境
$ python --version
Python 3.6.7 :: Anaconda, Inc

# .pyenv を削除
$ rm -rf $(pyenv root)

後処理

~/.bashrc に記述されて以下の pyenv 設定を削除

export PYENV_ROOT = "$HOME/.pyenv"
export PATH = "$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"

その後、.bashrc を再読み込みし、Python のバージョンが変更されていることを確認します。

$ source ~/.bashrc
$ python --version
Python 2.7.12

Ubuntu のアップデート

現在のバージョンの確認

$ cat /etc/os-release
NAME="Ubuntu"
VERSION="16.04.4 LTS (Xenial Xerus)"  # ここで現在のバージョンが確認できます
...

update-manager-core の prompt が lts になっていることを確認し、 do-release-upgrade を実行してアップデートを行います。

$ sudo vim /etc/update-manager/release-upgrades
...
Prompt=lts
...

$ sudo do-release-upgrade -d

この処理は数時間ほどかかるため、時間があるときに実行してください。

Python3.7 の準備

Python3.7 のインストール

$ sudo apt install python3.7 python3.7-dev
$ python3.7 --version
Python 3.7.1

pip3 のインストール

$ curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
$ sudo python3.7 get-pip.py
$ pip --version
pip 18.1 from /usr/local/lib/python3.7/dist-packages/pip (python 3.7)

Python のデフォルトバージョンを変更

インストールした Python3.7 使うためには python3.7 と毎回タイプする必要があります。これを python で 3.7 を実行するように変更します。

デフォルトでは、 python では python2 系が実行され、 python3 では python3.6 系が実行されます。

$ python --version
Python 2.7.15rc1

$ python3 --version
Python 3.6.7

$ python3.7 --version
Python 3.7.1

そこで、ユーザのホームディレクトリから、python3.7 にリンクを張るように設定を行います。

# Python3.7 の実態を確認
$ which python3.7
/usr/bin/python3.7

# ホームディレクトリから python3.7 にリンクを作成
$ mkdir -p $HOME/bin
$ ln -s /usr/bin/python3.7 $HOME/bin/python

# bash を再起動
$ source ~/.bashrc

# リンクが正しく張られているか確認
$ python --version
Python 3.7.1

参考