新しいことにはウェルカム

技術 | 電子工作 | ガジェット | ゲーム のメモ書き

WSLにpyenvでPython3+Jupyter Notebook環境を構築する

WSL(Windows Subsystem for Linux)のUbuntuのバージョンが16と古くなってきたので、バージョン18のUbuntuを新たにインストールしました。

それに合わせて、Python3+Jupyter Notebookもセットアップし直したのですが、途中いくつかつまづいたので、今後の再セットアップ用に、Python環境構築についてのメモを記します。

Python環境に関する基本

  • Pythonはバージョン3と2の2系統があります。
  • バージョン3と2では、コマンドが違うので、1つのPCに2つとも入れる事が可能です。
    • (2つは共存できず、Pythonバージョン切り替えツールを用いで共存させるものだと勘違いしていてハマりました)
  • pipとはいわゆるモジュール管理ツールで、Pythonのモジュールのインストールはpipを使って行います。
  • Pythonのモジュールインストールは、
    Python3の場合python3 -m pip install <モジュール名>
    Python2の場合python -m pip install <モジュール名>
    で行います。

Pythonバージョン違い

Pythonバージョン3・2で、主に下記の違いがあります。

項目 バージョン3 バージョン2
実行コマンド python3 python
pipモジュールインストール方法 python3 -m pip install <モジュール名> python -m pip install <モジュール名>
Ubuntu pythonパッケージ名 python3 python
Ubuntu pipパッケージ名 python3-pip python-pip

Jupyter Notebook

インストール

Jupyter Notebookはpipを使ってインストールします。

python3 -m pip install jupyter

実行

実行は直接「jupyter」コマンドで行います。

jupyter notebook

Ubuntuに関する特記事項

  • Ubuntu18にはデフォルトではPython3しか入っていません。
  • Ubuntu18にはデフォルトではpipは入っていません。

なので、Jupyter Notebookをインストールするには、まず下記で、Python3のpipをインストールしておき、その後、Jupyter Notebookをインストールします。

sudo apt-get install python3-pip
python3 -m pip install jupyter

注意

Jupyter Notebookをインストールすると、~/.localjupyterが置かれ、jupyterコマンドはそのjupyterを起動するようになります。(設定は~/.profileで行っている)

後述するPythonバージョン切り替えツールを使っても、jupyter~/.localにある方を参照している場合は、システムでインストールされているバージョンのPythonが使用されるので、Pythonバージョン切り替えツールを使う場合は、jupyter~/.localの方を指さないようにする必要があります。(これに気づかずハマりました)

pyenv

上記でPython3+Jupyter Notebook 環境をインストールできるのですが、その時のPythonのバージョンはUbuntuのパッケージでインストールしたPython3のバージョンになります。

UbuntuのパッケージのPythonのバージョンは、最新から少し古いので、任意のPythonバージョンでJupyter Notebookが使用できるよう、Pythonバージョン管理ツールの「pyenv」を導入します。

pyenvとは?

  • pyenvとは、Pythonのバージョンを任意に切り換えることのできるツールです。
  • 仕組みは、$PATHの前にpyenvのパスを通すことにより、システムのPythonが参照されるのを横取りして、任意のバージョンのPythonを呼び出すようにします。
  • ユーザーデフォルトのPythonバージョンを任意の物に設定したり、フォルダ毎にPythonバージョンを任意の物に設定することができます。

pyenvインストール

1. 必要ファイルをホームディレクトリの「.pyenv」にダウンロード

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

2. 「.bashrc」または「.bash_profile」に下記を追記

export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
if command -v pyenv 1>/dev/null 2>&1; then
    eval "$(pyenv init -)"
fi

3. シェル再起動

echo $PATHを実行すると分かるのですが、$PATHの先頭に「~/.pyenv/shims」が追加されています。

それにより、システムのPythonは隠蔽され、Pythonを起動しようとするとpyenvで管理された、「~/.pyenv/shims」配下に置かれたPythonが呼ばれるようになります。

pyenvの使用方法

Ubuntuに関する特記事項

pyenvでPythonをインストールする際、下記のパッケージを事前にインストールしておく必要があります。

sudo apt-get install make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev

この内容はpyenv wikiに記載されている(これに気づかずハマりました)ので、Pythonインストールでパッケージが足りない旨のエラーが出た際は参照してください。(Ubuntu以外のOSの場合もWikiに記載されています)


ますpyenvで使いたいバージョンのPythonをインストールし、次に、インストールしたPythonを、ユーザーデフォルトや指定したディレクトリ毎に割り当てます。

インストールできるPythonのバージョン一覧表示

pyenv install —list

指定したバージョンのPythonをインストール

pyenv install <バージョン名>

この時、pipもインストールされます。

インストールされているバージョン一覧表示

pyenv versions

ユーザーデフォルトのPythonバージョンを、指定したバージョンにする

pyenv global <バージョン名>

カレントディレクトリ以下でのPythonバージョンを、指定したバージョンにする

pyenv local <バージョン名>

利用例

例)Pythonバージョン3.7.2でJupyter Notebook

pyenv install 3.7.2
pyenv local 3.7.2
python3 -m pip install jupyter
jupyter notebook

例)Pythonバージョン2.7.15と3.7.2をインストールして、ユーザーデフォルトで、コマンド「python」にバージョン2.7.15を割り当てる

Pythonバージョン3と2両方を使えるようにしたい場合があります。

そんな場合はpyenv global <バージョン2> <バージョン3>またはpyenv local <バージョン2> <バージョン3>と、2バージョン並べて記載します。

すると、両方のバージョンが使えるようになり、2つ並べたバージョンの内、最初に指定したバージョンに「python」コマンドが割り当てられます。

2つ目のバージョンは3なので「python3」コマンドに割り当てられます。

$ pyenv install 2.7.15
$ pyenv install 3.7.2
$ pyenv global 2.7.15 3.7.2
$ python -V
Python 2.7.15
$ python3 -V
Python 3.7.2

困った時は

どこの・どのバージョンのPython・Juypterが呼ばれているのかを調べれば、おかしい原因が見つかるかと思います。

  • Pythonのバージョン確認は
    Python3の場合python3 -V
    Python2の場合python -V
    で行います。
  • プログラムからPythonのバージョン・パスを知るには下記で行えます。
    特にJupyter Notebookから、実行されているPythonのバージョンを知るのに有用です。
import sys
print(sys.version_info)
print(sys.path)
  • 環境によってコマンド「python」に割り当てられているPythonのバージョンが3の場合があります。
    ですので、python -Vで「python」に割り当てられているバージョンを確認しておいた方がベターです。
  • コマンドがどのパスに割り当てられているかを確認するにはwhich <コマンド名>を用います。
    例えば「python」のパスを知るにはwhich pythonと打ちます。
    例えば「jupyter」のパスを知るにはwhich jupyterと打ちます。
    特にpyenvを使用している時、そのPython・Jupyterがシステムのものか、pyenvのものかを知るのに有用です。

関連カテゴリー記事

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com