如何以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获取赶集网招聘信息前篇
Apr 18 Python
pygame实现简易飞机大战
Sep 11 Python
python版本五子棋的实现代码
Dec 11 Python
运用Python的webbrowser实现定时打开特定网页
Feb 21 Python
Python学习笔记之变量、自定义函数用法示例
May 28 Python
详解Python 定时框架 Apscheduler原理及安装过程
Jun 14 Python
使用Django和Postgres进行全文搜索的实例代码
Feb 13 Python
python词云库wordCloud使用方法详解(解决中文乱码)
Feb 17 Python
Python importlib动态导入模块实现代码
Apr 16 Python
浅析python 字典嵌套
Sep 29 Python
如何用Python徒手写线性回归
Jan 25 Python
详解python中[-1]、[:-1]、[::-1]、[n::-1]使用方法
Apr 25 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中使用getimagesize获取图片、flash等文件的尺寸信息实例
2014/04/29 PHP
Zend Framework实现Zend_View集成Smarty模板系统的方法
2016/03/05 PHP
php打开本地exe程序,js打开本地exe应用程序,并传递相关参数方法
2018/02/06 PHP
去除链接虚线全面分析总结
2006/08/15 Javascript
Discuz! 6.1_jQuery兼容问题
2008/09/23 Javascript
jquery中动态效果小结
2010/12/16 Javascript
Jquery中getJSON在asp.net中的使用说明
2011/03/10 Javascript
jquery 跨域访问问题解决方法(笔记)
2011/06/08 Javascript
动态的创建一个元素createElement及删除一个元素
2014/01/24 Javascript
JavaScript调试工具汇总
2014/12/23 Javascript
JS定义网页表单提交(submit)的方法
2015/03/20 Javascript
js实现模拟银行卡账号输入显示效果
2015/11/18 Javascript
AngularJS控制器之间的数据共享及通信详解
2016/08/01 Javascript
Vue.js2.0中的变化小结
2017/10/24 Javascript
Vue中使用clipboard实现复制功能
2018/09/05 Javascript
如何对react hooks进行单元测试的方法
2019/08/14 Javascript
利用原生JS实现欢乐水果机小游戏
2020/04/23 Javascript
JavaScript数组类型Array相关的属性与方法详解
2020/09/08 Javascript
[01:08:32]DOTA2-DPC中国联赛 正赛 DLG vs PHOENIX BO3 第二场 1月18日
2021/03/11 DOTA
使用Python获取Linux系统的各种信息
2014/07/10 Python
Python实现分割文件及合并文件的方法
2015/07/10 Python
利用Pandas和Numpy按时间戳将数据以Groupby方式分组
2019/07/22 Python
Python实现栈的方法详解【基于数组和单链表两种方法】
2020/02/22 Python
python语言的优势是什么
2020/06/17 Python
利用HTML5 Canvas制作一个简单的打飞机游戏
2015/05/11 HTML / CSS
英文简历中的自我评价用语
2013/12/09 职场文书
公司年会抽奖活动主持词
2014/03/31 职场文书
团日活动总结怎么写
2014/06/25 职场文书
2014旅游局领导班子四风问题对照检查材料思想汇报
2014/09/19 职场文书
在职员工证明书
2014/09/19 职场文书
写自招自荐信的绝招!
2019/04/19 职场文书
家电创业计划书
2019/08/05 职场文书
《工作是最好的修行》读后感3篇
2019/12/13 职场文书
ThinkPHP5和ThinkPHP6的区别
2021/03/31 PHP
Oracle 触发器trigger使用案例
2022/02/24 Oracle
pytorch分类模型绘制混淆矩阵以及可视化详解
2022/04/07 Python