使用PyCharm调试Bokeh服务应用程序

时间:2017-01-10 13:43:15

标签: python bokeh

Bokeh服务允许使用绘图和小部件编写快速Web应用程序。 当我使用bokeh serve --show code.py时,如何调试python代码?

5 个答案:

答案 0 :(得分:5)

我并不是真正的IDE用户,所以我无法真正说出如何使用pycharm和运行应用程序的bokeh serve app.py方式。但是,从0.12.4开始,现在有itertools.accumulate的指导和示例。特别是你可以创建一个{"正常"}中运行的app.py。方式:

python app.py

我的猜测是这种做事方式可能会更好地与IDE一起使用。

作为参考,她是一个完整的独立脚本"嵌入:

import numpy as np
from tornado.ioloop import IOLoop

from bokeh.application.handlers import FunctionHandler
from bokeh.application import Application
from bokeh.layouts import column
from bokeh.models import ColumnDataSource, Slider
from bokeh.plotting import figure
from bokeh.server.server import Server

io_loop = IOLoop.current()

def modify_doc(doc):
    x = np.linspace(0, 10, 1000)
    y = np.log(x) * np.sin(x)
    source = ColumnDataSource(data=dict(x=x, y=y))

    plot = figure()
    plot.line('x', 'y', source=source)

    slider = Slider(start=1, end=10, value=1, step=0.1)
    def callback(attr, old, new):
        y = np.log(x) * np.sin(x*new)
        source.data = dict(x=x, y=y)
    slider.on_change('value', callback)

    doc.add_root(column(slider, plot))

bokeh_app = Application(FunctionHandler(modify_doc))

server = Server({'/': bokeh_app}, io_loop=io_loop)
server.start()

if __name__ == '__main__':
    print('Opening Bokeh application on http://localhost:5006/')
    io_loop.add_callback(server.show, "/")
    io_loop.start()

答案 1 :(得分:5)

Here's how I did it:

  1. Updated to Pycharm CE 2017

  2. At command prompt, run:

    $ which bokeh /Users/myname/envs/my_venv/bin/bokeh

  3. From menu selected : Run > Edit Configurations

  4. Entered the path from step 2 into "Script path:"

  5. Filled in "Parameters:" serve --show /full/path/to/viz.py --args myargs

This opened a browser window http://localhost:5006/viz and stopped at the breakpoint set inside viz.py

Hope that works for you

答案 2 :(得分:3)

散景也可以通过python -m bokeh运行 鉴于此,您可以打开“运行/调试配置”对话框并将解释器选项设置为-m bokeh serve --show,并且您的脚本将按原样运行

答案 3 :(得分:2)

另一种方法是不使用参数运行bokeh服务

bokeh serve

并将您的应用程序推送到服务器。这使您可以直接调试python脚本:

def update():
   ...

...
curdoc().add_periodic_callback(update,500)
session=push_session(curdoc())
session.show(plot)
session.loop_until_closed()

您将收到有关不鼓励push_session和loop_until_closed的警告。但是出于调试目的,它已经足够好了。

答案 4 :(得分:1)

我发现您是在已附加调试器的进程中启动该进程的,调试器也将添加到该进程中。

例如,您可以运行下面的代码

bokeh_process = subprocess.Popen(
['python', '-m', 'bokeh', 'serve', 'bokeh_server.py'], stdout=subprocess.PIPE)