+

将 Python 项目打包为 Windows service

+ + +
+ +

今天想把一个 Python 项目用 Nuitka 打包后设为开机自启。突然发现 Nuitka Commercial 可以把 Python 项目打包为 Windows service, 然而要钱(这周生活费够不够我吃的都是个问题……)。当然人家也给出了 win32service 这个东西,那自然要看看。

+

一、安装

安装主要是 pywin32nuitka

+
1
pip install nuitka pywin32
+ +

原程序

1
2
3
4
5
from app import app

if __name__ == '__main__':
app.run("0.0.0.0", 8899)

+ +

二、改为 Windows service

参考 An example Windows service implemented with pywin32 wrappers. #python #windows-service #pywin32 · GitHubPython Windows service pyinstaller executables error 1053 - Stack Overflow,将上面的代码改成这样

+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36

# Filename: windows_service_entry

import sys

import servicemanager
import win32serviceutil

from app import app
from win32serviceutil import ServiceFramework


class WinSvcEntry(ServiceFramework):
_svc_name_ = "StandaloneLicenseServer"
_svc_display_name_ = "Standalone License Server"
_svc_description_ = "Standalone License Server by cxzlw"

def __init__(self, args):
super().__init__(args)
self.running = False

def SvcDoRun(self):
app.run("0.0.0.0", 8899)

def SvcStop(self):
app.stop()


if __name__ == '__main__':
if len(sys.argv) == 1:
servicemanager.Initialize()
servicemanager.PrepareToHostSingle(WinSvcEntry)
servicemanager.StartServiceCtrlDispatcher()
else:
win32serviceutil.HandleCommandLine(WinSvcEntry)

+ +

然后用 Nuitka 打包

+
1
nuitka windows_service_entry.py --follow-imports --standalone
+ +

跑起来,记得带管理员权限。然后不出所料地,炸了……

+
1
ModuleNotFoundError: No module named 'win32timezone'
+ +

win32timezone 加到 Nuitka 的 --include-module 里面,再打包

+
1
nuitka windows_service_entry.py --follow-imports --standalone --include-module="win32timezone"
+ +

三、运行/安装

安装

+
1
windows_service_entry.exe install
+ +

更新

+
1
windows_service_entry.exe update
+ +

启动

+
1
windows_service_entry.exe start
+ +

停止

+
1
windows_service_entry.exe stop
+ +

四、限制

需要注意的是,这样跑起来的 service 并没有权限访问网络。这个问题到现在我也没解决,可以期待一下接下来的一篇文章。

+

同时,如果有相应的解决方案的,欢迎告诉我,谢谢。

+ + +
+ +
+
+ + + + + + +
+
+
将 Python 项目打包为 Windows service
+
https://blog.cxzlw.top/2023/08/08/python-to-windows-service/
+
+
+ +
+
作者
+
cxzlw
+
+ + +
+
发布于
+
2023年8月8日
+
+ + + +
+
+
+ + + + +
+
+ + +
+ +
+ +
+ + + + +
+ +
+
+
+
+ + + + +
+ + + +