2013-06-13 8 views
79

私は、* .ipynbファイルを真実のソースとして使用し、予定されたジョブ/タスクのためにそれらをプログラムで「コンパイル」することを検討しています。IPythonノートブックをコマンドライン経由でPythonファイルに変換するにはどうすればよいですか?

これを行うために私が理解する唯一の方法は、GUI経由です。コマンドラインでそれを行う方法はありますか?

+0

あなたが「真のソース」とはどういう意味ですか? IPythonノートブックはjsonファイルです。読み込んでPython辞書として操作することができます。ソースコードの場合、 'cell_type'が 'code'に等しいところで' input'キーを反復する必要があります。この[スキーム]を見てください(http://i.imgur.com/Z0jSc.png) – theta

+0

まあ、.ipynbは.pyファイルではなくリポジトリに保存したいと思います。そこで、 'ビルドステップ'として.ipynbを.pyファイルに変換し、自動化されたシステムで実際に使用するようにします。 私はちょうどjsonをロードしてコードセルのみを出力することができましたが、すでにそこに何かがあるかどうか疑問に思っていました:) –

答えて

29

--scriptフラグを持つスタートノートは、.pyファイルを保存するたびに.ipynbと一緒に保存されます。 github/ipython/nbconvertを見てください。現在はIPython自体にマージされていますので、docが正確であるとは思わないでください。この記事の執筆時点では、中<形式>(<形式> <file.ipynb> ./nbconvert)[パイソン、ラテックス、値下げ、full_html、...])

あなたがすることもできます(などipynbはjsonです)、ロードしてループし、現在の名前空間のevalコーデックをループします。ここにはインターネット上の例やgithubに関するIPythonのwikiがあります。

この回答は古すぎます。以下の@williampliの回答をご覧ください。

+0

ありがとう、ありがとうございます。これは私が探していたものです:) –

+1

これは受け入れられた答えですが、 '--script'は[よく評価されていません]です(https://github.com/ipython/ipython/issues/3295#issuecomment-17678062)。 Jupyterの(サポートされている)['nbconvert'](http://nbconvert.readthedocs.org/en/latest/)に基づく[williampliの答え](http://stackoverflow.com/a/19779226/134610) 。 – duozmo

+0

リンクが壊れています – denfromufa

158

あなたはPythonスクリプトに出力しますが、保存するたびにしたくない、またはあなたはIPythonカーネルを再起動したくない場合は、次の

コマンドライン上では、nbconvertを使用することができますハックのビットとして

$ jupyter nbconvert --to script [YOUR_NOTEBOOK].ipynb 

あなたも(任意のコマンドライン引数に使用)事前保留!でIPythonノート上記のコマンドを呼び出すことができます。ノートブック内部:added

!jupyter nbconvert --to script config_template.ipynb 

--to script前に、オプションが--to pythonまたは--to=pythonだったが、それは、言語に依存しないノートブックシステムへの移行でrenamedました。

+4

保存するたびに1つずつ保存したい場合は、jupyterで保存前または保存後のフックで 'nbconvert'を起動できます:' ContentsManager.pre_save_hook' abd 'FileContentsManager .post_save_hook'。あなたはポストセーブフック 'jupyter nbconvert --to script [notebook]'を追加します。 – jaimedash

+1

逆を行う方法、つまり、Pythonスクリプトからノートブックに変換する方法はありますか? ex - セルに解析されるいくつかの特殊なドキュメントストリングを持っていますか? –

+1

フォルダ 'jupyter nbconvert --to script/path/to/notebooks/*。ipynb'にあるすべてのノートブックを変換する – openwonk

3

これはIPython APIから実行できます。ここで

from IPython.nbformat import current as nbformat 
from IPython.nbconvert import PythonExporter 

filepath = 'path/to/my_notebook.ipynb' 
export_path = 'path/to/my_notebook.py' 

with open(filepath) as fh: 
    nb = nbformat.reads_json(fh.read()) 

exporter = PythonExporter() 

# source is a tuple of python source code 
# meta contains metadata 
source, meta = exporter.from_notebook_node(nb) 

with open(export_path, 'w+') as fh: 
    fh.writelines(source) 
9

はipython使用せずに、V3またはV4 ipynbからコードを抽出するために迅速かつ汚い方法です。細胞の種類などをチェックしません。

import sys,json 

f = open(sys.argv[1], 'r') #input.ipynb 
j = json.load(f) 
of = open(sys.argv[2], 'w') #output.py 
if j["nbformat"] >=4: 
     for i,cell in enumerate(j["cells"]): 
       of.write("#cell "+str(i)+"\n") 
       for line in cell["source"]: 
         of.write(line) 
       of.write('\n\n') 
else: 
     for i,cell in enumerate(j["worksheets"][0]["cells"]): 
       of.write("#cell "+str(i)+"\n") 
       for line in cell["input"]: 
         of.write(line) 
       of.write('\n\n') 

of.close() 
+0

Jupyterツールをインストールしたくない場合には、最高の答えです。 – dacracot

5

前の例に従うが新しいnbformat libのバージョンと:コードのSpawnriderの最後の行@

import nbformat 
from nbconvert import PythonExporter 

def convertNotebook(notebookPath, modulePath): 

    with open(notebookPath) as fh: 
    nb = nbformat.reads(fh.read(), nbformat.NO_CONVERT) 

    exporter = PythonExporter() 
    source, meta = exporter.from_notebook_node(nb) 

    with open(modulePath, 'w+') as fh: 
    fh.writelines(source.encode('utf-8')) 
2

fh.writelines(source.encode('utf-8')) 

は「TypeError例外を与える:書き込み()の引数intでなくstrでなければなりません '

しかし、

が動作します。再帰的にPythonスクリプトに現在のディレクトリ内のすべての* .ipynb形式のファイルを変換するための

2

for i in *.ipynb **/*.ipynb; do 
    echo "$i" 
    jupyter nbconvert "$i" "$i" 
done 
+0

Jupiter 4.4.0でデフォルトのHTML出力を避けるには、 '--to script'引数を追加する必要がありました。 – trojjer

関連する問題