如何以Winsows Service方式运行JupyterLab


Posted in Python onAugust 30, 2020

有数据分析,数据挖掘,以及机器学习和深度学习实践经验的读者应该会对Jupyter Notebook这一工具十分熟悉,而JupyterLab是它的升级版本,其提供了更具扩展性,更加可定制化的功能选项。

安装与启动JupyterLab的方法与Jupyter Notebook一样简单。

应用安装

pip install jupyterlab

应用启动

jupyter lab

但这样的操作会带来一个问题,在以浏览器打开JupterLab应用窗口的同时,必须始终保证命令行窗口同样处于打开状态。如下图所示:

如何以Winsows Service方式运行JupyterLab

要想解决这样的问题,需要将JupyterLab以Windows Service的方式运行。

而Python代码要在Windows系统里创建Service的话要用到win32serviceutil这个类库。

类库安装

pip install pywin32

服务代码

将以下代码保存为jupyterlabservice.py文件,并放在配置目录之下,如C:\Users\Ken\.jupyter

import inspect
import logging
import os
import win32serviceutil
from jupyterlab.labapp import JupyterApp, LabApp

current_file = os.path.abspath(inspect.getfile(inspect.currentframe()))
os.chdir(os.path.dirname(current_file))


class JupyterLabService(win32serviceutil.ServiceFramework):

  _svc_name_ = "JupyterLab"
  _svc_display_name_ = "Jupyter Lab Service"
  _svc_description_ = "Jupyter Lab Service"

  def __init__(self, args):
    super().__init__(args)
    self.app = LabApp()

  def _init_lab(self):
    JupyterApp.initialize(self.app)
    self.app.init_configurables()
    self.app.init_components()
    self.app.init_webapp()
    self.app.init_terminals()
    self.app.init_server_extensions()
    self.app.init_mime_overrides()
    self.app.init_shutdown_no_activity()

  def SvcDoRun(self):
    self.app.config_dir = "."
    self._init_lab()
    self.app.start()

  def SvcStop(self):
    self.app.stop()

  def SvcShutdown(self):
    self.SvcStop()


if __name__ == '__main__':
  win32serviceutil.HandleCommandLine(JupyterLabService)

服务安装

python .\jupyterlabservice.py install

服务启动

python .\jupyterlabservice.py start

访问localhost:8888网址,可以在浏览器中打开JupyterLab应用,但此时会遇到需要token认证的问题,如下图所示:

如何以Winsows Service方式运行JupyterLab

解决此问题方法是修改配置文件中的token参数。

首先是在配置目录中找到jupyter_notebook_config.py文件,如果没有的话可以通过以下命令创建。

jupyter lab --generate-config

然后找到c.NotebookApp.token一项,将其值设为空字符串。

## Token used for authenticating first-time connections to the server.
#
# The token can be read from the file referenced by JUPYTER_TOKEN_FILE or set
# directly with the JUPYTER_TOKEN environment variable.
#
# When no password is enabled, the default is to generate a new, random token.
#
# Setting to an empty string disables authentication altogether, which is NOT
# RECOMMENDED.
c.NotebookApp.token = ''

重启相应服务后,再次访问localhost:8888网址,这下就正常了。

如何以Winsows Service方式运行JupyterLab

如果不想使用默认的8888端口,也可以在c.NotebookApp.port选项中将其值改成特定的端口号。

## The port the notebook server will listen on (env: JUPYTER_PORT).
c.NotebookApp.port = 9999

再次重启服务,这次便可以通过localhost:9999来访问JuypterLab应用了。

作者:Ken.W
出处:http://www.cnblogs.com/kenwoo

以上就是如何以Winsows Service方式运行JupyterLab的详细内容,更多关于运行JupyterLab的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
python通过yield实现数组全排列的方法
Mar 18 Python
python编码总结(编码类型、格式、转码)
Jul 01 Python
快速入门python学习笔记
Dec 06 Python
python 基本数据类型占用内存空间大小的实例
Jun 12 Python
python实现决策树分类
Aug 30 Python
Python subprocess库的使用详解
Oct 26 Python
pandas.dataframe按行索引表达式选取方法
Oct 30 Python
Django框架首页和登录页分离操作示例
May 28 Python
Django中多种重定向方法使用详解
Jul 17 Python
Python修改列表值问题解决方案
Mar 06 Python
Python reversed函数及使用方法解析
Mar 17 Python
使用pytorch 筛选出一定范围的值
Jun 28 Python
selenium切换标签页解决get超时问题的完整代码
Aug 30 #Python
五分钟带你搞懂python 迭代器与生成器
Aug 30 #Python
python开根号实例讲解
Aug 30 #Python
python一些性能分析的技巧
Aug 30 #Python
python脚本第一行如何写
Aug 30 #Python
golang/python实现归并排序实例代码
Aug 30 #Python
python创建文本文件的简单方法
Aug 30 #Python
You might like
PHP 安全检测代码片段(分享)
2013/07/05 PHP
php中限制ip段访问、禁止ip提交表单的代码分享
2014/08/22 PHP
Yii中render和renderPartial的区别
2014/09/03 PHP
php 5.6版本中编写一个PHP扩展的简单示例
2015/01/20 PHP
php 中的closure用法详解
2017/06/12 PHP
JavaScript 判断指定字符串是否为有效数字
2010/05/11 Javascript
JavaScript之编码规范 推荐
2012/05/23 Javascript
JS实现仿FLASH效果的竖排导航代码
2015/09/15 Javascript
js实现延时加载Flash的方法
2015/11/26 Javascript
基于javascript实现简单计算器功能
2016/01/03 Javascript
jQuery实现的省市联动菜单功能示例【测试可用】
2017/01/13 Javascript
Vue 2.0+Vue-router构建一个简单的单页应用(附源码)
2017/03/14 Javascript
vue 动态改变静态图片以及请求网络图片的实现方法
2018/02/07 Javascript
基于JavaScript伪随机正态分布代码实例
2019/11/07 Javascript
[46:44]VG vs TNC Supermajor小组赛B组败者组决赛 BO3 第一场 6.2
2018/06/03 DOTA
Django代码性能优化与Pycharm Profile使用详解
2018/08/26 Python
不管你的Python报什么错,用这个模块就能正常运行
2018/09/14 Python
对Python subprocess.Popen子进程管道阻塞详解
2018/10/29 Python
python for 循环获取index索引的方法
2019/02/01 Python
Python中整数的缓存机制讲解
2019/02/16 Python
python频繁写入文件时提速的方法
2019/06/26 Python
django组合搜索实现过程详解(附代码)
2019/08/06 Python
如何使用python3获取当前路径及os.path.dirname的使用
2019/12/13 Python
python怎么提高计算速度
2020/06/11 Python
去除python中的字符串空格的简单方法
2020/12/22 Python
Python机器学习工具scikit-learn的使用笔记
2021/01/28 Python
Sunglasses Shop荷兰站:英国最大的太阳镜独立在线零售商和供应商
2017/01/08 全球购物
科茨沃尔德家居商店:Scotts of Stow
2018/06/29 全球购物
StringBuilder和String的区别
2015/05/18 面试题
个人现实表现材料
2014/02/04 职场文书
承诺函范文
2015/01/21 职场文书
教师个人总结范文
2015/02/11 职场文书
道歉的话语大全
2015/05/12 职场文书
初中运动会前导词
2015/07/20 职场文书
解决vue $http的get和post请求跨域问题
2021/06/07 Vue.js
css如何把元素固定在容器底部的四种方式
2022/06/16 HTML / CSS