如何在 Docker 中的 Jupyter notebook 运行 中完成代码

How to get code completion in a Jupyter notebook running in Docker

我按照官方 Tensorflow Docker hub 上的说明进行操作,以便能够使用带有公开端口的 GPU 就绪 docker 图像进行本地 Jupyter notebook 开发;包括安装所需的 nvidia-docker

我可以毫无问题地导入包,但是在点击 Tab 键时代码完成不起作用。例如:

import tensorflow as tf       # works fine
tf. <tab>                     # nothing happens

如果我手动输入,我可以使用代码。我可以执行以下操作:

import numpy as np            # no complaints
np.arange(0, 10)              # returns expected result

有趣的是,如果我输入 tf. 并点击 shift-<double-tab> 我通常会得到完整的文档字符串:


我使用以下命令拉取 docker 图像并 运行 它:

docker run -u $(id -u):$(id -g) -it --runtime=nvidia --rm \
    -v $(realpath ~/Documents/jupyter_notebooks):/tf/notebooks \
    -p 8888:8888 tensorflow/tensorflow:nightly-gpu-py3-jupyter

除了将本地文件夹绑定到容器之外,这还将我的用户 ID 映射到 运行ning 容器,因此我不在 root 上工作主文件夹(我的 docker 安装属于 root。我可以像往常一样在浏览器中打开笔记本目录并启动一个新的 Python3 笔记本。

我是 运行ning Ubuntu 16.04,在 Chrome 中打开 Jupyter 笔记本(我使用 vimium 扩展,但它已关闭在发现它可能与发送到 Chrome) 的键盘命令混淆后,我重新启动了容器。

$  docker --version
Docker version 18.09.1, build 4c52b90

我遇到了一个快速 easy solution here - 只是 运行 Jupyter 魔术命令之一:

%config IPCompleter.greedy=True

还在 PyCharm 内 运行ning 的 Jupyter notebook 中工作。一旦我 运行 该命令,PyCharm 就开始为项目编制索引,这意味着代码完成在脚本和笔记本中都能正常工作(也没有工作!)

应该可以将配置参数添加到全局 Jupyter 配置文件中。


在同一个线程上还有第二种可能的解决方案,使用笔记本扩展,但我还没有测试过。

我为 jupyter notebook 写了一个插件,它提供基于深度学习模型的代码自动补全。它是 C/S 模型,并且可以 运行 无处不在。你可以试试这个:https://github.com/wenmin-wu/jupyter-tabnine 此工具现已在 pypi 上可用。只需发出以下 4 行命令并享受它:)

pip3 install jupyter-tabnine
jupyter nbextension install --py jupyter_tabnine
jupyter nbextension enable --py jupyter_tabnine
jupyter serverextension enable --py jupyter_tabnine

Wenmin Wu 的 tabnine 插件绝对是比内置更好的自动补全服务。

我想指出 IPython 使用 Jedi 来完成自动完成和其他一些魔法。然而,两人之间的兼容性时不时会出现问题。除了等待 IPython 更新之外,一个简单的修复方法是这个魔法:

%config IPCompleter.use_jedi=False