帶控制檯入口點的本地散景伺服器

為了使背景虛化的一個應用就像一個被執行正常的 .py 檔案,你需要處理的龍捲風 IOloop 在應用程式中,如所描述這裡 。像這樣的獨立散景應用程式可用於在 setup.py 中實現控制檯指令碼入口點。但是,這需要散景版 > = 0.12.4

散景應用

考慮檔案 local_server.py

from tornado.ioloop import IOLoop

from bokeh.application.handlers import FunctionHandler
from bokeh.application import Application
from bokeh.models import ColumnDataSource
from bokeh.plotting import figure
from bokeh.server.server import Server

def modify_doc(doc):
    """Add a plotted function to the document.

    Arguments:
        doc: A bokeh document to which elements can be added.
    """
    x_values = range(10)
    y_values = [x ** 2 for x in x_values]
    data_source = ColumnDataSource(data=dict(x=x_values, y=y_values))
    plot = figure(title="f(x) = x^2",
                  tools="crosshair,pan,reset,save,wheel_zoom",)
    plot.line('x', 'y', source=data_source, line_width=3, line_alpha=0.6)
    doc.add_root(plot)
    doc.title = "Test Plot"

def main():
    """Launch the server and connect to it.
    """
    print("Preparing a bokeh application.")
    io_loop = IOLoop.current()
    bokeh_app = Application(FunctionHandler(modify_doc))

    server = Server({"/": bokeh_app}, io_loop=io_loop)
    server.start()
    print("Opening Bokeh application on http://localhost:5006/")

    io_loop.add_callback(server.show, "/")
    io_loop.start()

main()

該檔案可以執行

$ python local_server.py

執行伺服器並自動啟動瀏覽器以顯示文件。

入口點和 setup.py

為了提供一個可以使用 setup.py 輕鬆安裝和呼叫的指令碼。考慮以下資料夾結構:

project
├── setup.py
└── my_package
    ├── __init__.py
    └── local_server.py

setup.py 的內容:

from setuptools import setup

setup(
    name = "my_package",
    entry_points={
        "console_scripts": ["my_script = my_package.local_server:main"],
    },
)

使用時安裝包

$ python setup.py install

然後你可以呼叫,

$ my_script

啟動散景應用程式並自動啟動顯示文件的瀏覽器。