如何以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 相关文章推荐
在Windows8上的搭建Python和Django环境
Jul 03 Python
python写一个md5解密器示例
Feb 23 Python
对numpy中轴与维度的理解
Apr 18 Python
浅谈Django中的数据库模型类-models.py(一对一的关系)
May 30 Python
解决Python获取字典dict中不存在的值时出错问题
Oct 17 Python
Python零基础入门学习之输入与输出
Apr 03 Python
python如何使用Redis构建分布式锁
Jan 16 Python
python实现爱奇艺登陆密码RSA加密的方法示例详解
May 27 Python
在tensorflow下利用plt画论文中loss,acc等曲线图实例
Jun 15 Python
OpenCV 之按位运算举例解析
Jun 19 Python
python json.dumps() json.dump()的区别详解
Jul 14 Python
python 实现的截屏工具
May 08 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
QueryPath PHP 中的jQuery
2010/04/11 PHP
从手册去理解分析PHP session机制
2011/07/17 PHP
php 判断字符串编码是utf-8 或gb2312实例
2016/11/01 PHP
jquery ui resizable bug解决方法
2010/10/26 Javascript
ajax处理php返回json数据的实例代码
2013/01/24 Javascript
chrome下jq width()方法取值为0的解决方法
2014/05/26 Javascript
jQuery html()方法使用不了无法显示内容的问题
2014/08/06 Javascript
JavaScript实现的一个计算数字步数的算法分享
2014/12/06 Javascript
jQuery获取字符串中出现最多的数
2016/02/22 Javascript
js removeChild 方法深入理解
2016/08/16 Javascript
Jquery遍历select option和添加移除option的实现方法
2016/08/26 Javascript
JS框架之vue.js(深入三:组件1)
2016/09/29 Javascript
jQuery中$.ajax()方法参数解析
2016/10/22 Javascript
Express进阶之log4js实用入门指南
2018/02/10 Javascript
javascript中关于类型判断的一些疑惑小结
2018/10/14 Javascript
jQuery+PHP实现上传裁剪图片
2020/06/29 jQuery
「中高级前端面试」JavaScript手写代码无敌秘籍(推荐)
2019/04/08 Javascript
vue封装可复用组件confirm,并绑定在vue原型上的示例
2019/10/31 Javascript
基于JS实现计算24点算法代码实例解析
2020/07/23 Javascript
Vue+Bootstrap收藏(点赞)功能逻辑与具体实现
2020/10/22 Javascript
Python程序中使用SQLAlchemy时出现乱码的解决方案
2015/04/24 Python
python中enumerate函数用法实例分析
2015/05/20 Python
python matplotlib绘图,修改坐标轴刻度为文字的实例
2018/05/25 Python
Python高级特性切片(Slice)操作详解
2018/09/27 Python
Python中整数的缓存机制讲解
2019/02/16 Python
Python datetime包函数简单介绍
2019/08/28 Python
wxPython实现带颜色的进度条
2019/11/19 Python
Python语法之精妙的十个知识点(装B语法)
2020/01/18 Python
Python 识别12306图片验证码物品的实现示例
2020/01/20 Python
Python实现括号匹配方法详解
2020/02/10 Python
Python计算IV值的示例讲解
2020/02/28 Python
html5实现滑块功能之type="range"属性
2020/02/18 HTML / CSS
《再见了,亲人》教学反思
2014/02/26 职场文书
英语复习计划
2015/01/19 职场文书
普通员工辞职信范文
2015/05/12 职场文书
2021-4-3课程——SQL Server查询【2】
2021/04/05 SQL Server