web-dev-qa-db-ja.com

IPython Notebookは、すべてのセルを開いた状態で実行します

IPythonノートブックを持っていて、ノートブックを開いたときにすべてのセルが自動的に実行されるように設定しようとしています。

この動作は、ウィジェットを含むノートブックの保存された出力とは異なります。ウィジェットは、ウィジェットを含むセルが実行されたときにのみレンダリングされるようです。次の例を考えてみましょう。

from IPython.display import display
from IPython.html.widgets import IntSlider

w = IntSlider()
display(w)

セルが実行されるまで、スライダーは表示されません。

これは、ノートブックのメタデータまたは構成ファイルを介して実行できるものですか?

編集:https://try.jupyter.org/ 次のようなことをしているようです:ノートブックがページを開いたときに実行されず、開いたときに出力が表示されます。

EDIT2:例を追加します。

11
Markus Schanta

私はこれを非常に簡単に行う方法を見つけました。 nbextensionsパッケージ( https://github.com/ipython-contrib/jupyter_contrib_nbextensions )をインストールすると、拡張機能の1つは「初期化セル」と呼ばれ、特定のセルをマークして自動的に実行するようにすることができます。ノートブックがロードされます。

5
thesamovar
  1. 以下のスニペットを通常の(コード)セルに貼り付けます。
  2. それを実行し(ヒット[Ctrl + Enter])、そして
  3. ノートブックを保存します。

次にそれを(再)ロードすると、すべてのセルが実行され、チェックポイントが更新された出力とともに保存されます。

%%html
<script>
    // AUTORUN ALL CELLS ON NOTEBOOK-LOAD!
    require(
        ['base/js/namespace', 'jquery'], 
        function(jupyter, $) {
            $(jupyter.events).on("kernel_ready.Kernel", function () {
                console.log("Auto-running all cells-below...");
                jupyter.actions.call('jupyter-notebook:run-all-cells-below');
                jupyter.actions.call('jupyter-notebook:save-notebook');
            });
        }
    );
</script>

上記のセルの出力をクリアする場合は、手順2と3を繰り返す必要があることに注意してください。

ヒント

おそらく達成しようとしていることに対して、これらのより適切な解決策を検討することができます。

  • Jupyer Thebe :ipython-kernelsバックエンドと通信する静的ページにコードスニペットを埋め込みます。
  • nteractnteract :ビルド Electron -ノートブックからのベースのアプリケーション。
  • ダッシュボード :ノートブックセル出力(「ダッシュボード」)のグリッドを事前構成し、パッケージ化してスタンドアロンWebアプリとして提供できるようにする「公式」の取り組み。

状況の概要は この記事 にあります。

論争

同様の質問が 尋ねられた他のサイト 、しかし このグーグルグループスレッド で、誰かが解決策を提出し、 グループモデレーターはそれを消去しました(!)、明らかに地球上の生命を維持するために:-)だから、それに注意してください!

17
ankostis

私はこれが可能だとは思わない。

ipythonは、1)意図的で、2)信頼されていない限り、コードを実行しません。そうしないと、悪意のあるコードを含むノートブックをロードする状況に遭遇します。

ここでipythonsセキュリティモデルの詳細を確認できます: https://ipython.org/ipython-doc/dev/notebook/security.html 。具体的には、ノートブックを開いたときのコード実行について説明しているセクション:「解決する必要があるセキュリティの問題は、ユーザーが自分で作成していないノートブックを開いたからといってコードを実行してはならないことです」

ノートブックに明示的な信頼を設定することはできますが、これによってコードの自動実行も可能になるかどうかはわかりません。私はそのようなものを見たことがありませんが、たぶん私は十分に一生懸命探していませんでした。ただし、自動コード実行はコアipythonパッケージで利用できるものではないことを他の場所で見ました。ここでこの問題を確認してください: https://github.com/ivanov/ipython-trainingwheels/issues/35

信頼を超えて、これが不可能だと思うもう1つの理由は、1)自動コード実行により、現在ノートブックに保存されている既存の出力が置き換えられるためです。これは理想的ではない可能性があります。2)一部のノートブックには計算上複雑なコードが含まれている可能性があります。高価で、ノートブックを開くたびに実行したくないでしょう。

3
Simon