この記事では、Jupyter Notebook のコードを Python スクリプトファイル (pyファイル) に保存する方法について解説します。
pyファイルの作成・実行・インポート
Jupyter Notebook の [Save and Checkpoint] アイコンを押すと、拡張子 .ipynb が付された JSON 形式ファイルにコードの内容が保存されます。ipynb ファイルは Jupyter Notebook (あるいは IPython Notebook) 専用ファイルであり、一般的な IDE (統合開発環境) で用いられる Python 実行ファイルではありません。そのため、Jupyetr Notebook の実行時においても、自作モジュールなどは .py 拡張子のついた Pythonスクリプトファイル (.pyファイル) にコードを保存する必要があります。
サンプルを使って解説します。
次のコードをコピーしてコードセルに貼り付けてください。
# variables a = 10 b = 20 # function def func(): return "Do you enjoy programming?" # Output text to the screen print("Welcome to my website!") if __name__ == '__main__': print("Have a nice day!")
コードを Pythonスクリプトファイル (.pyファイル) に保存してみましょう。メニューバーの [File] から [Download as]、[Python (.py)] の順に選択します。
たとえば、現在実行中の Jupyter Notebook のファイル名が test.ipynb であるとすれば、test.py という名前のスクリプトファイル (.py ファイル) が作成されるはずです。OS が Windows であれば、ダウンロードフォルダに格納されます。作成されたファイルをメモ帳やワードパッドなどで開くと、コードセル番号 In[1] などがコメントアウトされた形で保存されていることがわかります。
#!/usr/bin/env python # coding: utf-8 # In[1]: # variables a = 10 b = 20 # function def func(): return "Do you enjoy programming?" # Output text to the screen print("Welcome to my website!") if __name__ == '__main__': print("Have a nice day!")
Anaconda Prompt などのコマンドプロンプトに
jupyter nbconvert –to python test.ipynb
と打ち込んで、ipynb ファイルを py ファイルに変換することもできます。コマンドプロンプトの扱いに慣れている人は、こちらの方が手っ取り早いかもしれません。
pyファイルの実行
Jupyte Notebook では、マジックコマンド %run を使ってスクリプトファイルを実行できます。スクリプトファイルが現在実行中の ipynb ファイルと同じフォルダにない場合はパスを指定してください。たとえば、\Users\blogcat\Downloads に test.py がある場合、次のように記述するとコードが実行されます。
%run C:\Users\blogcat\Downloads/test.py # Welcome to my website! # Have a nice day!
スクリプトファイルが同じフォルダにある場合は、ファイル名だけ入力して実行します。
%run test.py # Welcome to my website! # Have a nice day!
pyファイルのインポート
py ファイル はモジュールとして活用できます。現在実行中の ipynb ファイルと同じフォルダに test.py を移しておいてください。コードセルで test.py を import すると、ファイルに書かれた命令文がすべて実行されます。
import test # Welcome to my website!
test.py の中で変数として定義されている値 a, b は、test.a, test.b で参照できます。
print(test.a) print(test.b) # 10 # 20
test.py の中で定義されている関数 func() は test.func() で実行できます。
test.func() # 'Do you enjoy programming?'
if __name__ == ‘__main__’
test.py の最後に if __name__ == ‘__main__’ という構文があります。__name__ は Python の組み込み属性の1つであり、ファイルがモジュールとしてインポートされたときにはモジュール名が代入されます。しかし、ファイルが %run などのコマンドで実行された場合には ‘__main__’ が代入されます。したがって、この if 構文のブロックに記述された内容は、ファイルが run されたときにだけ実行されることになります。
コメント
Download asのメニューがそもそもないですよ
え? ない? この記事を書いたのが、2019年12月だから、もしかすると、Jupyter Notebook の新しいバージョンではメニューが変更されたのでしょうか。最近は Jupyter Notebook を使っていないので (Google Colaboratory をメインに使っているので)、把握していませんが、いずれにしても何か代替手段があると思うので、探してみてください。あるいは、コマンドプロンプトや Anaconda Prompt などで
jupyter nbconvert –to python xxx.ipynb
のように入力してファイル形式を変換する方法もあります (xxx はファイル名)。
【技術英語の豆知識】executable は「実行可能な、実行形式の」という意味の単語です。名詞の execution (実行) に「~できる」という意味の接尾辞 able を付けて executable (実行可能な) となります。
executable file (実行ファイル)
executable code (実行形式コード)
executable programs (実行可能なプログラム)
などの表現が IT 技術英文によく登場します。動詞の execute は「実行する」という意味があり、
execute a script (スクリプトファイルを実行する)
execute program from Python (Python でプログラムを実行する)
というような表現で用います。