Вложение сюжета в веб-сайт с Python/bokeh
я пытаюсь статически встроить сюжет боке в личный веб-сайт и сталкиваюсь с некоторым поведением, которое я не понимаю. В принципе, я генерирую сюжет, используя боке следующим образом:
import bokeh.plotting as bplt
import numpy as np
x=np.random.random(100)
y=np.random.random(100)
bplt.output_file("t.html")
plot=bplt.line(x,y)
##the following line refers to the bokeh installed on my home computer
print plot.create_html_snippet(
static_path='/usr/local/lib/python2.7/site-packages/bokeh/server/static/')
##the following line refers to the bokeh installed on my remote computer
#print plot.create_html_snippet(
# static_path='/opt/anaconda/lib/python2.7/site-packages/bokeh/server/static/')
пока все хорошо. Это создает файл, который выглядит как (random garbage).embed.js
, и строка печати, содержащая синтаксис html, который я вручную копирую в html-файл, который я вызываю testembed.html
, который я воспроизвел ниже:
<html>
<body>
<h2>Simple Embed Example</h2>
<p>This is where my plot should be:</p>
<p>
<!--The next 4 lines are the output of the print statement from the python code-->
<script src="ccbd451a-6995-4dd2-b99c-e4140b362997.embed.js"
bokeh_plottype="embeddata"
bokeh_modelid="ccbd451a-6995-4dd2-b99c-e4140b362997"
bokeh_modeltype="Plot" async="true"></script>
</p>
</body>
</html>
если у меня есть ссылка на код python, мой местные установка python и копирование сгенерированных файлов (.html и .внедрять.js) на мой локальный компьютер, I видим сюжет в html-файле.
однако, что я действительно хочу сделать, это запустить это на удаленном компьютере и иметь html-файл, доступный через интернет на моем личном сайте.
когда я static_path
обратитесь к моему удаленный компьютер python install (как показано выше, прокомментировано), I не вижу земельный участок на html-странице, когда я получаю доступ к ней через интернет (т. е. собираюсь http://mywebsite.com/testembed.html). Я понятия не имею, почему это происходит.
для справки, вот код, где определена функция фрагмента html:
https://github.com/ContinuumIO/bokeh/blob/master/bokeh/objects.py#L309
и замечу, есть вариант я не, проходящей в create_html_snippet
, т. е. embed_base_url
, который может есть что с этим делать.
спасибо заранее! Майк!--16-->
редактировать
Я взял bigreddot
совет, который решил проблему. Фактическая проблема, с которой я столкнулся, заключалась в том, что веб-сервер, который я использовал, был в целях безопасности только в состоянии получить доступ к вещам в моем в свою public_html
и указывают на это:
rsync -ax /opt/anaconda/lib/python2.7/site-packages/bokeh/server/static/ /home/myusername/public_html/bokeh-static/
а затем измените мой код следующим образом:
import bokeh.plotting as bplt
import numpy as np
x=np.random.random(100)
y=np.random.random(100)
bplt.output_file("t.html")
plot=bplt.line(x,y)
#the following line refers to the bokeh rsynced to my directory
print plot.create_html_snippet(
static_path='http://www.my_server_website/~myusername/bokeh-static/',
embed_base_url = 'http://www.my_server_website/~myusername/where_.js_file_is_located')
и затем, очевидно, скопируйте сгенерированный html в testembed.html
.
3 ответов
обновление:create_html_snippet
функция устарела. Пожалуйста, теперь используйте гораздо лучше bokeh.embed
модуль:
https://github.com/ContinuumIO/bokeh/blob/master/bokeh/embed.py
Вы можете увидеть некоторые примеры его использования:
https://github.com/ContinuumIO/bokeh/tree/master/examples/embed
похоже, вы хотите сделать "не-сервер embded", что на самом деле просто означает, что описание сюжета и все данные для сюжета содержатся в foo.embed.js
файл, вместо того, чтобы вытащить из "сервера Боке". В этом случае, вы хотите установить embed_base_url
к местоположению (на вашем сервере), где встроен.файл js будет доступен. В основном, embed_base_url
влияет src
атрибут тега скрипта:
In [11]: print plot.create_html_snippet(embed_base_url="/some/location/")
<script src="/some/location/c6aa5f66-4136-403f-a307-ce0e2a64f6b4.embed.js"
bokeh_plottype="embeddata"
bokeh_modelid="c6aa5f66-4136-403f-a307-ce0e2a64f6b4"
bokeh_modeltype="Plot" async="true"></script>
напротив static_path
сообщает код построения, где (on свой сервер или CDN, или где) найти bokeh.js
.
просто Примечание это может немного измениться в предстоящих выпусках, чтобы быть немного более гибким. Прямо сейчас он всегда ищет {{static_root}}/js/bokeh.js
embed_base_url
управляет URL-адресом (он может быть абсолютным или относительным), в котором javascript будет искать встроенный файл.
embed_save_loc
управляет каталогом, в который python будет записывать файл вставки. embed_save_loc не требуется, когда server=True
static_path
управляет url-путем (он может быть абсолютным или относительным), который javascript будет использовать для создания URL-адресов для bokeh.JS и боке.стиль CSS. Значение по умолчанию http://localhost:5006/static/
, но может так же легко указать на CDN
при запуске сервера bokeh перейдите к http://localhost:5006/bokeh/generate_embed/static
. Я думаю, что это требует, чтобы вы работали на master из-за ошибки.
EDIT: CDN - это "сеть доставки контента", это просто причудливый термин для файлового сервера. Например, мы принимаем боке.js at http://cdn.pydata.org/bokeh-0.4.2.js (или http://cdn.pydata.org/bokeh-0.4.2.min.js) для любого использования.