python - 如何在从 docker 容器运行的 jupyter notebooks 中获取黑色代码格式?

标签 python docker jupyter code-formatting python-black

我可以让 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,然后打开它提供的包含 token 的 jupyter notebook 链接。当我打开一个新笔记本时,我希望看到这个黑色按钮,就像我直接在我的机器上安装这个包时看到的那样,但是当我按照我的描述从 docker 运行时,这个按钮不见了。

enter image description here

从简单的 docker 容器为 jupyter 笔记本启用黑色格式的最佳方法是什么?是否有我应该考虑的完全不同的库,或者只是安装和启用我已经在尝试的库的不同方式?

最佳答案

我想创建一个类似的设置。我将 Jupyter Labs 与 Jupyter Lab Code Formatter 一起使用,并将其配置为 Black。以下是我的基本步骤:

  1. Jupyter Docker Stacks提供了很多准备好的 Docker 镜像,我总是使用 jupyter/scipy-notebook
  2. 安装额外的库 Jupyter Lab Code Formatting和黑色
  3. 配置 Jupyter 实验室代码格式
  4. 添加 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 -ddocker-compose down),在您的主机上打开 http://localhost:8888/ 并查看右侧最后一个按钮以格式化您的代码:

Jupyter Lab Toolbar with Code Formatting

关于python - 如何在从 docker 容器运行的 jupyter notebooks 中获取黑色代码格式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63318041/

相关文章:

python - Jupyter Notebook 服务器无法启动

python - 理解 pyTorch 中的代码

python - 将 python ndarray 转换为 matlab 矩阵

docker - docker 容器中的防病毒 - fanotify 在主机和容器之间工作吗?

python - Jupyter: "notebook"不是 jupyter 命令

visual-studio-code - VS Code Jupyter Notebook Markdown 显示字体

python - Pandas 将 cumsum 拆分为上限,然后在不同的列中继续使用余数

python - 无法将 Django 管理命令添加到我的开发环境中的项目

linux - 难以访问 Docker 的 API

docker - Supervisord 不断重复一个退出为零的过程。