VSCode/WSL上の開発環境構築 Pyenv / Python

今回はWSL環境下にPythonの開発環境を導入して、ホストのWindows側に導入した
VSCodeからソースコードの編集、デバッグ実行を行えるように設定します。

Pythonのインストール方法にはいくつかの方法がありますが
今回は Pyenvを用いたオーソドックスな方法を使用します。

本記事は

  • Basic1
  • Basic2
    の手順でWSL及びVSCodeが設定されていることを前提としています。

Steps

  1. 依存パッケージのインストール
  2. Pyenvの導入
  3. Pythonの導入
  4. IPython / Jupyter の導入
  5. VSCode Python Extensionの導入
  6. 動作検証

1: 依存パッケージのインストール

Pyenvを用いたPythonのインストールでは、そのまま動作するPython処理系のバイナリを
ダウンロードするのではなくソースコードからのビルドが発生するため、
Cコンパイラやmakeといったツール群やその他 SSLや zlibなどの依存パッケージを
あらかじめインストールする必要があります。

インストールには以下のコマンドを実行します。

$ sudo apt update
$ sudo apt install git gcc make zlib1g-dev libssl-dev  bzip2  libbz2-dev libreadline-dev 

2:Pyenvの導入

PyenvはPython処理系の管理を支援するツールです。

現行Pythonには大きく 2.x系と3.x系があることは有名ですが、他にもマイナーバージョンの
違いや対応するライブラリを使用する際にPython処理系のバージョン管理が必要になる
場合があります。

Pyenvは様々なバージョンのPythonを独立してインストールして共存させ、切り替えて
利用が可能です。

Pyenvの導入

以下のコマンドを順に実行します。

$ git clone https://github.com/yyuu/pyenv.git ~/.pyenv
$ 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

まず
git cloneコマンドで githubから最新の pyenvを取得してホームフォルダ以下に保存します。

次に
ダウンロードしたプログラムを任意のディレクトリでシェルから呼び出すには
プログラムの実行ファイルの存在するディレクトリを事前に環境変数PATHに記録する必要が
あるため、これを設定しています。

.bash_profileはシェルが起動する際に自動で毎回実行されるスクリプトファイルですので
このファイルにPATHの登録処理を追加しています。

最後に sourceコマンドで 変更した.bash_profileをリロードしています。

動作確認

$ pyenv install --list
Available versions:
  2.1.3
  2.2.3
  .....

上記コマンドでpyenvで導入可能なPython処理系のバージョンや
その他ライブラリ管理ツールなどの一覧が表示されたら成功です。

3:Pythonの導入

依存パッケージが正しく導入され、Pyenvが正しく設定されていれば
Pythonの導入は簡単です。

まず

$ pyenv install --list
・・・
  3.7.4
・・・

まず pyenvで取得可能な Python3系のバージョンを確認します。
記事投稿現在の最新版は 3.7.4でしたのでこれを使用します。

$ pyenv install 3.7.4

このコマンドで Pythonの導入は完了します。
導入に成功したら以下のコマンドを使って 3.7.4をデフォルトのバージョンにします。

$ pyenv global 3.7.4 

これでPythonの導入が完了しました。

global に 3.7.4 を指定しているのでpython または python3 コマンドで
3.7.4 の Pythonインタプリタが起動すれば導入成功です。

4:IPython / Jupyter の導入

IPythonの導入

Step3までで基本的なPythonの開発を開始することができます。
ただ、標準のインタプリタが提供するコーディング支援機能は、最低限の行編集機能のみです。

インタプリタでありながら、コードの入力補間や構文強調(シンタックスハイライト)が利用できる
IPythonを利用するのがデファクトスタンダードとなっているような気がするので
こちらも導入していきます。

Pythonには関連する支援ツールやライブラリを簡単に導入できるパッケージマネージャ
pip が付属しているので、 Pyenvで適切にPythonが導入されていれば簡単に
追加機能をインストールできます。

$ pip3 install ipython

で ipythonの導入は完了です。

$ ipython

で ipythonの対話シェルが起動できるようになります。

Jupyter notebookの導入

次に Jupyter notebook を導入します。

Jupyter notebookはブラウザから操作できる開発環境を提供するソフトウェアで、
1つのファイル内に

  • テキスト形式のメモ
  • TeX形式の数式
  • Pythonソースコード
  • Pythonソースコードの実行結果
  • 画像

などを詰め込むことができるというユニークな機能を備えています。

特に、pythonが描画したグラフをその場で表示する機能があり、
データサイエンス分野では重宝されています。
対話シェルとしても優秀なのでこれも導入しておくことをお勧めします。

インストールはpipで一発です。

$ pip3 install jupyter jupyter_contrib_nbextensions

5:VSCodeの設定

ここまで設定できたらあともう少しです。
VSCodeには Pythonのコーディング支援機能や、Jupyter notebookと連絡して
VSCode上で Jupyterの機能を利用した対話的な出力などを行うExtensionがあります。

左下、VSCodeがWSL:Ubuntu に接続していることを確認して、
Extensionから python を検索、似たようなExtensionがいつか表示されますが
おそらく一番上に表示される Microsoft謹製のExntensionを選択し
Install on WSL:Ubuntu を実行します。

エラーなく処理が終われば成功です。

6:動作検証

ここまでの環境構築が済めば快適にPythonを用いた開発が行えるはずです。
試しに動作させてみます。

$ cd ~
$ mkdir projects
$ cd projects
$ mkdir test1

おせっかいかもしれませんが、まず、WSLのターミナル上で
まずホームフォルダに移動して projects というディレクトリを作っておきます。

project に移動してさらに test1 というディレクトリを作成しました。

VSCode に移動して左一番上のファイルアイコンをクリックして
Open Folderから先ほど作成した projects > test1 を順に選択して、
作業用ディレクトリを指定します。

作業用ディレクトリが開けたら

new FIle アイコンをクリックしてファイルを新規に作成します。
今回は hello.py という名前にします。

ここで、もし下部に表示されている利用中のPythonのバージョンが
pyenvで設定したものと違った場合、Ubuntuにデフォルトでインストールされている
バージョンを使っているので、pyenvでインストールしたバージョンに切り替えます。

画像では 3.7.4 が2種類見えていますが、
2つ目 shim/python の方は global に指定した
バージョンを使うことを意味しています。
つまり、pyenvで他のバージョンをインストール、globalで利用するバージョンを変更すると
3.7.4以外のバージョンに置き換わっていきます。

3つ目の 3.7.4:pyenv の方はバージョン指定になるので
他のバージョンがインストールされていても常に 3.7.4 を使い続けることになります。

今は 3.7.4 しか入っていないのでどちらでも大丈夫です。

pyenvでは追加したライブラリなどもバージョンごとの独立管理となるので
もしpyenvで違うバージョンをインストールしていつも使えているライブラリが見えなく
なったりした場合、この設定を確認してみてください。

Hello World!

というわけで
ようやくコードが書けます(;´∀`)

一度環境を作っておけばあとは 新規ファイル作成からの手順だけ実行すればいいので
許してください

先ほど作成した hello.py に以下のコードを記述します

#!/usr/bin/env python3

print('hello! Python!!')

一行目は shebangというLinuxやMacなどのUNIX系のOSで用いられるトリックの1つです。
Pythonのプログラムコードの実態はただのテキストファイルなので、shebangによって
そのテキストデータが python処理系によって処理されることを期待していることを
明示しています。
この記述によって、ただのテキストファイルをあたかもプログラムのように起動することが
できます。(shebangで指定された環境にテキストが自動でロードされる)

プログラムの実態は1行で
print('hello! Python!!') で文字列表示の基本機能を呼び出しています。

プログラムが完成したら、右上⏵ボタンでプログラムを実行することができます。
自動でターミナルが立ち上がって期待通り hello! Python!! が表示されたら成功です。

ちなみに

↑作成したプログラムは

$ chmod +x  (ソース名)

でプログラムとして実行することを許可することで以後コマンドとして
起動することができるようになります。(これが shebang を設定した効果です)

Jupyter on VSCode

次に Jupyterを利用した方法も試してみます。
まず WSLのターミナルを立ち上げて以下のコマンドを実行します。

$pip3 install numpy matplotlib

numpy は 多次元配列を用いた数値計算などで利用されるモジュール
matplotlib はグラフプロットを行うモジュールです。

ともに pip3 を利用してインストールします。
モジュールの追加後は一度 VSCodeを閉じて開きなおした方が安定します。

新しく memo.py を作成して以下のコードをコピーしてください

#%%
print('hello! Jupyter!!')

#%%
import numpy as np
import matplotlib.pyplot as plt

x = np.arange(-5, 5, 0.1)
y = np.sin(x)
plt.plot(x, y)

正しく設定されていれば、ソースコードの #%% の直前に
Run Cell | Run Below | Debug Cell | Go to
などの表示が追加されるはずです。

Run Cell をクリックすると #%% で囲まれた領域のコードが即時実行され
新たに開いた右画面に結果が表示されます。

2個目の cell では import を使って先ほど pipで導入した
numpy / matplotlib の機能を利用しています。

-5から5まで 0.1 刻みの数列 x を生成、
xの各要素を sin() にかけた結果の数列を y として
x,y プロットをするような命令です。
当然グラフはサインカーブを描きます。

通常画像を生成するようなライブラリでは、生成したグラフ画像を
適切に出力するような処理が必要ですが

matplot / jupyter では Run Cellするだけでちゃんと対話ログのなかに
画像を表示してくれます。

これでPythonでの開発環境の構築が完了しました。
データサイエンスなどの利用では十分な設定になっているかと思います。

コメントを追加する