windows -- 自动安装python包,并启动服务

news2024/12/25 9:39:45

文章目录

  • 定制python的包
  • 编写批处理文件
  • 遇到的问题

自动安装python的包,并启动后台服务进程。

定制python的包

  • 基于python的Flask框架,简单开发一个服务器;
  • 编写发布python包的setup.py
    在这里插入图片描述
     
    在my_ff包的同级目录下创建一个setup.py,实现如下内容:
    在这里插入图片描述
# 打包发布python包
# 让别人可以通过pip进行安装

import os
from setuptools import setup, find_namespace_packages


BASE_DIR = os.path.dirname(os.path.abspath(__file__))

setup(
    name="myflask",
    version="1.0",
    author="laufing",
    description="simple flask server",
    # py_modules=["a", "b.c"], 发布的模块
    # packages=[],
    # 发布的包
    packages=find_namespace_packages(
        where=BASE_DIR,
        include=["my_ff", "my_ff.*"]  # 当前包及其子包
    ),
    # 包含包里的数据  如data.proto
    include_package_data=True,
    package_data={"": ["*.proto", "*.json"]}, # 所有 包下的目标文件,也可使用MANIFEST.in指定

    # 打包可执行脚本 在安装目录site-packages/bin中
    entry_points={
        "console_scripts": [
            "fserver = my_ff.run:main" # 脚本对应的函数,my_ff包需要能搜索到
        ]
    },
    # 在site-packages等安装目录下生成bin目录,并加入
    scripts=["my_ff/run.py"],
    # include=[]
    # 限制python的版本
    python_requires=">=3.8",
    # 当前项目的安装依赖,自动从pypi安装
    install_requires=["flask<=1.2", "markupsafe<=2.0.1"],
    # setup的依赖
    setup_requires=[""]
)

发布python的包

  1. 源码包 sdist;
  2. 二进制whl包 bdist_wheel
# 命令行执行,同级目录生成dist目录
python setup.py sdist bdist_wheel

 

编写批处理文件

  • 编写bat批处理文件,将python包打包为whl二进制文件;
  • 自动安装whl (默认安装到python环境的site-packages,也可指定目录);
  • 将启动脚本加入系统服务【sc命令】;
rem 关闭回显
@echo off

rem 打包whl
python setup.py bdist_wheel

rem 进入dist目录安装
cd dist
dir | findstr .*\.whl > result.txt

::获取whl对应的文件名,并使用pip安装
for /f "tokens=1,2,3,* delims= " %%i in (result.txt) do (
:: 代码块内部安装    target指定目录(可以自创建)   upgrade覆盖式安装
pip install %%l --target=d:/lauf --upgrade
)
del /q result.txt

:: 等待用户的输入
set /p lower=输入下位机ip:
set /p lowerPort=输入下位机端口:
echo 下位机地址:%lower%:%lowerPort%
set /p upper=输入上位机ip:
set /p upperPort=输入上位机端口:
echo 上位机地址:%upper%:%upperPort%

:: 若当前d:/lauf  d:/lauf/my_ff 不再PYTHONPATH中,则永久配置环境变量
set PYTHONPATH | findstr d:/lauf || setx PYTHONPATH "d:/lauf;d:/lauf/my_ff;%PYTHONPATH%"
:: 若d:/lauf/bin不在PATH中,则永久配置
set PATH | findstr d:/lauf/bin || setx PATH "d:/lauf/bin;%PATH%"

:: 将程序加入系统服务并启动
rem start fserver
rem 添加服务
sc create MyFlask binpath= D:/lauf/bin/fserver.exe start= auto displayname= MyFlask
::删除服务
:: sc delete LaufingFlask
pause

 

遇到的问题

添加系统服务失败,没有权限。
在这里插入图片描述

  • 系统管理员启动命令窗口,sc手动创建服务
    或者修改注册表win+r - regedit - hkey_local_machine - software - microsoft - windows - currentversion - policies - system - EnableLUA - 0
# 添加服务
sc create ServerName binpath= xxx/xx.exe start= auto DisplayName= ServerName
# 启动服务
net start ServerName

报错:服务没有响应控制功能
当前服务无法启动,查看系统日志-搜索“事件查看器”
在这里插入图片描述

  • exe程序后台运行
    dos命令下执行!!!
# 后台启动进程
start /b fserver.exe 

但这种方式关闭命令窗口后,后台进程也会关闭。
改进:启动exe程序后,关闭其父进程conhost.exe

# 后台启动进程
start /b fserver.exe 
# 杀掉其父进程    查看进程 tasklist | findstr conhost.exe
# /im 以名称杀掉进程; 
# /pid 以进程id杀掉进程;
# /f 强制终止进程
taskkill /im conhost.exe /f

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/674502.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【跟小嘉学 Rust 编程】三、Rust 的基本程序概念

系列文章目录 【跟小嘉学 Rust 编程】一、Rust 编程基础 【跟小嘉学 Rust 编程】二、Rust 包管理工具使用 【跟小嘉学 Rust 编程】三、Rust 的基本程序概念 文章目录 系列文章目录前言一、变量以及可变性1.1、变量声明语法1.2、不可变变量1.3、未使用变量警告1.4、使用 let mu…

【雕爷学编程】Arduino动手做(119)---JQ6500语音模块

37款传感器与执行器的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&am…

计算机网络——网络层

序言 计算机网络中的网络层在当今的社会起到了什么作用&#xff1f; 现在的互联网通信&#xff0c;远程办公和远程教育&#xff0c;电子商务和在线服务&#xff0c;信息共享和社交媒体&#xff0c;物联网和智能家居都是通过网络层才能使用的。它连接了人们、设备和信息&#xf…

学习笔记:CMOS、MOS、NMOS、PMOS、MOSFET等的区别

复习时 发现连基础概念都不知道&#xff0c;连忙来找补 FET 把P型半导体放入电场中&#xff0c;根据同电荷排斥、异电荷吸引&#xff0c;电荷情况如下&#xff1a; 这种效应称为电场效应&#xff08;Field Effect&#xff09;&#xff0c;依据这种现场所发明的半导体器件称为…

回归、多项式回归、多重回归

1.回归、多项式回归、多重回归 1.1 回归&#xff08;单变量&#xff09; 预测一个变量 x x x与一个变量 y y y的关系 例如&#xff1a;广告费 x x x与点击量 y y y 用直线拟合数据 1.2 多项式回归&#xff08;单变量&#xff09; 预测一个变量 x x x与一个变量 y y y的关系…

mtk preloader简介

前言 preloader按照mtk的说法是MTK in-house developed loader&#xff0c;也就说是mtk内部开发的一个loader&#xff0c;那么单独编译preloader也是可以的&#xff0c;使用命令./mk project_name n pl。 文章目录 前言计算机系统中常用的存储器类型1、启动流程2、下载流程3、代…

React学习[三]

React学习[三] 组件的propsprops的基本使用props的特点 组件通讯的三种方式父组件传递数据给子组件子组件传递数据给父组件兄弟组件传递 Contextprops进阶children属性props校验约束规则 props的默认值 组件的生命周期生命周期三个阶段创建时&#xff08;挂载阶段&#xff09;更…

代理Windows台式机支持Remote Desktop外网远程桌面连接, 随时玩转Stable Diffusion WebUI

title: 《树莓派4B家庭服务器搭建指南》第十八期&#xff1a;代理Windows台式机支持Remote Desktop外网远程桌面连接, 随时玩转Stable Diffusion WebUI zhaoolee在家中Windows台式机折腾Stable Diffusion WebUI , 为了出门在外也能访问Windows台式机的Stable Diffusion WebUI&…

dom4j解析 mybatis config XML文件

pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 …

软件工程——第4章形式化说明技术(非重点)

本专栏是博主个人笔记&#xff0c;主要目的是利用碎片化的时间来记忆软工知识点&#xff0c;特此声明&#xff01; 文章目录 1.软件工程方法划分成哪三类&#xff1f;并各自举例 2.形式化方法的定义&#xff1f; 3.非形式化的方法的缺点&#xff1f; 4.形式化方法的优点&am…

elasticsearch snapshot快照指定多个索引并行备份——筑梦之路

Curl 命令方式对elasticsearch备份和恢复—— 筑梦之路_筑梦之路的博客-CSDN博客 之前也写过使用API请求的方式对ES数据进行快照方式备份&#xff0c;这里主要对之前的内容进行完善和补充。 版本兼容性 快照包含构成索引的磁盘上数据结构的副本。这意味着快照只能还原为可以读…

Kubernetes API Server源码学习(二):OpenAPI、API Resource的装载、HTTP Server具体是怎么跑起来的?

本文基于Kubernetes v1.22.4版本进行源码学习 6、OpenAPI 1&#xff09;、OpenAPI的作用 OpenAPI是由Swagger发展而来的一个规范&#xff0c;一种形式化描述Restful Service的语言&#xff0c;便于使用者理解和使用一个Service。通过OpenAPI规范可以描述一个服务&#xff1a;…

28离散Hopfield神经网络的联想记忆数字识别(附matlab)

1.简述 学习目标&#xff1a;利用离散Hopfield神经网络进行联想记忆数字识别 1982年&#xff0c;美国加州理工学院的J.Hopfield教授提出了一种单层反馈神经网络&#xff0c;称为Hopfield网络[1]。Hopfield网络是一种循环的神经网络&#xff0c;从输出到输入有反馈连接。Hopfiel…

Leetcode---350周赛

题目列表 6901. 总行驶距离 6890. 找出分区值 6893. 特别的排列 6447. 给墙壁刷油漆 一、总行驶距离 很显然&#xff0c;这题单纯就是一道数学应用题&#xff0c;我们要明白最关键的一点 &#xff1a;只有当mainTank>5并且additionalTank>0时&#xff0c;才能发生副油…

操作系统 - 操作系统结构

✅作者简介&#xff1a;人工智能专业本科在读&#xff0c;喜欢计算机与编程&#xff0c;写博客记录自己的学习历程。 &#x1f34e;个人主页&#xff1a;小嗷犬的个人主页 &#x1f34a;个人网站&#xff1a;小嗷犬的技术小站 &#x1f96d;个人信条&#xff1a;为天地立心&…

【Kubernetes资源篇】StatefulSet无状态服务管理入门实战详解

文章目录 一、StatefulSet理论知识1、StatefulSet Pod控制器特性2、什么是有状态服务和无状态服务&#xff1f;3、Deployment和StatefulSet区别 二、案例&#xff1a;StatefulSet资源实战演示1、创建WEB站点并验证StatefulSet特点2、StatefulSet滚动更新 三、总结 一、Stateful…

JavaFX第四篇 Button按钮和事件处理

JavaFX第四篇 Button按钮和事件处理 1. 代码2. 讲解3. 代码仓库 上一篇我们讲解了Hello World演示&#xff0c;主要用到Label标签的功能&#xff0c; 这里我们要介绍的是最常用的控件之一&#xff1a;按钮 在现在的软件开发过程中还没发现没有用到按钮的应用&#xff0c; 基本上…

【数据库原理与实践】第八章至第十章作业汇总(更新中)

填空题部分&#xff1a; Chp 8 安全性与完整性 part 1&#xff1a; 数据库的安全性是指保护数据库以防止不合法的使用所造成的&#xff08; 数据泄露、更改或破坏 &#xff09;。计算机系统有三类安全性问题&#xff0c;即&#xff08; 技术安全 &#xff09;、管理安全和…

ROS:计算图

目录 一、ROS计算图简介二、节点&#xff08;Node&#xff09;三、节点管理器&#xff08;Master&#xff09;四、消息&#xff08;Message&#xff09;五、话题&#xff08;Topic&#xff09;六、服务&#xff08;Service&#xff09;七、动作&#xff08;Action&#xff09;八…

LabVIEW开发燃油阀自动性能测试系统

LabVIEW开发燃油阀自动性能测试系统 燃油阀是航空燃油控制系统的核心部件。燃油阀的流量滞后直接影响控制精度、稳定性和可靠性&#xff0c;而燃油阀生产的性能测试是至关重要的步骤。但是&#xff0c;由于流动滞后是非线性的&#xff0c;因此很难控制和进行实时测试。随着厂家…