Jupyter Quant
一个容器化的 Jupyter 量化研究环境。
亮点
-
它可以作为 docker 镜像或 pypi 包使用。
-
包含用于量化分析的工具,如 statsmodels、pymc、arch、py_vollib、 zipline-reloaded、PyPortfolioOpt 等。
-
包含常见的常用库,如 numpy、pandas、sci-py、scikit-learn、 yellowbricks、shap、optuna。
-
ib_async 用于 Interactive Broker 连接。与 IB Gateway docker 镜像配合良好。
-
包含所有用于统计和时间序列分析的主要 Python 包, 参见 requirements。 如需查看完整列表,请检查 list installed packages 部分。
-
您可以将其作为 python 包安装,只需
pip install -U jupyter-quant -
专为 ephemeral 容器设计。您环境中的相关数据将在容器销毁后保留。
-
针对大小进行了优化,它是一个 2GB 的镜像,而 jupyter/scipy-notebook 为 4GB
-
包含 jedi 语言服务器、jupyterlab-lsp、black 和 isort。
-
不包含 conda/mamba。所有包均通过 pip 安装在
~/.local/lib/python下。应将其挂载到专用卷中, 以保留您的环境。 -
包含 Cython、Numba、bottleneck 和 numexpr 以加速处理
-
sudo,以便在需要时安装新包。
-
bash 和 stow,以便您可以 BYODF(携带您的 dotfiles)。此外还包括 git、less、nano(tiny)、jq、 ssh、curl、bash 补全等常用命令行工具。
-
支持 apt cache。如果您有 其他使用它的 Linux 机器,可以利用您的包缓存。
-
它不包含构建环境。如果需要安装一个不提供 wheel 的包,你可以自行构建 wheel,如 常见任务
快速入门
要将 jupyter-quant 用作 pypi 包
请参阅 安装 quant 包。
创建一个包含以下内容的 docker-compose.yml 文件
services:
jupyter-quant:
image: gnzsnz/jupyter-quant:${IMAGE_VERSION}
environment:
APT_PROXY: ${APT_PROXY:-}
BYODF: ${BYODF:-}
SSH_KEYDIR: ${SSH_KEYDIR:-}
START_SCRIPTS: ${START_SCRIPTS:-}
TZ: ${QUANT_TZ:-}
restart: unless-stopped
ports:
- ${LISTEN_PORT}:8888
volumes:
- quant_conf:/home/gordon/.config
- quant_data:/home/gordon/.local
- ${PWD}/Notebooks:/home/gordon/Notebooks
volumes:
quant_conf:
quant_data:
你可以将 .env-dist 作为你的起点。
cp .env-dist .env
# verify everything looks good
docker compose config
docker compose up
卷
该镜像设计为与 3 个卷配合使用:
quant_data- 用于 ~/.local 文件夹的卷。它包含缓存和所有 Python 包。这使得可以通过 pip 安装额外的包。quant_conf- 用于 ~/.config 的卷,所有配置都放在这里。这包括 jupyter、ipython、matplotlib 等- 绑定挂载(但也可以使用命名卷)- 用于所有笔记本的卷,
位于
~/Notebooks下。
这允许使用临时容器,同时保留你的笔记本 (3)、你的
配置 (2) 和你的额外包 (1)。最终,你需要
更新镜像,在这种情况下,你的笔记本 (3) 可以无问题地迁移,
你的配置 (2) 应该仍然有效,但不保证,而你的包在
quant_data 中可能仍然可用,但你应该用新镜像刷新它。
最终,你需要刷新 (1),而 (2) 则较少需要刷新
常见任务
获取运行中的服务器 URL
docker exec -it jupyterquant jupyter-server list
Currently running servers:
http://40798f7a604a:8888/?token=
ebf9e870d2aa0ed877590eb83b4d3bbbdfbd55467422a167 :: /home/gordon/Notebooks
或
docker logs -t jupyter-quant 2>&1 | grep '127.0.0.1:8888/lab?token='
您需要将主机名(在本例中为 40798f7a604a)或 127.0.0.1 更改为 您的 docker 主机 IP。
显示 jupyter 配置
docker exec -it jupyter-quant jupyter-server --show-config
设置密码
docker exec -it jupyter-quant jupyter-server password
获取命令行帮助
docker exec -it jupyter-quant jupyter-server --help
docker exec -it jupyter-quant jupyter-lab --help
列出已安装的包
docker exec -it jupyter-quant pip list
# outdated packages
docker exec -it jupyter-quant pip list -o
向 jupyter-lab 传递参数
docker run -it --rm gnzsnz/jupyter-quant --core-mode
docker run -it --rm gnzsnz/jupyter-quant --show-config-json
在容器中运行命令
docker run -it --rm gnzsnz/jupyter-quant bash
在容器外构建 wheels
在容器外构建 wheels,并将 wheels 导入容器
# make sure python version match .env-dist
docker run -it --rm -v $PWD/wheels:/wheels python:3.11 bash
pip wheel --no-cache-dir --wheel-dir /wheels numpy
这将构建 numpy(或你需要的任何其他包)的 wheels,并将文件保存在 $PWD/wheels 中。然后你可以将 wheels 复制到你的 notebook 挂载点(上述第 3 步),并在容器内安装它。你甚至可以将其拖放到 Jupyter 中。
安装你的 dotfiles
git clone 将你的 dotfiles 指向 Notebook/etc/dotfiles,设置环境变量
BYODF=/home/gordon/Notebook/etc/dotfiles 在你的 docker-compose.yml 中
当容器启动时,stow 会创建类似 /home/gordon/.bashrc 的链接
安装你的 SSH 密钥
您需要定义环境变量 SSH_KEY_DIR,它应指向
存放您密钥的位置。建议的位置是
SSH_KEYDIR=/home/gordon/Notebooks/etc/ssh,请确保该目录具有
正确的权限。类似 chmod 700 Notebooks/etc/ssh 的配置应该可以正常工作。
entrypoint.sh 脚本将创建一个指向
$SSH_KEYDIR 的符号链接,位于 /home/gordon/.ssh 上。
在 Jupyter 的终端中,你可以:
# start agent
eval $(ssh-agent)
# add keys to agent
ssh-add
# open a tunnel
ssh -fNL 4001:localhost:4001 gordon@bastion-ssh
在启动时运行脚本
如果您定义了 START_SCRIPTS 环境变量并指定了一个路径,该目录下的所有脚本都将在启动时执行。示例 .env-dist 文件包含一行注释,其中 START_SCRIPTS=/home/gordon/Notebooks/etc/start_scripts
作为示例和推荐位置。
文件应具有 .sh 后缀,并且应在 bash 下运行。在目录
start_scripts
中,您可以找到用于加载 ssh 密钥和安装 python 包的示例脚本。
安装 jupyter-quant 包
Jupyter-quant 作为 pypi 上的包提供。 它是一个元包,以尽可能高的版本拉取所有依赖项。
安装 pypi 包。
pip install -U jupyter-quant
支持的其他选项为
pip install -U jupyter-quant[bayes] # to install pymc & arviz/graphviz
pip install -U jupyter-quant[sk-util] # to install skfolio & sktime
jupyter-quant 它是一个元包,用于固定其所有依赖项的版本。
如果你需要/想要升级某个依赖项,你可以卸载 jupyter-quant,
尽管这可能会破坏相互依赖关系。或者从 git 安装,该仓库会定期更新。
# git install
pip install -U git+https://github.com/quantbelt/jupyter-quant.git