私は IPython を使用しており、あるノートブックから別のノートブックから関数を実行したいと考えています (異なるノートブック間でカット アンド ペーストする必要はありません)。これは可能であり、合理的に簡単に行うことができますか?
10 に答える
IPython 2.0 では、ノートブック間でコードを簡単%run 'my_shared_code.ipynb'
に共有できます。たとえば、http://nbviewer.ipython.org/gist/edrex/9044756を参照してください。
また、セルのコンテンツをファイルに書き込み (そして古いコンテンツを置き換える -> コードを更新)、別のノートブックにインポートできる "書き込みと実行" 拡張機能もあります。
https://github.com/minrk/ipython_extensions#write-and-execute
1 つのノート (2 つのセル) で
%reload_ext writeandexecute
--
%%writeandexecute -i some_unique_string functions.py
def do_something(txt):
print(txt)
そして、他のノートブックで:
from functions import do_something
do_something("hello world")
qtconsole を使用して同じカーネルに接続できます。起動時にこれを指定するだけです:
ipython qtconsole --existing kernel-0300435c-3d07-4bb6-abda-8952e663ddb7.json
長い文字列のノートブックを起動した後の出力を見てください。
私は他のノートブックからノートブックを呼び出します。次のトリックを使用して、「パラメーター」を他のノートブックに渡すこともできます。
"report_template.ipynb"の最初のセルにparams辞書を配置します。
params = dict(platform='iOS',
start_date='2016-05-01',
retention=7)
df = get_data(params ..)
do_analysis(params ..)
そして、別の (より高い論理レベルの) ノートブックで、次の関数を使用して実行します。
def run_notebook(nbfile, **kwargs):
"""
example:
run_notebook('report.ipynb', platform='google_play', start_date='2016-06-10')
"""
def read_notebook(nbfile):
if not nbfile.endswith('.ipynb'):
nbfile += '.ipynb'
with io.open(nbfile) as f:
nb = nbformat.read(f, as_version=4)
return nb
ip = get_ipython()
gl = ip.ns_table['user_global']
gl['params'] = None
arguments_in_original_state = True
for cell in read_notebook(nbfile).cells:
if cell.cell_type != 'code':
continue
ip.run_cell(cell.source)
if arguments_in_original_state and type(gl['params']) == dict:
gl['params'].update(kwargs)
arguments_in_original_state = False
run_notebook("report_template.ipynb", start_date='2016-09-01')
このコマンドは、「report_template」ノートブックの各セルを実行し、2 番目のセルから始まるparamsディクショナリの関連キーをオーバーライドします。