Pythonスクリプトファイル (.pyファイル)

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)] の順に選択します。

 ipynbファイルの内容を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 などのコマンドプロンプトから、ipynb ファイルを以下の構文で py ファイルに変換することもできます。

jupyter nbconvert --to python test.ipynb

 

pyファイルの実行

 マジックコマンド %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 されたときにだけ実行されることになります。
 

【技術英語豆知識】executable (実行可能な)
 executable は「実行可能な、実行形式の」という意味の単語です。名詞の execution (実行) に「~できる」という意味の接尾辞 able を付けて executable (実行可能な) となります。

  executable file (実行ファイル)
  executable code (実行形式コード)
  executable programs (実行可能なプログラム)

などの表現が IT 技術英文によく登場します。動詞の execute は「実行する」という意味があり、

  execute a script (スクリプトファイルを実行する)
  execute program from Python (Python でプログラムを実行する)

というような表現で用います。