热爱技术
专注分享

利用pyinstaller+nssm将python程序打包为exe并封装为系统服务,实现开机自启/后台运行

emmmm…最近沉迷python,让我再写一篇python的博客。

前面有一篇文章,做了一个python的客户端和一个服务端,通过sockets通信;客户端运行在家里的win10 电脑上,服务端运行在阿里云的centos上。客户端可以主动监测自己的公网IP地址,并定时上报给服务端。

https://www.xiaoweigod.com/network/1588.html

客户端的确做得比较简陋,甚至连数据校验都没做,一切都通过服务端来判断数据的合法性。不过更致命的是,我每次开机都要手动去点开这个客户端,让它保持运行,然后,客户端运行的时候还会占用一个窗口,经常不小心就关掉了,程序运行如下图。。每次出门得检查下客户端有没有在运行,然后不放心还开个teamviewer。现在下决心要解决掉这个问题了。

 

image.png

怎么做呢?步骤分为两步,第一步是把python程序打包成windows的可执行程序,第二步把这个可执行程序再封装为系统服务。而系统服务运行的话是后台形式的,不会显示任何窗口,并且可以很方便地实现开机启动。

准备工具/环境要求:winxp到win10都可以,已经安装完了python环境的电脑。

一、使用pyinstaller将python程序打包为exe可执行程序

1 win(ctrl和alt之间的旗子键)+R,打开运行,cmd

image.png

2 直接执行:

pip install pyinstaller

安装成功后会显示:

Successfully installed pyinstaller-3.3.1

3 进入python程序的文件夹,打包程序(比如我的程序在E盘)

pyinstaller -F E:\DDNS_clent.py

注意:加入-F参数表示打包成单一exe程序

完成如图,exe程序路径在倒数第二行

image.png

我们打开这个exe文件运行一下,确保没问题:

image.png

 

二、使用nssm将exe可执行程序注册为系统服务

1 nssm下载地址:https://nssm.cc/ci/nssm-2.24-101-g897c7ad.zip

下载完了解压,会得到一个文件夹,内容如图:

image.png

2 根据你的系统是32位的还是64位的,进入相应的文件夹,将文件夹下的nssm.exe复制到E盘(复制到哪里没强制要求,方便就行)

3 电脑左下角搜索框中搜索cmd,右键以管理员身份运行

image.png

4 进入刚才复制的nssm文件夹中,运行命令注册服务:

E:
nssm install DDNS_client <这个名称你可以自己定义>

然后会弹出来一个界面:

image.png

Application Path:要注册为服务的程序的路径

Startup directory:要注册为服务的程序所在的文件夹

Arguments:启动参数

填写如图:

image.png

填完后直接点Install service就好了。

image.png

5 查看系统服务/配置自启动

win+R运行 services.msc,打开系统服务

找到我们刚才注册的服务,如图,修改为自动启动,然后点启动:

image.png

这样这个python程序就在后台运行了。如果我们要删除服务,那么将第四步的操作改为:

nssm remove <服务名称>

赞(16) 打赏
未经允许不得转载:小伟博客 » 利用pyinstaller+nssm将python程序打包为exe并封装为系统服务,实现开机自启/后台运行

评论 6

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
  1. #1

    大佬,可以转载吗?

    QQ游客5年前 (2018-11-28)回复
  2. #2

    您好,我用您的方法在最后一步启动时,系统报错,不能启动(非microsoft服务)。请问有什么解决办法吗。

    tdspider5年前 (2019-08-07)回复
    • 你的vc++库没装完 2005 2008 2011 2013 2015这种

      misery5年前 (2019-09-29)回复
  3. #3

    我在二.4运行命令注册服务后,并没有弹出来界面,cmd直接返回”service xxx installed successfully.然后在系统服务里面找到我的程序,开始服务失败,提示如果是非microsoft服务请联系服务发行商。。。

    li5年前 (2019-08-15)回复

觉得文章有用就打赏一下文章作者

非常感谢你的打赏,我们将继续给力更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫打赏

微信扫一扫打赏