本来使用的python版本是python3.7.0,是当前的最新版本,但是使用pyinstaller打包.py程序为exe,生成的exe程序运行有错误: “ pyinstaller initfs encoding:unable to load the file system codec”,搜了一下,github上有一句开发者的愤怒评论
Python 3.7 is still not supported, so stop posting “I have PY 3.7 and the same issue”. The only effect is that you are wasting my time and make me angry!
对不起,打扰。不过我查看了pyinstaller的github首页,上面写着支持的版本是2.7 or 3.4-3.7,没想到作为官方的文档介绍也是个是骗子。所以果断卸载了3.7,装了一个python3.6版本。所以以下都是基于python3.6版本进行的。
在cmd中输入:
pip install pyinstaller
pyinstaller -F yourfilename.py
封装的方法有很多种,包括srvany、nssm等方式,我一开始使用的是系统自带的SC指令的方法。
使用管理员权限打开cmd,输入
sc create msgStory binpath= C:\Users\125\Desktop\pythonpostgres\Improve\dist\receiver.exe
如果运行成功,就可以去windows服务管理器里查看自己的服务并且开启了相应的服务了。当然是事实这个指令还有很多的可选项,有更多需要的时候可以去查阅。
但是!并不是所有的exe都可以直接封装为服务并且正常运行的,一般情况下windows服务需要一个OnStart和一个OnStop函数,但是随便一个exe不一定就有这些东西,我也因为这个原因导致自己虽然在服务管理器中有对应的服务,但是却打不开。
nssm install [servicename]
会有一个弹窗,我们在path那一栏选择我们要启动的exe或是bat文件,然后按下那个install service按钮一般就大功告成了。
如果要删除服务就使用指令
nssm remove [servicename]