Die Einbettung einer Handlung in eine Webseite mit Python/bokeh
Ich versuche zu statisch einbinden eines bokeh Grundstück in einer persönlichen website, und bin auf einige Verhaltensweisen, die ich nicht verstehe. Grundsätzlich bin ich der Generierung eines Diagramms mit Hilfe bokeh wie folgt:
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/')
So weit So gut. Dies erzeugt eine Datei, die so aussieht wie (random garbage).embed.js
und druckt string mit html-syntax, die ich manuell kopieren in eine html-Datei, die ich aufrufen testembed.html
, die ich nachstehend wiedergegeben:
<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>
Wenn ich den python-code-Referenz meine lokalen python-installation, und kopieren Sie die generierten Dateien (.html und .embed.js) auf meinem lokalen Rechner, ich sehen können die Handlung in der html-Datei.
Jedoch, was ich wirklich tun wollen ist, haben diese auf einem Remotecomputer ausgeführt werden, und die html-Datei zugänglich über das web-auf meiner persönlichen Website.
Wenn ich static_path
siehe meine remote-Computers python installieren (wie oben auskommentiert), ich nicht sehen können, der plot in die html-Seite, wenn ich auf Sie durch das web (ie, werde http://mywebsite.com/testembed.html). Ich habe keine Ahnung, warum dies geschieht.
Referenz, hier ist der code, wo das html-snippet-Funktion definiert ist:
https://github.com/ContinuumIO/bokeh/blob/master/bokeh/objects.py#L309
und ich Stelle fest es gibt eine option, ich bin nicht vorbei in create_html_snippet
, dh embed_base_url
, die könnte haben etwas mit diesem zu tun.
Vielen Dank im Voraus!
Mike
BEARBEITEN
Ich nahm bigreddot
's Ratschläge, die das problem gelöst. Das eigentliche problem, das ich gehabt hatte, war, dass der webserver war ich mit war, aus Sicherheitsgründen nur Zugriff auf Dinge, die in meinem public_html
- Verzeichnis. Der workaround war rsync
die bokeh/static
Verzeichnis in mein public_html
und zeigen Sie auf, dass:
rsync -ax /opt/anaconda/lib/python2.7/site-packages/bokeh/server/static/ /home/myusername/public_html/bokeh-static/
und ändern Sie dann mein code wie folgt:
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')
und offensichtlich dann kopieren Sie den generierten html-Code in den testembed.html
.
InformationsquelleAutor Mike | 2014-03-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
UPDATE: die
create_html_snippet
Funktion ist veraltet. Bitte verwenden Sie nun das viel besserbokeh.embed
Modul:https://github.com/ContinuumIO/bokeh/blob/master/bokeh/embed.py
MWE:
Sehen Sie einige Beispiele für deren Verwendung an:
https://github.com/ContinuumIO/bokeh/tree/master/examples/embed
InformationsquelleAutor bigreddot
Es klingt wie Sie wollen ein "nicht-server-embded", was eigentlich nur bedeutet, dass die plot-Beschreibung und alle Daten, die für das Grundstück ist enthalten in der
foo.embed.js
Datei, statt immer gezogen von einer "Bokeh-server". In diesem Fall möchten Sie festlegenembed_base_url
auf den Speicherort (auf Ihrem server), wo die embed.js Datei zugänglich sein wird. Grundsätzlichembed_base_url
wirkt sich auf diesrc
- Attribut des script-tag:Dagegen, die
static_path
erzählt der Plot-code, wo (auf dem server oder CDN, oder wo auch immer) zu findenbokeh.js
.Nur ein Hinweis: dies kann ein wenig ändern, in kommenden releases, um ein wenig flexibler. Jetzt sieht es doch immer für
{{static_root}}/js/bokeh.js
print plot.create_html_snippet(static_path='/opt/anaconda/lib/python2.7/site-packages/bokeh/server/static/', embed_base_url='/home/myusername/public_html/directory_where_js_file_lives/')
(und kopiert die Ausgabe in meine html-Datei) ohne Erfolg. Ich habe auch versucht, mit der richtigen web-url (ie, mywebsite.etc/~me/Pfad/zu/js), aber das hat nicht fix it entweder.Sie dienen der HTML-Seite ein Formular ein web-server? Dann die
static_path
muss ein URL-Pfad auf dem server, nicht auf einem Pfad im Dateisystem. Dasselbe für dieembed_base_url
InformationsquelleAutor bigreddot
embed_base_url
steuert den url-Pfad (absolut oder relativ) , wird der javascript-Suche nach der Datei einbetten.embed_save_loc
steuert das Verzeichnis, das python schreiben aus der Datei einbetten. embed_save_loc ist nicht notwendig, wenn server=Truestatic_path
steuert den url-Pfad (es können absolute oder relative) , die javascript verwenden, um die Konstrukt-URLS für bokeh.js und bokeh.css. Es wird standardmäßig aufhttp://localhost:5006/static/
, aber genauso gut könnte zeigen Sie auf ein CDNBeim ausführen des bokeh-server, navigieren Sie zu
http://localhost:5006/bokeh/generate_embed/static
. Ich denke, dass dies erfordert, dass Sie läuft auf dem master, weil ein bug.EDIT: ein CDN ist ein "Content Delivery Network" es ist nur ein schicker Begriff für Datei-server. Zum Beispiel veranstalten wir bokeh.js bei http://cdn.pydata.org/bokeh-0.4.2.js (oder http://cdn.pydata.org/bokeh-0.4.2.min.js) für jedermann zu benutzen.
InformationsquelleAutor paddy