Подтвердить что ты не робот

IPython: добавление скриптов Javascript в блокнот IPython

Как часть проекта, мне нужно встроить некоторые javascripts внутри модуля IPython. Это то, что я хочу сделать:

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

My Gl.js выглядит следующим образом

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

Есть ли способ, чтобы я мог встроить "Gl.js" и другие подобные внешние скрипты внутри ноутбука, так что мне не нужно включать их в качестве аргумента "lib" каждый раз, когда я пытаюсь выполнить какой-либо код Javascript, который требует эта библиотека.

4b9b3361

Ответ 1

В качестве очень краткосрочного решения вы можете использовать функции IPython display() и HTML(), чтобы вставить некоторый JavaScript на страницу.

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

Хотя я не рекомендую это по официальному методу custom.js, иногда мне полезно быстро его протестировать или динамически генерировать небольшой фрагмент JavaScript.

Ответ 2

Не из коробки, установив пакет, по крайней мере пока. Способ сделать это - использовать custom.js и jQuery getScript, чтобы вставить js в блокнот.

Я явно не смущаюсь о том, как это сделать, поскольку это функция разработчика, время от времени меняющаяся.

Что вы должны знать, так это то, что папка static в профиле пользователя merged имеет статические активы веб-сервера, позволяющие вам получить доступ к любому файлу, находящемуся в этой папке, запросив правильный URL-адрес.

Также этот вопрос был задан несколько часов назад на еженедельном видеоролике IPython " лабораторное собрание" транслировалось в прямом эфире и было доступно на youtube (у вас может быть более длинный ответ), я открыл дискуссию с автором вопроса здесь

Ответ 3

Я борюсь с этой проблемой уже несколько дней, здесь что-то похожее на работу; покупатель опасается, хотя это минимальное рабочее решение, и оно не является ни симпатичным, ни оптимальным - более приятное решение было бы очень желанным!

Во-первых, в .ipython/<profile>/static/custom/myScript.js мы делаем некоторые require.js magic:

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 devs мы можем использовать $.getScript('/static/custom/util.js'); в custom.js для загрузки кучи глобальных функций JS), но это лучшее, что у меня есть сейчас. Это пение и танцы в сторону, ОГРОМНЫЕ взлеты для команды ноутбуков IPython, это потрясающая платформа!

Ответ 4

Встраивание D3 в ноутбук IPython

Подведение итогов кода.

Импортируйте script:

%%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

Более подробное сообщение, объясняющее, как обращаться к переменным Python в JavaScript и наоборот.

Ответ 5

Вот что я делаю для одновременного импорта внешних файлов.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(file='/home/student/Gl.js')
javascript('echo("sdfds")')