windows一键启动jupyter
windows一键启动jupyter
jupyter简介
Jupyter是一个开源的交互式计算环境,主要用于数据分析、数据可视化和科学计算。它的名字来源于三种编程语言的缩写:Julia、Python和R,这三种语言都可以在Jupyter环境中运行。如果您想进行数据分析、科学计算、机器学习等任务,Jupyter是一个非常有用的工具,因为它提供了一个交互式的环境,让您可以探索数据、编写代码并实时查看结果。
Jupyter的主要特点
交互性
Jupyter环境允许用户以交互式的方式编写和执行代码。用户可以一次性执行一条代码或一块代码,然后立即查看结果。这对于数据分析和探索性编程非常有用。
支持多种编程语
虽然最初是以支持Julia、Python和R为主,但实际上Jupyter可以支持众多编程语言。用户可以通过安装相应的内核来扩展Jupyter的语言支持。
Notebook文档
Jupyter Notebook是Jupyter环境的一种文件格式,它允许用户在同一个文档中混合编写可执行的代码、可视化输出、文本说明、公式和图像等内容。这使得Jupyter成为了一个非常适合分享和展示分析过程的工具。
数据可视化
Jupyter环境内嵌了丰富的数据可视化工具,使用户可以方便地创建图表、图像和动画,以更好地理解数据。
灵活性
Jupyter可以在本地计算机上安装运行,也可以在云端服务器上部署。这使得用户可以根据自己的需求选择适合的运行环境。
Jupyter 的安装
在Linux上安装Jupyter Notebook
-
安装Python: 大多数Linux发行版都自带Python,您可以通过以下命令检查是否已经安装:
python --version
如果未安装Python或需要更新版本,请根据您的发行版使用适当的包管理工具进行安装或更新。
-
安装pip: 如果未安装pip,可以使用以下命令安装:
sudo apt-get update sudo apt-get install python3-pip
-
安装Jupyter Notebook: 在终端中运行以下命令来安装Jupyter Notebook:
python3 -m pip install jupyter
-
启动Jupyter Notebook: 在终端中运行以下命令来启动Jupyter Notebook:
jupyter notebook
在Windows上安装Jupyter Notebook
-
安装Python和pip: 可以从Python官方网站(https://www.python.org/downloads/windows/)下载Python安装程序,并确保勾选“Add Python to PATH”选项。
-
安装Jupyter Notebook: 在命令提示符(Command Prompt)中运行以下命令来安装Jupyter Notebook:
python -m pip install jupyter
-
启动Jupyter Notebook: 在命令提示符中运行以下命令来启动Jupyter Notebook:
jupyter notebook
总结一下,不管是linux还是windows安装都是一下几个步骤:
1. 首先安装python环境,windows则配置一下环境2. 再安装pip环境3. 通过pip命令安装jupyter模块4. 运行jupyter
如何在windows下一键启动安装jupyter?
背景(为什么要这么做?)
实际情况是我们想做一个在线的python编辑器,需要用户能再浏览器进行在线编程python,并且能实时输出python代码执行的结果。有人可能会说为什么不直接通过代码进行执行服务器上的python命令来执行python代码呢,但是这样其实做不到实时返回执行结果的,比如一个for循环打印无法实现,比如用户需要输入,接受输入以后展示输出结果。
设计思路(怎么做?)
问题
windows
执行意见安装一般都是一个exe
程序点击一键启动,如何打包exe
?- 启动如何安装
python
和pip
的环境
解决问题
- 目前打包
exe
的方式一般有两种: 使用pyinstaller
打包Python
程序为.exe
和使用Visual Studio
打包C#
程序为.exe
,这里我们对python
代码比较熟悉,选择使用pyinstaller
- 首先
python
有windows
的安装包,如果通过python
代码去安装python.exe
,体验非常不好,需用用户去点击安装。这里我们换个思路,找到python
官网提供免安装版本的python
包。
不要开心的太早了,免安装版本的python
包不没有pip
模块的,所以就得考虑安装pip
模块。python
安装pip
模块见:免安装版本python安装pip模块。
总结
我们再总结一下前面的思路,进行一个比较详细的设计思路:
- 下载官方
python
进行解压,并且将get-pip.py
放入到python
文件夹下 - 首先判断
python
是否已经安装过,未安装则配置python
环境变量 - 首先判断
pip
模块是否已经安装过,未安装通过python
代码安装pip模块 - 安装完以后
pip
模块后,再配置pip
的环境变量 - 为了防止安装
jupyter
超时,通过python
代码更换镜像源为国内镜像源 - 使用
pip
进行安装jupyter
- 启动
jupyter
此步骤则是完整的代码逻辑,其实这里并不完整,因为你安装了jupyter
,你肯定不想每次使用的时候都去点击exe
来启动jupyter
,所以是需要做一个windows
的开机自启动的,这个后面会降到如何做开机自启。
代码实现
jupyter 打包exe 代码实现
jupyter.py
import os
import subprocess
import traceback
import socket
from utils.logutils import logpython_path = "python"
scripts_path = "python\Scripts"def is_installed(model):try:# 尝试运行 python 命令result = subprocess.run([model, "--version"], stdout=subprocess.PIPE, stderr=subprocess.PIPE)# 检查返回结果if result.returncode == 0:return Trueelse:return Falseexcept FileNotFoundError:return Falsedef install_pip_module():if not is_installed("pip"):# 安装 pip 模块try:new_path = os.path.join(os.getcwd(), f'python')subprocess.check_call(["python", f'{new_path}\get-pip.py'])log.info("成功安装 pip 模块")except subprocess.CalledProcessError:log.info("安装 pip 模块时出错")def configure_path(path):# Assuming the path to add is '/path/to/python/bin'new_path = os.path.join(os.getcwd(), f'{path}')# 获取当前的PATH环境变量current_path = os.environ["PATH"]# 在当前的PATH后追加新路径,并使用os.pathsep分隔new_path_value = current_path + os.pathsep + new_path# 更新环境变量os.environ["PATH"] = new_path_valuedef configure_path_env_variable():if not is_installed("pip") and is_installed("python"):env_var_name = "PATH"python_path = os.path.join(os.getcwd(), f'python')scripts_path = os.path.join(os.getcwd(), f'python\Scripts')env_var_value = python_path + os.pathsep + scripts_pathtry:# 设置环境变量configure_path(f'python')configure_path(f'python\Scripts')subprocess.check_call(["setx", env_var_name, f"%{env_var_name}%;{env_var_value}"])log.info(f"成功追加环境变量: {env_var_name}={env_var_value}")except subprocess.CalledProcessError:log.info(f"追加环境变量时出错: {env_var_name}")def change_mirror_source():if not is_installed("pip"):# 更换镜像源pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simplemirror_url = "https://pypi.tuna.tsinghua.edu.cn/simple"os.system('pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple')log.info(f"已更换镜像源:{mirror_url}")def install_jupyter():if not is_installed("jupyter"):# 使用 pip 安装 jupytertry:subprocess.check_call(["python", "-m", "pip", "install", "jupyter_kernel_gateway"])log.info("成功安装 Jupyter")except subprocess.CalledProcessError:log.info("安装 Jupyter 时出错")def start_jupyter():# 启动 Jupyter start /B jupyter kernelgatewaycmd = ['jupyter', 'kernelgateway', '--KernelGatewayApp.ip=0.0.0.0', '--KernelGatewayApp.port=18012','--KernelGatewayApp.allow_credentials=*', '--KernelGatewayApp.allow_headers=*','--KernelGatewayApp.allow_methods=*', '--KernelGatewayApp.allow_origin=*']try:subprocess.Popen(cmd, creationflags=subprocess.CREATE_NEW_CONSOLE, shell=True)log.info("Jupyter kernel gateway 启动成功")except OSError as error:log.error(error)def is_running():try:s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)s.settimeout(3)result = s.connect_ex(('127.0.0.1', 18012))s.close()if result == 0:log.info("AI-Link.exe is already running or port conflict!")return Trueelse:return Falseexcept:log.info("Exception of is_running:{0}".format(traceback.format_exc()))return Falsedef main_process():if not is_running():# 配置环境变量configure_path_env_variable()# 安装pip模块install_pip_module()# 更换镜像源change_mirror_source()# 使用pip进行安装jupyterinstall_jupyter()# 启动jupyterstart_jupyter()if __name__ == "__main__":main_process()
logutils.py
# -*- coding: utf-8 -*-
import time
import win32api
import win32conclass Log(object):def write(self, level, msg):date = time.strftime("%Y-%m-%d", time.localtime())log_file = r"{0}{1}{2}".format( "jupyter.", date, ".log")line = "{0} {1} {2}\n".format(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()), level, msg)with open(log_file, 'a', encoding='utf-8') as f:f.write(line)def info(self, msg):self.write("INFO", msg)def error(self, msg):self.write("ERROR", msg)@staticmethoddef notice_info(msg: str):win32api.MessageBox(0, f"{msg}", "警告", win32con.MB_ICONWARNING)log = Log()
jupyter
打包exe
实现windows
自启
思路
- 首先要了解
windows
如何实现开机自启 - 如何通过
python
代码去打包exe
程序实现开机自启
解决方案
一. 要实现在 Windows
开机时自动启动 .exe
程序,你可以通过以下几种方式来设置:
- 将程序快捷方式添加到启动文件夹:
- 按下
Win + R
键,打开“运行”对话框。 - 输入
shell:startup
,然后按回车,这将打开当前用户的启动文件夹。 - 在启动文件夹中创建程序的快捷方式,可以通过右键点击程序的
.exe
文件,然后选择“发送到” -> “桌面(创建快捷方式)”,然后将生成的快捷方式拖放到启动文件夹中。
- 按下
- 注册表编辑器:
- 按下
Win + R
键,打开“运行”对话框。 - 输入
regedit
,然后按回车,打开注册表编辑器。 - 导航到
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
。 - 右键点击右侧的空白处,选择“新建” -> “字符串值”。
- 将新建的字符串值命名为你想要的名称,然后修改其数值数据为程序的完整路径,比如
C:\path\to\your\program.exe
。
- 按下
- 任务计划程序:
- 搜索并打开“任务计划程序”。
- 在左侧导航栏,选择“创建基本任务”。
- 按照向导的指示,设置任务的名称和触发条件,选择“启动程序”作为操作类型。
- 指定要启动的程序的路径,然后完成创建任务的过程。
以上三个方式都可以实现开机自启,先看第二个方案需要改注册表,理论上代码可行,第三个方案需要设计任务计划,通过代码实现相对可行性较低,再看第一个所有的windows
系统,startup
文件目录相对固定,只需要创建快捷方式即可,相对简单,如是我们采用方案一。
二. 通过代码实现开启及自启
代码实现可行,主要问题就是如果不是使用管理员权限执行exe的话就需要强制获取一下admin
的管理员权限.
代码实现:
installer.py
# -*- coding: utf-8 -*-
import os
import traceback
import ctypes
import sys
import win32com.client as clientshell = client.Dispatch("WScript.Shell")
from utils.logutils import logdef is_admin():try:return ctypes.windll.shell32.IsUserAnAdmin()except Exception as e:log.error(e)return Falsedef create_shortcut():try:filename = os.path.join(os.getcwd(), f'jupyter.exe')lnkName = f"C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp\jupyter.lnk"shortcut = shell.CreateShortCut(lnkName)shortcut.TargetPath = filenameshortcut.save()except:log.info("Exception of creating a shortcut:{0}".format(traceback.format_exc()))def jupyter_installer():if is_admin():create_shortcut() # 配置自启动服务else:ctypes.windll.shell32.ShellExecuteW(None, "runas", sys.executable, __file__, None, 1)if __name__ == '__main__':try:jupyter_installer()except:log.info("Service initialization failed:{0}".format(traceback.format_exc()))
pyinstaller 打包exe
pyinstaller -F install.py
pyinstaller -F jupyter.py
源码地址以及打包后的exe
文件
源码地址路径
https://github.com/LBJWt/windows-jupyter
打包后的完整exe的文件下载地址
https://download.csdn.net/download/wagnteng/88245132
相关文章:
windows一键启动jupyter
windows一键启动jupyter jupyter简介 Jupyter是一个开源的交互式计算环境,主要用于数据分析、数据可视化和科学计算。它的名字来源于三种编程语言的缩写:Julia、Python和R,这三种语言都可以在Jupyter环境中运行。如果您想进行数据分析、科学…...

树形结构的快速生成
背景 相信大家都遇到过树形结构,像是文件列表、多级菜单、评论区的设计等等,我们都发现它有很多层级,第一级可以有多个,下边的每一个层级也可以有多个;有的可以设计成无限层级的,有的只能设计成两级。那么…...
Android笔记(二十七):自定义Dialog实现居中Toast
背景 记录实现符合项目需求的Toast弹窗 具体实现 class MyTipDialog private constructor(val context: Activity): Dialog(context, R.style.MyTipTheme) {val resId ObservableField(0)private val mainHandler Handler(Looper.getMainLooper())init {setCanceledOnTouc…...

css实现文字的渐变,适合大屏
1 在全局写一个全局样式,文字渐变 2 在组件中使用 CSS3利用-webkit-background-clip: text;实现文字渐变效果_css如何把盒子底部的文字变成透明渐变_I俩月亮的博客-CSDN博客 CSS 如何实现文字渐变色 ?_css字体颜色渐变_一个水瓶座程序猿.的博客-CSDN博客…...
软考高级系统架构设计师系列论文八十七:论企业应用集成
软考高级系统架构设计师系列论文八十七:论企业应用集成 一、企业应用集成相关知识点二、摘要三、正文四、总结一、企业应用集成相关知识点 软考高级系统架构设计师系列之:企业集成平台技术的应用和架构设计二、摘要 本文讨论了某公司的应用系统集成项目。某公司为了应对市场变…...

C++设计模式之适配器模式
一、适配器模式 适配器模式(Adapter Pattern)是一种结构型设计模式,用于将一个类的接口转换成另一个类所期望的接口,以便两个类能够协同工作。 适配器模式可以解决现有类接口与所需接口不匹配的问题,使得原本因接口不…...

山西电力市场日前价格预测【2023-08-24】
日前价格预测 预测明日(2023-08-24)山西电力市场全天平均日前电价为319.98元/MWh。其中,最高日前电价为370.78元/MWh,预计出现在19: 30。最低日前电价为272.42元/MWh,预计出现在12: 45。 价差方向预测 1: 实…...

一文速学-让神经网络不再神秘,一天速学神经网络基础(一)
前言 思索了很久到底要不要出深度学习内容,毕竟在数学建模专栏里边的机器学习内容还有一大半算法没有更新,很多坑都没有填满,而且现在深度学习的文章和学习课程都十分的多,我考虑了很久决定还是得出神经网络系列文章,…...
百度Q2财报:营收341亿元实现加速增长,净利润高速增长44%,增长强劲全线重构
北京时间8月22日,百度发布了截至2023年6月30日的第二季度未经审计的财务报告。第二季度,百度实现营收341亿元,同比增长15%;归属百度的净利润(non-GAAP)达到80亿元,同比增长44%。营收和利润双双实…...

ARM DIY(二)配置晶振频率
文章目录 前言串口乱码问题定位内核修改晶振频率uboot 修改晶振频率番外篇 前言 上篇文章《ARM DIY 硬件调试》介绍了 DIY ARM 板的基础硬件焊接,包括电源、SOC、SD 卡座等,板子已经可以跑起来了。 但是发现串口乱码,今天就来解决串口乱码问…...
高等数学:线性代数-第三章
文章目录 第3章 矩阵的初等变换与线性方程组3.1 矩阵的初等变换3.2 矩阵的秩3.3 方程组的解 第3章 矩阵的初等变换与线性方程组 3.1 矩阵的初等变换 矩阵的初等变换 下面三种变换称为矩阵的初等变换 对换两行(列),记作 r i ↔ r j ( c i …...
深入理解 SQL 注入攻击原理与防御措施
系列文章目录 文章目录 系列文章目录前言一、SQL 注入的原理二、防御 SQL 注入攻击的措施1. 使用参数化查询2.输入验证与过滤3.最小权限原则4.不要动态拼接 SQL5.ORM 框架6.转义特殊字符三、实例演示总结前言 SQL 注入是一种常见的网络攻击方式,攻击者通过在输入框等用户交互…...

QT5.12.12通过ODBC连接到GBase 8s数据库(CentOS)
本示例使用的环境如下: 硬件平台:x86_64(amd64)操作系统:CentOS 7.8 2003数据库版本(含CSDK):GBase 8s V8.8 3.0.0_1 为什么使用QT 5.12.10?该版本包含QODBC。 1&#…...

爱校对发布全新PDF校对工具,为用户带来更为便捷的校正体验
随着数字化文档使用的普及,PDF格式已经成为最为广泛使用的文件格式之一。为满足广大用户对于高效、准确PDF文档校对的需求,爱校对团队经过深入研发,正式推出全新的PDF校对工具! 这一全新工具针对PDF文件格式进行了深度优化&#…...

记录protocol buffers Mac安装
使用brew安装最新的protobuf 在Mac 上安装,使用brew 可以安装最新的protobuf。这个也比较简单,简单说一下。 首先先检查一下是否安装了brew。如果没有安装brew的话,请先安装brew.可以通过brew --version来检查 使用brew install protobuf 来…...

基于Jenkins自动打包并部署docker、PHP环境,ansible部署-------从小白到大神之路之学习运维第86天
第四阶段提升 时 间:2023年8月23日 参加人:全班人员 内 容: 基于Jenkins部署docker、PHP环境 目录 一、环境部署 (一)实验环境,服务器设置 (二)所有主机关闭防火墙和selinu…...

【附安装包】Midas Civil2019安装教程
软件下载 软件:Midas Civil版本:2019语言:简体中文大小:868.36M安装环境:Win11/Win10/Win8/Win7硬件要求:CPU2.5GHz 内存4G(或更高)下载通道①百度网盘丨64位下载链接:https://pan.…...

Apache StreamPark系列教程第一篇——安装和体验
一、StreamPark介绍 实时即未来,在实时处理流域 Apache Spark 和 Apache Flink 是一个伟大的进步,尤其是Apache Flink被普遍认为是下一代大数据流计算引擎, 我们在使用 Flink & Spark 时发现从编程模型, 启动配置到运维管理都有很多可以抽象共用的地方, 我们将一些好的经验…...
mysql replace insert update delete
目录 mysql replace && insert && update && delete replace mysql replace && insert && update && delete replace 我们在使用数据库时可能会经常遇到这种情况。如果一个表在一个字段上建立了唯一索引,当我们再向…...
实现SSM简易商城项目的商品查询功能
实现SSM简易商城项目的商品查询功能 介绍 在SSM(SpringSpringMVCMyBatis)框架下,我们可以轻松地实现一个简易商城项目。本博客将重点介绍如何实现商品查询功能,帮助读者了解并掌握该功能的开发过程。 步骤 1. 创建数据库表 首…...
HTML 语义化
目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案: 语义化标签: <header>:页头<nav>:导航<main>:主要内容<article>&#x…...
Vue记事本应用实现教程
文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展:显示创建时间8. 功能扩展:记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...
Cursor实现用excel数据填充word模版的方法
cursor主页:https://www.cursor.com/ 任务目标:把excel格式的数据里的单元格,按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例,…...
C++:std::is_convertible
C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...

遍历 Map 类型集合的方法汇总
1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...

聊聊 Pulsar:Producer 源码解析
一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台,以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中,Producer(生产者) 是连接客户端应用与消息队列的第一步。生产者…...

学校招生小程序源码介绍
基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码,专为学校招生场景量身打造,功能实用且操作便捷。 从技术架构来看,ThinkPHP提供稳定可靠的后台服务,FastAdmin加速开发流程,UniApp则保障小程序在多端有良好的兼…...
高防服务器能够抵御哪些网络攻击呢?
高防服务器作为一种有着高度防御能力的服务器,可以帮助网站应对分布式拒绝服务攻击,有效识别和清理一些恶意的网络流量,为用户提供安全且稳定的网络环境,那么,高防服务器一般都可以抵御哪些网络攻击呢?下面…...

GC1808高性能24位立体声音频ADC芯片解析
1. 芯片概述 GC1808是一款24位立体声音频模数转换器(ADC),支持8kHz~96kHz采样率,集成Δ-Σ调制器、数字抗混叠滤波器和高通滤波器,适用于高保真音频采集场景。 2. 核心特性 高精度:24位分辨率,…...
大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计
随着大语言模型(LLM)参数规模的增长,推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长,而KV缓存的内存消耗可能高达数十GB(例如Llama2-7B处理100K token时需50GB内存&a…...