跳转到主要内容

自定义Jupyter小部件库

项目描述

deephaven-ipywidgets

Deephaven社区IPython小部件库

安装

您可以使用pip进行安装。

如果在嵌入服务器(deephaven-server)上运行,请使用以下命令安装:

pip install "deephaven-ipywidgets[server]"

这会安装嵌入服务器。

如果您正在连接到运行在其他地方的服务器(pydeephaven),请使用以下命令安装:

pip install "deephaven-ipywidgets[client]"

如果您正在使用 Jupyter Notebook 5.2 或更早版本,可能还需要启用 nbextension。

jupyter nbextension enable --py [--sys-prefix|--user|--system] deephaven-ipywidgets

使用方法

启动服务器

首先,如果您使用的是嵌入式服务器,您需要启动Deephaven 服务器

# Start up the Deephaven Server on port 8080 with token `iris`
from deephaven_server import Server
s = Server(port=8080, jvm_args=["-Dauthentication.psk=iris"])
s.start()

显示表格

将表格传递给 DeephavenWidget 以显示表格

# Create a table and display it
from deephaven import empty_table
from deephaven_ipywidgets import DeephavenWidget
t = empty_table(1000).update("x=i")
display(DeephavenWidget(t))

您还可以传递您希望小部件的大小

# Specify a size for the table
display(DeephavenWidget(t, width=100, height=250))

连接到远程服务器

如果您使用客户端连接到已运行的服务器,请创建一个 pydeephaven 会话。有关更多信息,请参阅pydeephaven 文档

from pydeephaven import Session

client_session = Session(
    host="deephaven.local",
    port=10000,
    auth_type="io.deephaven.authentication.psk.PskAuthenticationHandler",
    auth_token="YOUR_PASSWORD_HERE",
)

从远程服务器显示表格

会话可用于在服务器上创建对象(如表格),然后在小部件中显示它们。

t = client_session.time_table("PT1s")
from deephaven_ipywidgets import DeephavenWidget
display(DeephavenWidget(t))

您还可以引用服务器上已创建的对象。此代码假定服务器上存在一个名为 t 的表格。

display(DeephavenWidget("t", session=client_session))

备用 Deephaven 服务器 URL

默认情况下,Deephaven 服务器位于 https://127.0.0.1:{port},其中 {port} 是 Deephaven 服务器创建调用中设置的端口号。如果服务器不存在,例如在 Docker 容器中运行 Jupyter notebook 时,在创建 DeephavenWidget 之前,将 DEEPHAVEN_IPY_URL 环境变量修改为正确的 URL。

import os
os.environ["DEEPHAVEN_IPY_URL"] = "https://127.0.0.1:1234"

开发安装

在开始之前,您需要安装python3nodeyarn

创建并激活 dev python venv 环境

export JAVA_HOME=/Library/Java/JavaVirtualMachines/openjdk-11.jdk/Contents/Home
python3 -m venv .venv
source .venv/bin/activate
pip install --upgrade pip setuptools
pip install deephaven-server jupyter jupyterlab jupyter-packaging

在初始安装/创建后,您只需执行以下操作

source .venv/bin/activate

安装 python。这将还会构建 TS 包。

pip install -e ".[test, examples]"

在开发您的扩展时,您需要手动使用笔记本/实验室前端启用您的扩展。对于实验室,这是通过以下命令完成的

jupyter labextension develop --overwrite .
yarn run build

对于经典笔记本,您需要运行

jupyter nbextension install --sys-prefix --symlink --overwrite --py deephaven_ipywidgets
jupyter nbextension enable --sys-prefix --py deephaven_ipywidgets

请注意,--symlink 标志在 Windows 上不起作用,因此您将不得不每次重建扩展时都运行 install 命令。对于某些安装,您可能还需要另一个标志而不是 --sys-prefix,但在此我们不讨论这些标志的含义。

对于在 VS Code 中运行,您需要运行经典笔记本步骤,以及设置 VS Code 环境

  1. 创建一个 .env 文件,并设置您的 JAVA_HOME 变量,例如
JAVA_HOME=/Library/Java/JavaVirtualMachines/openjdk-11.jdk/Contents/Home
  1. 创建一个新的笔记本 (.ipynb) 或打开现有的笔记本文件(例如 example.ipynb
  2. 在笔记本中,请确保已选择您的 .venv Python 环境 - 您可以使用右上角的下拉菜单,或者按 Ctrl + P 然后输入 > Select Kernel 并选择 Notebook: Select Notebook Kernel 选项并选择 .venv

如何查看您的更改

Typescript

如果您使用 JupyterLab 进行开发,则可以监视源目录,同时在不同的终端中同时运行 JupyterLab,以监视扩展源中的更改并自动重建小部件。

# Watch the source directory in one terminal, automatically rebuilding when needed
yarn run watch
# Run JupyterLab in another terminal
jupyter lab

更改后,等待构建完成,然后刷新浏览器,更改应生效。

Python

如果您对 Python 代码进行了更改,则需要重新启动笔记本内核才能生效。

测试您的更改

Python 和 TypeScript 代码都有自己的测试套件。

  • Python:要运行 Python 测试,请在存储库的根目录中运行 pytest
  • TypeScript:要运行 TypeScript 测试,请在存储库的根目录中运行 yarn run lint:check 以运行 eslint 测试。然后运行 yarn run test 来运行其余的单元测试。

发布您的初始包

  • 添加测试
  • 确保本地和持续集成(CI)测试通过。检查覆盖率是否合理。
  • 创建一个发布提交,在 _version.py 中删除 , 'dev' 条目。
  • 更新 package.json 中的版本。
  • 发布 npm 包。
    npm login
    npm publish
    
  • 安装发布依赖项。
pip install build twine
  • 构建资产并发布。
    python -m build .
    twine check dist/*
    twine upload dist/*
    
  • 标记发布提交(使用命令 git tag <python package version identifier>)。
  • 更新 _version.py 中的版本,并将其放回 dev 状态(例如,从 0.1.0 -> 0.2.0.dev)。更新 npm 包的版本(但不进行发布)。
  • 提交更改。
  • 执行命令 git pushgit push --tags

由以下机构支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面