3. 対話型の実行方法

これまではコマンドラインで完結した一つのPythonスクリプトを実行する方法を用いてきた.ここではPythonの大きな強みの一つである対話的な実行方法について紹介しよう.ただし,対話的と一口で言っても環境は様々なので,あくまでもいくつかの代表的な実行環境を紹介するにとどめる.筆者のおすすめは一昔前まで IPythonJupyter Notebook であったが, Jupyter Lab が両者を同時に使える大変便利な環境なので,今ではこちらをおすすめするべきかもしれない.(ただし筆者は Jupyter Lab から Visual Studio Code に改宗したクチである.)とりあえず試したいだけのときにはブラウザ以外には何もインストールが必要ない Google Colaboratory (Colab) が便利である.

3.1. Pythonの対話モード

ターミナルで python とだけ打ってみると以下のように表示され,キーボード入力待ちの状態になるであろう.

1$ python
2Python 3.7.6 (default, Jan  8 2020, 19:59:22)
3[GCC 7.3.0] :: Anaconda, Inc. on linux
4Type "help", "copyright", "credits" or "license" for more information.
5>>>

Pythonはインタープリター型の言語であり,一行ずつ順に実行されることは既に紹介した通りである.したがって,対話的(interactive)に任意のPythonコードを入力して実行させることができるのである.試しに print('Hello, World !') と入力してEnterしてみると

1>>> print('Hello, World !')
2Hello, World !

のようになる.1行目のPythonのコードが実行され,2行目の出力が得られたということである.

このような対話的なPython実行環境をPythonシェルとかコンソールと呼ぶことがある.Python関係のドキュメントでは対話モードのデフォルトのプロンプト >>> (または ... )に続く行がPythonのコードを意味し,そうでない行は実行結果を意味することになっている.この文書でも特に断りのない限りはこの慣習に従うことにする.

もちろん1行では完結しない構文ブロックも入力が可能である.以下の例を見てみよう.

1>>> for i in range(5):
2...     print(i)            # 字下げ
3...                         # 空行(字下げなしでEnter)
40
51
62
73
84

2行目は for ループの中にあるため,スペースやTabキーで字下げをする.3行目は字下げをせずに空白行とすることでこの構文ブロックの終端と解釈され,ループが実行されることになる.

対話モードの便利な機能としてヒストリの利用や,ドキュメントの参照が上げられる.対話モードではbashなどのシェルと同様に過去のコマンドヒストリが記録されており,矢印キーや Ctrl-pCtrl-n で行き来することができる.ドキュメントの参照については,例えば print 関数のドキュメントを参照するには

1>>> help(print)

と入力すると

 1Help on built-in function print in module builtins:
 2
 3print(...)
 4    print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False)
 5
 6    Prints the values to a stream, or to sys.stdout by default.
 7    Optional keyword arguments:
 8    file:  a file-like object (stream); defaults to the current sys.stdout.
 9    sep:   string inserted between values, default a space.
10    end:   string appended after the last value, default a newline.
11    flush: whether to forcibly flush the stream.
12(END)

のようにドキュメントが適当なページャ(Unixコマンドのlessやmoreなど)で表示されることになる.(大抵の場合終了するには q と入力すればよい.)このように,ちょっと使い方を調べたい時には対話モードのドキュメントを参照するのが便利である.

3.2. IPython

実際にはデフォルトの対話モードをより高機能ににしたIPythonが非常に便利である.ターミナルで ipython と打つと,今度は以下のように表示されるであろう.

1$ ipython
2Python 3.7.6 (default, Jan  8 2020, 19:59:22)
3Type 'copyright', 'credits' or 'license' for more information
4IPython 7.12.0 -- An enhanced Interactive Python. Type '?' for help.
5
6In [1]:

今度は In [1]: がプロンプトとなり,入力待ちの状態になる.

基本的な使い方はデフォルトの対話モードと同じであるが,多くの便利な機能が利用できる.あまりに多いのでここでは簡単に機能を紹介するにとどめておこう.

  • Unixシェルコマンドの実行(cd, lsなどがあたかもシェル上にいるかのように実行できる)

  • emacsモード・viモード(他にも細かなキーバインド設定ができる)

  • シンタックスハイライト(コードの色付けをしてくれる)

  • 自動インデント(構文ブロックに入ると自動的にインデントされる)

  • 構文ブロックの複数行編集(構文ブロックの中では前の行に戻って編集ができる)

  • Out[N] の形での出力結果の参照(出力されたオブジェクトを後から参照できる)

  • タブキーでの補完(適宜補完および補完候補を表示してくれる)

  • ? でドキュメント参照( help(print) の代わりに print? としてもよい)

  • 様々なマジックコマンド

便利なマジックコマンドが多数存在するが,これについて紹介し始めるときりがないので各自で調べてほしい.特に %edit%hist などが便利である.

3.3. Jupyter Qt Console

IPythonのコンソールと機能的にはほぼ同じであるが,専用のGUIを持つJupyter Qt Consoleというアプリケーションも存在する.ターミナルで

1$ jupyter-qtconsole

のようにコマンドを実行するとこのアプリケーションが起動する.

_images/qtconsole.png

Jupyter Qt Console

筆者は個人的にはIPythonのコンソールの方が使いやすいと感じるが,こちらの方が好みの人もいるかもしれない.図をプロットする場合に別ウインドウでなく,このウインドウ内に埋め込むことができるというIPythonにはない利点がある.(しかし,そのような使い方であれば次に紹介する Jupyter Notebook の方が使いやすい.)

3.4. Jupyter Notebook

ターミナルで

1$ jupyter-notebook

を実行してみよう.デフォルトのブラウザが新しく立ち上がり,下のようなページが表示されるだろう.ここで右側の「New」から「Python 3」を選択してみよう.

_images/notebook1.png

Jupyter Notebookの起動画面

この状態で表示されるのが下の図のようなnotebookと呼ばれるページで,各セルにPythonのコードを入力して実行することができる.セルにフォーカスがあたった状態でShift+Enterを入力すると,そのセルのコードを実行し,出力があればそれがセルの下に表示される.なお,セルにはMarkdownと呼ばれる形式で任意のテキストや数式などを入力し表示することができる.

_images/notebook2.png

Jupyter Notebookの使用例

注釈

Jupyter Notebookは手軽にPythonコードを実行できる非常に便利な環境である.近年になってこの環境があまりにも普及したので,「Pythonの実行環境 = Jupyter Notebook」と考えている人もいるかもしれない.しかし,Notebook上で試行錯誤しながらデータの解析作業などをしていると,セルの実行順序や変数や関数の定義などの関係が分かりづらくなってしまう(というかほとんど分からなくなる).「出来た」と思っても次に開いた時には(変数が宣言されていなかったり,セルの順序がバラバラだったり)同じ結果が再現できないということが多々発生する.こうならないためには, メニューの 「Kernel」 → 「Restart & Run All」で結果が変わらないこと を確認するのが大変重要である.また,ある程度のまとまった処理はPythonのソースコード( .py ファイル)として分離して,Notebookからは import して使うようにする方が読みやすく,スッキリとするであろう [1]

なお,新たにブラウザを立ち上げたくない場合 [2] には

1$ jupyter-notebook --no-browser

とオプションを付けて起動をすればよい.デフォルトではブラウザで http://localhost:8888/ にアクセスすればJupyterのサーバーに接続することができる.8888はデフォルトのポート番号であるが --port オプションで変更することもできる.

3.5. Jupyter Lab

Jupyter LabはJupyter Notebookの次世代版という位置付けのウェブベースの統合開発・解析環境と呼べるものである.起動するにはJupyer Notebookと同じように

1$ jupyter-lab

とすればよい.

_images/jupyterlab1.png

Jupyter Labの画面

デフォルトでJupyer Notebookはもちろん,シェルのコンソール,IPythonコンソール,テキストエディタ,ファイルブラウザなどが使えるようである.タブを分割することもできるなど非常に高機能な環境である.今から使い始める人は最初からこれを使ってもよいかもしれない.

3.6. Visual Studio Code

Visual Studio Code(VSCode)は非常に高機能なエディタ・開発環境であり,VSCode内のターミナルでpython scriptを実行することもできる.また,Python extension(拡張機能)をインストールすることで,VSCode内でJupyter Notebookを使うことができるようになっている.

通常のソースコード編集はもちろん,Jupyter Notebookの実行環境としてもVSCodeは非常に便利である.個人的に考えるVSCodeの利点としては以下が挙げられる.

  • 元々がエディタなのでブラウザよりもコード編集の補助機能に長けている.

  • sshでリモートマシン上で通常のファイル編集はもちろんJupyter Notebookの編集・実行がシームレスにできる.

詳細な情報はGoogleでいくらでも見つかるのでここでは述べないが,本格的にPythonソースコード( .py )やJupyter Notebook( .ipynb )の編集・開発をするときや,リモートマシンでの作業が必須になったときにはVSCodeの利用も検討すると良いだろう.

3.7. Google Colaboratory (Colab)

Google Colaboratory はブラウザ上でPythonのコードを実行できる環境である.計算資源に制限はあるものの,Googleアカウントがあれば誰でも無料で利用できる.ほぼJupyter Notebookと同じ環境なので,まずはこれで慣れてからローカルに環境を構築しても良いだろう.

このウェブページ上のサンプルについても, 右側に表示されている colab をクリックすることで,Google Colaboratory上で開くことができる.

3.8. 様々なIDE

多くのPythonの統合開発環境(IDE)でも対話的な実行方法を備えているようだ.内部的にIPythonのシェルを使っていたり,Jupyter Notebookのようにセル単位で実行できたりする.変数ブラウザや補完,デバッガ機能などもあり,使いこなすことができればかなり有用そうなので,興味のある人はぜひトライしてみて欲しい.以下にいくつか例を挙げておこう.

  • Spyder
    Anacondaに付属するIDE.使いこなせれば便利そう.
  • PyCharm
    高機能なIDEらしい.有償版と無償版が存在する.

3.9. プロット

IPythonやJupyter Notebookを使うと対話的にデータのプロットができる.matplotlibというデファクトスタンダードに近いライブラリを使って図をプロットするには以下のようにすればよい [3]

1# numpy
2import numpy as np
3
4# matplotlibのおまじない
5from matplotlib import pylab as plt
6
7x = np.linspace(0.0, np.pi, 100)
8y = np.cos(x)**2
9plt.plot(x, y)

これをJupyter Notebookで実行すると以下のように図がNotebookに埋め込まれた形で表示される.なお,ここで用いている numpy モジュールについては NumPy配列の基本 で紹介する.

_images/notebook3.png

Jupyter Notebookでのプロット

3.10. 第3章 演習課題

3.10.1. 課題1

ターミナルからPythonの対話モードを起動し,変数の定義や四則演算, print() 関数を使った出力,ヒストリ機能などを実際に試してみよう.

3.10.2. 課題2

ターミナルからIPythonを起動し,補完機能や複数行の編集(ループ処理など)などを実際に試してみよう.Pythonのデフォルトの対話モードと比べて便利なことが実感できるであろう.またJupyter Qt Consoleとの使用感の違いや,IPythonの便利な機能を各自で調べてみよう.

3.10.3. 課題3

様々な環境でサンプルのJupyter Notebookを開いて,実際に使用感を確認しよう.

3.10.4. 課題4

各種IDEについて調べ,興味のあるものを実際にインストールし使ってみよう.なお,SpyderはanacondaによってPythonをインストールした場合にはデフォルトでインストールされている.