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, который требует эта библиотека.
Ответы
Ответ 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")')