L'incorporation d'une parcelle de terrain dans un site web avec Python/bokeh
Je suis en train d'intégrer de manière statique un flou d'arrière-plan de l'intrigue dans un site personnel, et je suis de la rencontre d'un comportement que je ne comprends pas. En gros, je suis de la génération d'un tracé à l'aide de bokeh comme suit:
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 far So good. Cela produit un fichier qui ressemble à (random garbage).embed.js
, et un imprime chaîne de caractères contenant la syntaxe html, que j'ai copier manuellement dans un fichier html, je fais appel testembed.html
, que j'ai reproduit ci-dessous:
<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>
Si j'ai le code python de référence de mon local d'installation de python et de copier les fichiers générés (.html et .embed.js) à mon ordinateur local, je pouvez voir la parcelle dans le fichier html.
Cependant, ce que je veux vraiment faire de cette course sur un ordinateur distant, et avoir le fichier html accessible via le web sur mon site personnel.
Quand j'ai static_path
référer à mon de l'ordinateur distant python installer (comme indiqué ci-dessus, commenté), je ne pouvez pas voir le complot dans la page html quand j'y accéder via le web (ie, va http://mywebsite.com/testembed.html). Je n'ai aucune idée de pourquoi cela se passe.
Pour référence, voici le code où l'extrait de code html fonction est définie:
https://github.com/ContinuumIO/bokeh/blob/master/bokeh/objects.py#L309
et je remarque qu'il y a une option que je suis pas passant create_html_snippet
, c'est à dire, embed_base_url
, qui pourrait ont quelque chose à voir avec cela.
Merci d'avance!
Mike
MODIFIER
J'ai pris bigreddot
's des conseils, ce qui a résolu le problème. Le réel problème que j'avais été a été que le serveur que j'utilisais était, pour des raisons de sécurité, seuls en mesure d'accéder à des choses dans ma public_html
répertoire. La solution a été de rsync
la bokeh/static
répertoire dans mon public_html
et de point:
rsync -ax /opt/anaconda/lib/python2.7/site-packages/bokeh/server/static/ /home/myusername/public_html/bokeh-static/
puis modifier mon code comme suit:
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')
et puis évidemment, copier le code html généré dans le testembed.html
.
OriginalL'auteur Mike | 2014-03-12
Vous devez vous connecter pour publier un commentaire.
Mise à JOUR: le
create_html_snippet
fonction est obsolète. Veuillez désormais utiliser la meilleurebokeh.embed
module:https://github.com/ContinuumIO/bokeh/blob/master/bokeh/embed.py
MWE:
Vous pouvez voir quelques exemples de son utilisation:
https://github.com/ContinuumIO/bokeh/tree/master/examples/embed
OriginalL'auteur bigreddot
Il semble que vous voulez faire un "non-serveur embded", ce qui veut dire que l'intrigue description et toutes les données pour l'intrigue est contenue dans le
foo.embed.js
fichier, au lieu de se faire tiré à partir d'un "Bokeh serveur". Dans ce cas, vous voulez mettre enembed_base_url
à l'emplacement (sur votre serveur) où l'embed.js le fichier sera accessible. Fondamentalement,embed_base_url
affecte lasrc
attribut de la balise script:En revanche, la
static_path
indique le tracé de code où (sur votre serveur, ou CA, ou n'importe où) pour trouverbokeh.js
.Juste une remarque: cela peut un peu changer dans les prochaines versions à être un peu plus flexible. Pour l'instant il cherche toujours
{{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/')
(et copié la sortie de mon fichier html) en vain. J'ai aussi essayé d'utiliser la bonne url de site web (ie, monsite.etc/~me/chemin/vers/js), mais qui n'ont pas le fixer.Vous servez le code HTML de la page forme un serveur web? Puis le
static_path
doit être un chemin d'URL sur le serveur, pas un chemin du système de fichiers. De même pour leembed_base_url
OriginalL'auteur bigreddot
embed_base_url
contrôles le chemin de l'url (il peut être absolu ou relatif) que le javascript, recherche pour l'intégrer fichier.embed_save_loc
contrôle le répertoire de python permet de copier le embed fichier. embed_save_loc n'est pas nécessaire lorsque le serveur=Truestatic_path
contrôles le chemin de l'url (il peut y en absolu ou en relatif) que le javascript va utiliser pour construire des URL pour bokeh.js et le bokeh.css. La valeur par défaut esthttp://localhost:5006/static/
, mais pourrait tout aussi facilement à un CDNLors de l'exécution du bokeh serveur, accédez à
http://localhost:5006/bokeh/generate_embed/static
. Je pense que cela vous oblige à être en cours d'exécution sur le maître en raison d'un bogue.EDIT: un CDN est un "Réseau de Livraison de Contenu", c'est juste un terme de fantaisie pour un serveur de fichiers. Par exemple, nous organisons des bokeh.js au http://cdn.pydata.org/bokeh-0.4.2.js (ou http://cdn.pydata.org/bokeh-0.4.2.min.js) pour quiconque de l'utiliser.
OriginalL'auteur paddy