如何以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映射列表实例分析
Jan 26 Python
python实现中文分词FMM算法实例
Jul 10 Python
python编写简单爬虫资料汇总
Mar 22 Python
Django模型序列化返回自然主键值示例代码
Jun 12 Python
python 实现创建文件夹和创建日志文件的方法
Jul 07 Python
pycharm修改文件的默认打开方式的步骤
Jul 29 Python
Matplotlib绘制雷达图和三维图的示例代码
Jan 07 Python
Pycharm插件(Grep Console)自定义规则输出颜色日志的方法
May 27 Python
利用python+request通过接口实现人员通行记录上传功能
Jan 13 Python
python将YUV420P文件转PNG图片格式的两种方法
Jan 22 Python
Python实现对齐打印 format函数的用法
Apr 28 Python
virtualenv隔离Python环境的问题解析
Jun 21 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
类的另类用法--数据的封装
2006/10/09 PHP
在PHP中使用Sockets 从Usenet中获取文件
2008/01/10 PHP
PHP 循环列出目录内容的函数代码
2010/05/26 PHP
php使用cookie实现记住用户名和密码实现代码
2015/04/27 PHP
PHP基于pdo的数据库操作类【可支持mysql、sqlserver及oracle】
2018/05/21 PHP
PHP实现的pdo连接数据库并插入数据功能简单示例
2019/03/30 PHP
Javascript的构造函数和constructor属性
2010/01/09 Javascript
JQuery分别取得每行最后一列和最后一行的示例代码
2013/08/18 Javascript
45个JavaScript编程注意事项、技巧大全
2015/02/11 Javascript
你所未知的3种Node.js代码优化方式
2016/02/25 Javascript
微信小程序 两种滑动方式(横向滑动,竖向滑动)详细及实例代码
2017/01/13 Javascript
webpack配置的最佳实践分享
2017/04/21 Javascript
jQuery替换节点元素的操作方法
2018/03/18 jQuery
vue template中slot-scope/scope的使用方法
2018/09/06 Javascript
vue.js+element-ui动态配置菜单的实例
2018/09/07 Javascript
vue使用Google地图的实现示例代码
2018/12/19 Javascript
解决vue-cli项目开发运行时内存暴涨卡死电脑问题
2019/10/29 Javascript
VSCode 配置uni-app的方法
2020/07/11 Javascript
详解微信小程序入门从这里出发(登录注册、开发工具、文件及结构介绍)
2020/07/21 Javascript
Vue登录拦截 登录后继续跳转指定页面的操作
2020/08/04 Javascript
[46:32]Fnatic vs OG 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
Python实现的金山快盘的签到程序
2013/01/17 Python
python3获取当前文件的上一级目录实例
2018/04/26 Python
python 反向输出字符串的方法
2018/07/16 Python
Python 编程速成(推荐)
2019/04/15 Python
Python增强赋值和共享引用注意事项小结
2019/05/28 Python
树莓派用python中的OpenCV输出USB摄像头画面
2019/06/22 Python
PyTorch: 梯度下降及反向传播的实例详解
2019/08/20 Python
html5的画布canvas——画出简单的矩形、三角形实例代码
2013/06/09 HTML / CSS
巴西在线鞋店:Shoestock
2017/10/28 全球购物
介绍一下Python下range()函数的用法
2013/11/07 面试题
应届生新闻编辑求职信
2013/11/19 职场文书
法制主题班会教案
2015/08/13 职场文书
Go语言 go程释放操作(退出/销毁)
2021/04/30 Golang
用python实现监控视频人数统计
2021/05/21 Python
MySQL深度分页(千万级数据量如何快速分页)
2021/07/25 MySQL