配置Jupyter Notebook在局域网下访问
一、Overviw
在学习和运用Python中,Jupyter是个非常得力的助手,特别在数据科学和机器学习领域里,更是效率放大器。Jupyter包括Jupyter Notebook和JupyterLab,由于我在学习的资料还在用前者,因此这篇博文讲围绕Jupyter Notebook来讲述。 以下内容,我也将它缩略成Jupyter,请读者留意。
大部分情况下,我都是在一台Mac上运行它,但随着研究深入,对CUDA需求也越来越迫切,Mac显得”力不从心”了。不过,好在我还有一台PC,上面有NVIDIA 3080 Laptop,可以从容地调用CUDA,一般规模的学习和研究,就足够了。
我喜欢在Mac上工作和学习,有超过十年的时间了。如果要换到PC上,我需要重新熟悉软件环境,搭建各种服务,这不是我期望的。再者,PC虽然有CUDA,但是发热大,噪音大。坐在旁边,手嫌烫,耳朵嫌吵。我是非常不乐意使用这台PC的。–显然,打游戏除外。
因此,我需要实现这么一个目标:由于Jupyter以Web形式提供服务,那么,从Mac上通过浏览器访问PC上Jupyer,应该是行得通的。不过,我也不需要过分放大这个目标,只需要在LAN(局域网)内访问,并且支持单用户就好。
注:以下内容均是在PC上进行操作。
二、准备工作:获得配置文件
首先执行如下命令,生成配置文件:
> jupyter notebook --generate-config Writing default config to: C:\Users\用户名\.jupyter\jupyter_notebook_config.py
在上述输出中, jupyter_notebook_config.py
即为生成的配置文件。–注:无论PC和Mac,该文件都是在当前用户目录下的.jupyter
文件夹中。
三、第一步配置:监听IP
在上面的文件中,寻找 c.NotebookApp.ip
,阅读其注释:
## The IP address the notebook server will listen on. # Default: 'localhost'
根据上面的内容,可以设置监听的地址有:localhost
、127.0.0.1
。当然,也可以是本机在LAN下的IP地址,形如:192.168.1.100
。要囊括这些情况,就可以设置为 0.0.0.0
,如下:
c.NotebookApp.ip = '0.0.0.0'
四、第二步配置:监听端口
接下来就是检查端口,特别是当你启用了PC上的WSL。如果在WSL里也开启Jupyter,那么势必会和PC上的Jupyter的端口冲突了。那么就可以修改下面这个配置项上,避免他们冲突。
## The port the notebook server will listen on (env: JUPYTER~PORT~). # Default: 8888 c.NotebookApp.port = 8888
五、第三步配置:访问密码
由于局域网下,只有一个人访问PC的Jupyter,因此设置密码显得”多余”。但是,如果不设置密码,则需要再访问URL里,保证有 token
参数。 这显然不友好,因此设置密码就是必须的了。
从配置文件里,查找 c.NotebookApp.password
,阅读它的注释:
## Hashed password to use for web authentication. # # To generate, type in a python/IPython shell: # # from notebook.auth import passwd; passwd() # # The string should be of the form type:salt:hashed-password.
于是打开ipython,执行上述命令,可以轻松获得密码:
In [1]: from notebook.auth import passwd; passwd() Enter password: Verify password: Out[1]: 'argon2:$argon2id$v=19$m=10240,t=10,p=8$AvMw+......YK/9M'
在配置文件里,给 c.NotebookApp.password
附上上面的结果。
注意:上述代码是在Python 3.6.13版本上执行,有可能无法正常在更新版本上执行。
六、收尾配置:工作
在上面三步后,几乎全部的配置就完成了。如果,你觉得每次启动Jupyter,它都要打开浏览器,很没有必要,可以找到 c.NotebookApp.open_browser
,将其设置为 False
。
## Whether to open in a browser after starting. The specific browser used is # platform dependent and determined by the python standard library webbrowser # module, unless it is overridden using the --browser (NotebookApp.browser) # configuration option. c.NotebookApp.open_browser = False
七、总结
在我进行这些操作时,有两份资料12对我帮助很大,在此,感谢它们。特别是《配置 jupyter notebook 允许远程访问》1一文,提到了screen。当然,这对PC没有用处,对Linux用户是有帮助的。不过,我更擅长用tmux ,它也能够在断开SSH连接后,依然保证进程存活。
最后,设置Jupyter在LAN下工作,本身是非常简单的,难以体现出”技术难度”。不过,找到这些信息,是要花些功夫的,权当是一份备忘录吧。