Я пытаюсь статически встраивать сюжет bokeh в личный сайт, и я сталкиваюсь с каким-то поведением, которого я не понимаю. В принципе, я создаю сюжет, используя 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
, и строка print, содержащая синтаксис 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 и .embed.js) на мой локальный компьютер, я может видеть график в html файле.
Однако, что я действительно хочу сделать, это запустить этот запуск на удаленном компьютере и иметь html файл, доступный через Интернет на моем личном сайте.
Когда я static_path
ссылаюсь на установку python моего удаленного компьютера (как показано выше, закомментирован), я не вижу график на странице html, когда я обращаюсь к нему через Интернет (т.е. переход на http://mywebsite.com/testembed.html). Я понятия не имею, почему это происходит.
Для справки, вот код, в котором определена функция html snippet:
https://github.com/ContinuumIO/bokeh/blob/master/bokeh/objects.py#L309
и я отмечаю, что есть вариант, который я не передаю в create_html_snippet
, т.е. embed_base_url
, что может иметь какое-то отношение к этому.
Спасибо заранее! Mike
ИЗМЕНИТЬ
Я принял совет bigreddot
, который решил проблему. Фактическая проблема, с которой я столкнулся, заключалась в том, что используемый мной веб-сервер был для целей безопасности доступ к вещам только в моем каталоге public_html
. Обходной путь состоял в rsync
каталоге bokeh/static
в моем 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
.