正在设置

Bokeh项目包含两个主要组件:用Python编写的Bokeh包源代码和用TypeScript编写的BokehJS客户端库。因此,Bokeh的开发稍微复杂一些,因为生成可部署JavaScript需要显式的编译步骤。

因此,为了从源代码签出开发Bokeh,必须首先能够构建BokehJS。本章将指导您建立完整的开发环境。

准备工作

吉特

Bokeh源代码存储在 Git 源代码管理存储库。在Bokeh上工作的第一步是在系统上安装Git。有不同的方法来实现这一点,具体取决于您是使用Windows、OSX还是Linux。

要在任何平台上安装Git,请参阅 Installing Git 剖面图 Pro Git Book .

康达

开发Bokeh需要安装一些不是Python包的软件包(例如Selenium、NodeJS等)。为了使其更易于管理,核心开发人员在很大程度上依赖于 conda package manager 免费的 Anaconda Python分布。然而, conda 对非boh的开发也有很大的帮助。它是 强烈地 建议任何开发Bokeh的人也使用 conda ,其余的说明将假定 conda 可用。

要在任何平台上安装Conda,请参阅 Anaconda Installers 底部的部分 Anaconda Individual Edition 页。

克隆存储库

Bokeh项目的源代码托管在 GitHub. 要克隆主源存储库,请发出以下命令:

git clone https://github.com/bokeh/bokeh.git

注解

Active@bokeh/dev贡献者应该克隆主源存储库,以确保完整的CI测试自动化成功运行。

需要新的或临时的贡献者来克隆他们的分叉 bokeh source repository . 要派生和克隆Github存储库,请参阅 Fork a repo 截面 GitHub Help .

这将创建一个 bokeh 位于文件系统位置的目录。这个 bokeh 目录被称为 源签出 对于本文档的其余部分。

创建Conda环境

Bokeh回购协议包含 environment.yml 可用于创建名为 bkdev 提供基本Bokeh开发所需的所有软件包。

在存储库的顶层,在终端中发出以下命令:

conda env create environment.yml

然后,要激活环境:

conda activate bkdev

正在安装节点包

构建BokehJS还需要使用节点包管理器安装JavaScript依赖项。如果你已经按照上面的说明做了, conda 已经安装了必要的 npmnode.js 系统的软件包。

Bokeh通常会进行更新,以要求 npm 为了建造。要全局安装最新版本,请从 源签出 目录,并执行以下命令:

cd bokehjs
npm install -g npm

如果您不想在全球范围内安装(即 -g ),然后所有后续 npm 需要调整命令以使用安装在下的本地版本 bokehjs/node_modules .

下一个,还在 bokehjs 子目录中,执行以下命令以安装所有BokehJS JavaScript依赖项:

npm ci

此命令将把必要的包安装到 node_modules 子目录。

注解

通常,当您第一次安装时,只需遵循这些说明一次。但是,有时可能会添加或更改依赖项,在这种情况下,需要再次遵循这些说明。

配置Git

您可以在本地进行一些配置,这些配置将有助于更安全、更轻松地使用存储库。

注解

本节中的可选说明特定于 OSXLinux系统 .

吉特钩子

为了帮助防止一些意外错误,下面是一些可能有用的git钩子。下面的脚本应该放在 .git/hooks 的顶层中的子目录 源签出 目录,并用例如。 chmod +x pre-commit . 有关git钩子的更多信息,请参见 this tutorial .

pre-commit

这个git钩子在允许继续提交之前运行所有的代码库测试。请注意,必须安装所有标准测试依赖项才能使该钩子正常工作。

#!/bin/bash

pytest tests/codebase
exit $?

pre-push

这个git钩子可以防止意外推到 master 在吉瑟布上。

#!/bin/bash

protected_branch='master'
current_branch=$(git symbolic-ref HEAD | sed -e 's,.*/\(.*\),\1,')

if [ $protected_branch = $current_branch ]
then
    read -p "You're about to push master, is that what you intended? [y|n] " -n 1 -r < /dev/tty
    echo
    if echo $REPLY | grep -E '^[Yy]$' > /dev/null
    then
        exit 0 # push will execute
    fi
    exit 1 # push will not execute
else
    exit 0 # push will execute
fi

Git别名

还有一些有用的别名可以添加到 .gitconfig 位于主目录中的文件。

以下别名将添加 git resolve 命令,该命令将自动打开编辑器以解决任何合并冲突。

[alias]
    resolve = !sh -c 'vim -p $(git status -s | grep "^UU" | cut -c4-)'

你可以替换 vim 不管你最喜欢的编辑器命令是什么。

建造和安装

一旦安装了所有必需的依赖项,构建和安装Bokeh和BokehJS的最简单方法是使用 setup.py 脚本的顶层 源签出 目录。

这个 setup.py 脚本有两种主要的操作模式:

python setup.py install

Bokeh将安装在您的Python中 site-packages 目录。在这种模式下,对python源代码所做的任何更改直到 setup.py install 再次运行。

python setup.py develop

将安装Bokeh以引用源目录。对python源代码所做的任何更改都将立即可用,无需任何其他步骤。

无论使用哪种模式,都会提示您如何安装BokehJS,例如:

python setup.py develop

Bokeh includes a JavaScript library (BokehJS) that has its own
build process. How would you like to handle BokehJS:

1) build and install fresh BokehJS
2) install last built BokehJS from bokeh/bokehjs/build

Choice?

您可以通过向提供适当的命令行选项跳过此提示 setup.py ,例如

  • python setup.py develop --build-js

  • python setup.py develop --install-js

请注意,每当BokehJS源代码发生更改时(无论是由您自己还是通过从GitHub获取新的修订),您都需要构建BokehJS。尤其是,至少,您必须在第一次安装时构建BokehJS。

注解

有时JavaScript依赖项列表也会更改。如果发生这种情况,您还需要重新运行 正在安装节点包 以上章节。

下载示例数据

一些测试和例子要求Bokeh的样本数据可用。安装Bokeh后,获取示例数据的最简单方法是在Bash或Windows提示符下执行以下命令:

bokeh sampledata

还可以配置下载位置,或者以编程方式启动下载。有关详细信息,请参阅 样本数据 用户指南的一节。

下一步

您可以通过执行以下命令来检查是否已正确安装和设置所有内容:

python -m bokeh info

您应该看到类似于以下内容的输出:

Python version      :  3.8.3 | packaged by conda-forge | (default, Jun  1 2020, 17:21:09)
IPython version     :  7.15.0
Tornado version     :  6.0.4
Bokeh version       :  2.0.2-95-g8e0b447c0-dirty
BokehJS static path :  /Users/bryan/work/bokeh/bokeh/server/static
node.js version     :  v14.4.0
npm version         :  6.14.5

下一个可以进行的检查是运行一些示例。Bokeh可以用不同的方式来适应各种用例。

要创建HTML文件,

BOKEH_RESOURCES=inline python examples/plotting/file/iris.py

它将创建一个文件 iris.html 在本地打开一个web浏览器。

../../_images/bokeh_iris_html.png

变量 BOKEH_RESOURCES 确定bokeh所需的css和JavaScript资源的位置。通过指定 inline 我们使用的是BokehJS版本,我们刚刚构建了这个版本,将资源作为HTML文件的一部分进行内联。这个 BOKEH_RESOURCES 变量是必需的,因为默认行为是使用CDN资源。

运行bokeh的另一种方法是作为服务器。可以使用以下命令运行此操作模式的示例:

python -m bokeh serve --show examples/app/sliders.py

这将打开一个带有交互式图形的浏览器。

../../_images/bokeh_app_sliders.png

所有的滑块都允许交互控制正弦波,每次更新都用新参数重新绘制线条。这个 --show 选项打开web浏览器到相应的地址,默认为 localhost:5006 .

如果您对这里的步骤有任何问题,请 contact the developers .