Jupyter notebookでimportできるの?
一番よくわからなかったのが、自分でつくったモジュールをインポートするにはどうしたらいいのか。普段から使っている人には常識かもしれませんが、目からウロコだったので記事にしてみました。
JupyterNotebookについては、Pythonやanaconda関係をググれば必ず出てくるので参考にしてください。
JupyterNotebookは使い方が普通のエディタとは随分ちがうので食わず嫌い。pythonのお勉強にVisualStudioCode、最近はspyderを使っていました。セル内のプログラムをかんたんに実行して結果を表示。ノートは拡張子.ipynb 形式のファイルとして保存するのはわかりました。じゃあ、foo.py のなかに from bar import * って書いて、bar.pyを読み込む方法がわからなかったのですが。
解決方法は、.ipynb形式で作ったノートブックを.py形式に書き出せばよい。[File]-[Download as]-[Python .py]を選んで.ipynbファイルがあるフォルダと同じところに書き出せば、ノートブックからちゃんとimportしてくれます。でも、保存するたびに書き出すなんて面倒。
面倒なら自動化すればいい
この.py形式で書き出す部分を自動化することで、ノンストレスに使えました。
ちゃんとbarと名前をつけたノートブックの変数を、fooのノートブックからimportできています。
こちらのQiitaの記事がズバリ回答。
Jupyterの設定ファイル「~/.jupyter/jupyter_notebook_config.py」に.py形式に自動で書き出すスプリクトを追加するというわけです。
import os
from subprocess import check_call
def post_save(model, os_path, contents_manager):
"""post-save hook for converting notebooks to .py scripts""" if model['type'] != 'notebook':
return # only do this for notebooks
d, fname = os.path.split(os_path)
check_call(['jupyter', 'nbconvert', '--to', 'script', fname], cwd=d)
check_call(['jupyter', 'nbconvert', '--to', 'html', fname], cwd=d)
c.FileContentsManager.post_save_hook = post_save
上のスクリプトだと、同時に.htmlファイルも出力されます。不要なら check_call(['jupyter’, 'nbconvert’, '–to’, 'html’, fname], cwd=d) の行を消すか、前に#をつけてコメントアウトすればよいでしょう。
ディスカッション
コメント一覧
まだ、コメントがありません