Вложение сюжета в веб-сайт с 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) для любого использования.