web-dev-qa-db-ja.com

IPython:JavascriptスクリプトをIPythonノートブックに追加する

プロジェクトの一部として、IPythonモジュール内にいくつかのJavaScriptを埋め込む必要があります。これが私がやりたいことです:

from IPython.display import display,Javascript
Javascript('echo("sdfds");',lib='/home/student/Gl.js')

私のGl.jsは次のようになります

function echo(a){
alert(a);
}

「Gl.js」や他のそのような外部スクリプトをノートブック内に埋め込むことができる方法はありますか?そのライブラリに必要なJavascriptコードを実行しようとするたびに「lib」引数としてそれらを含める必要はありません。

17
Tarun Gaba

非常に短期的な解決策として、IPython display()およびHTML()関数を使用してJavaScriptをページに挿入できます。

from IPython.display import display, HTML
js = "<script>alert('Hello World!');</script>"
display(HTML(js))

私はお勧めしませんこれは公式よりもcustom.jsメソッド、何かをすばやくテストしたり、小さなJavaScriptスニペットを動的に生成したりすると便利な場合があります。

13
Alex

IPythonNotebookへのD3の埋め込み

コードを要約します。

スクリプトをインポートします。

%%javascript
require.config({
  paths: {
      d3: '//cdnjs.cloudflare.com/ajax/libs/d3/3.4.8/d3.min'
  }
});

次のような要素を追加します。

%%javascript
element.append("<div id='chart1'></div>");

またはこれ:

from IPython.display import Javascript
#runs arbitrary javascript, client-side
Javascript("""
           window.vizObj={};
           """.format(df.to_json()))

IPython Notebook:Javascript/Python双方向通信

JavaScriptでPython変数にアクセスする方法、およびその逆の方法を説明する、より広範な投稿。

6
Anton Tarasenko

少なくとも今のところ、パッケージをインストールして箱から出してはいけません。これを行う方法は、custom.jsとjQuerygetScriptを使用してjsをノートブックに挿入することです。

これは開発機能であり、時々変更されるため、私はそれを行う方法について明確に曖昧なままです。

知っておくべきことは、ユーザープロファイルのstaticフォルダーはmergedであり、Webサーバーの静的アセットを使用すると、正しいURLを要求することでこのフォルダー内の任意のファイルにアクセスできることです。

また、この質問は数時間前にIPythonの毎週のビデオで尋ねられました " ラボミーティング "ライブでYouTubeで無責任に放送されました(もっと長い答えがあるかもしれません)、私は著者との議論を始めました質問 ここ

4
Matt

私はこの問題と数日間戦ってきましたが、これはうまくいくように見えます。購入者は注意してください、これは最小限の実用的な解決策であり、きれいでも最適でもありません-より良い解決策は大歓迎です!

まず、.ipython/<profile>/static/custom/myScript.jsで、require.jsマジックを実行します。

define(function(){

    var foo = function(){
            console.log('bar');
        }

    return {
        foo : foo
    }
});

このパターンをコピーして、必要な数の機能を実行します。次に、.ipython/<profile>/static/custom/custom.jsで、それらを永続的なものにドラッグします。

$([IPython.events]).on('notebook_loaded.Notebook', function(){

    require(['custom/myScript'], function(custom){
        window.foo = custom.foo;
    } );

});

はい、私はウィンドウオブジェクトに何かを投げて、あなたが適切だと思う名前空間のものを投げるのは恐ろしい人です。しかし今ノートブックでは、のようなセル

%%javascript

foo();

ユーザーがJSを明示的にインポートしなくても、見た目どおりに実行する必要があります。私はこれに対するより簡単な解決策を見たいと思っています(plz開発者はcustom.js$.getScript('/static/custom/util.js');を持ってグローバルJS関数の束をロードできます)-しかしこれは私が得た最高のものです今。この歌と踊りはさておき、IPythonノートブックチームに大きな影響を与えます。これは素晴らしいプラットフォームです。

4
Bill Mills

何らかの理由で、IPython.display.Javascriptに問題があります。これが私の代替手段であり、外部.jsファイルのインポートとカスタムコードの実行の両方を処理できます。

from IPython.display import display, HTML

def javascript(*st,file=None):
    if len(st) == 1 and file is None:
        s = st[0]
    Elif len(st) == 0 and file is not None:
        s = open(file).read()
    else:
        raise ValueError('Pass either a string or file=.')
    display(HTML("<script type='text/javascript'>" + s + "</script>"))

使用法は次のとおりです。

javascript('alert("hi")')
javascript(file='Gl.js')
javascript('echo("sdfds")')
0
Ben Mares