如何以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程序中使用SQLAlchemy时出现乱码的解决方案
Apr 24 Python
python语音识别实践之百度语音API
Aug 30 Python
python检测IP地址变化并触发事件
Dec 26 Python
python适合人工智能的理由和优势
Jun 28 Python
Python动态语言与鸭子类型详解
Jul 01 Python
Django为窗体加上防机器人的验证码功能过程解析
Aug 14 Python
python 经典数字滤波实例
Dec 16 Python
TensorFlow基本的常量、变量和运算操作详解
Feb 03 Python
pandas读取csv文件提示不存在的解决方法及原因分析
Apr 21 Python
浅谈Python中的继承
Jun 19 Python
python实现人工蜂群算法
Sep 18 Python
Python中time与datetime模块使用方法详解
Mar 31 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中使用Oracle数据库(5)
2006/10/09 PHP
php录入页面中动态从数据库中提取数据的实现
2006/10/09 PHP
PHP strstr 函数判断字符串是否否存在的实例代码
2013/09/28 PHP
laravel-admin 在列表页添加自定义按钮的例子
2019/09/30 PHP
DD_belatedPNG,IE6下PNG透明解决方案(国外)
2010/12/06 Javascript
js select option对象小结
2013/12/20 Javascript
Js控制滑轮左右滑动实例
2015/02/13 Javascript
js使用setTimeout实现定时炸弹的方法
2015/04/10 Javascript
JS控制表单提交的方法
2015/07/09 Javascript
jQuery实现的经典滑动门效果
2015/09/22 Javascript
微信小程序之蓝牙的链接
2017/09/26 Javascript
详解Vue Elememt-UI构建管理后台
2018/02/27 Javascript
详解express + mock让前后台并行开发
2018/06/06 Javascript
Vue 中axios配置实例详解
2018/07/27 Javascript
原生js实现form表单序列化的方法
2018/08/02 Javascript
JS html事件冒泡和事件捕获操作示例
2019/05/01 Javascript
在layer弹层layer.prompt中,修改placeholder的实现方法
2019/09/27 Javascript
Node.js API详解之 readline模块用法详解
2020/05/22 Javascript
javascript中导出与导入实现模块化管理教程
2020/12/03 Javascript
JS实现页面侧边栏效果探究
2021/01/08 Javascript
[02:09]DOTA2辉夜杯 EHOME夺冠举杯现场
2015/12/28 DOTA
[36:41]完美世界DOTA2联赛循环赛FTD vs Magma第一场 10月30日
2020/10/31 DOTA
Django如何自定义分页
2018/09/25 Python
Python计算库numpy进行方差/标准方差/样本标准方差/协方差的计算
2018/12/28 Python
python itchat给指定联系人发消息的方法
2019/06/11 Python
如何利用Anaconda配置简单的Python环境
2019/06/24 Python
python打包成so文件过程解析
2019/09/28 Python
css 如何让背景图片拉伸填充避免重复显示
2013/07/11 HTML / CSS
FORZIERI澳大利亚站:全球顶级奢华配饰精品店
2016/12/31 全球购物
牵手50新加坡:专为黄金岁月的单身人士而设的交友网站
2020/08/16 全球购物
应聘自荐信
2013/12/14 职场文书
2014流动人口计划生育工作总结
2014/12/20 职场文书
集团财务总监岗位职责
2015/04/03 职场文书
如何使用vue3打造一个物料库
2021/05/08 Vue.js
用python画城市轮播地图
2021/05/28 Python
Android Rxjava3 使用场景详解
2022/04/07 Java/Android