如何在从 docker 容器运行的 jupyter 笔记本中获取黑色代码格式?
Posted
技术标签:
【中文标题】如何在从 docker 容器运行的 jupyter 笔记本中获取黑色代码格式?【英文标题】:How do I get black code formatting in jupyter notebooks run from a docker container? 【发布时间】:2020-11-28 18:00:17 【问题描述】:我可以让 Jupyter 在 docker 容器中正常工作,甚至可以让 Jupyter 扩展在 docker 容器中正常工作(如果它们是 jupyter_contrib_nbextensions 的一部分),但我无法让 jupyter-black 扩展正常工作来自 docker 容器。
这就是我正在尝试的。我有一个看起来像这样的Dockerfile
:
FROM python:3.8-slim-buster
WORKDIR /usr/src/app
RUN pip install black jupyter
# Jupyter black installation as mentioned at the bottom of
# https://github.com/drillan/jupyter-black
RUN jupyter nbextension install https://github.com/drillan/jupyter-black/archive/master.zip --user
RUN jupyter nbextension enable jupyter-black-master/jupyter-black
# Add Tini. Tini operates as a process subreaper for jupyter. This prevents
# kernel crashes.
ENV TINI_VERSION v0.6.0
ADD https://github.com/krallin/tini/releases/download/$TINI_VERSION/tini /usr/bin/tini
RUN chmod +x /usr/bin/tini
ENTRYPOINT ["/usr/bin/tini", "--"]
EXPOSE 8888
CMD ["jupyter", "notebook", "--port=8888", "--no-browser", "--ip=0.0.0.0", "--allow-root"]
从与Dockerfile
相同的目录中,我运行docker build . -t myjupyter
,然后运行docker run -p 8888:8888 -it --rm myjupyter
,然后打开它提供的包含令牌的jupyter notebook 链接。当我打开一个新笔记本时,我希望看到这个黑色按钮,当我直接在我的机器上安装这个包时会看到这个按钮,但是当我按照我的描述从 docker 运行时,那个按钮就不见了。
从一个简单的 docker 容器为 jupyter 笔记本启用黑色格式的最佳方法是什么?是否应该考虑完全不同的库,或者只是安装和启用我已经尝试的库的不同方式?
【问题讨论】:
【参考方案1】:我想创建一个类似的设置。我将 Jupyter Labs 与 Jupyter Lab Code Formatter 一起使用,并将其配置为 Black。以下是我的基本步骤:
-
Jupyter Docker Stacks 提供了很多准备好的 Docker 镜像,我一直使用
jupyter/scipy-notebook
。
安装其他库Jupyter Lab Code Formatting 和 Black
配置 Jupyter Lab 代码格式
添加 Docker Compose 以便于配置和运行
这是我的Dockerfile
:
FROM jupyter/scipy-notebook
RUN jupyter labextension install @ryantam626/jupyterlab_code_formatter && \
pip install jupyterlab_code_formatter black && \
jupyter serverextension enable --py jupyterlab_code_formatter
这是我的docker-compose.yml
:
version: '3'
services:
jupyter:
build: .
volumes:
- ./user-settings:/home/jovyan/.jupyter/lab/user-settings
- .:/home/jovyan/work
ports:
- 8888:8888
command: "start.sh jupyter lab --LabApp.token= --NotebookApp.notebook_dir=work"
必须configure a default formatter for Jupyter Lab Code Formatter。要保留此设置,请使用第一个卷。要么按照他们的文档中的说明通过 UI 进行配置,要么在您的主机上添加以下文件,该文件将被创建以更改设置:
user-settings/@ryantam626/jupyterlab_code_formatter/settings.jupyterlab-settings
"preferences":
"default_formatter":
"python": ["black"]
当您在user-settings
文件夹旁边有两个文件时,您可以运行docker-compose up
(或docker-compose up -d
和docker-compose down
),在您的主机上打开http://localhost:8888/
并查看右侧的最后一个按钮来格式化您的代码:
【讨论】:
以上是关于如何在从 docker 容器运行的 jupyter 笔记本中获取黑色代码格式?的主要内容,如果未能解决你的问题,请参考以下文章
访问在 Docker 容器上运行的 Jupyter notebook
如何使用官方Tensorflow docker容器在主机目录中保存和编辑Jupyter笔记本?
在 Docker 容器中将 Spyder 连接到远程 Jupyter Notebook