使用Python和py2exe创建Windows服务

0 投票
2 回答
2576 浏览
提问于 2025-04-16 15:54

我需要一些帮助,把一个用py2exe做的Python Windows服务转换成可执行文件。

让我来解释一下问题。我有一个Python服务,运行得很好,没有任何问题。我用py2exe把它变成了一个可执行文件。我测试了一下,把这个可执行文件替换掉原来的Python服务,结果也没问题,能正常工作。

但是,当我把这个可执行文件移到另一台电脑上时,它虽然能在服务管理器里注册,但启动时却报错:“系统找不到指定的文件”。缺少的文件是我自己写的一个模块。

我在这方面尝试了一些操作,然后又回到我用py2exe的那台机器上,那里可执行文件运行得很好。我把所有和Python相关的东西都删掉了,除了“dist”文件夹,所有我能想到和Python服务有关的东西都删除了。结果可执行文件还是能正常工作(尽管我删除了那些在另一台机器上被认为缺失的文件)。

我尝试了很多不同的方法,但就是无法让可执行文件在新电脑上运行。如果你们有任何想法,我会非常感激。

附注:我在目标机器上确实安装了C++运行时。没有它是无法注册服务的,正如我所说,我可以注册它,只是它无法运行。

2 个回答

0

http://www.py2exe.org/index.cgi/py2exeAndWindowsServices

里面有一些关于模块和Windows系统的dll文件冲突的说明。有个人遇到问题,因为他有一个叫做version的模块,使用import version时导致应用程序出错。

你可以尝试在你的服务中首先导入win32traceutil。这应该能让你运行win32traceutil控制台应用,显示服务的任何标准输出或错误输出。

1

即使你把.py脚本转换成了.exe文件,这个服务仍然需要用到Python解释器来运行服务的代码。如果你打开“服务”并查看服务的属性,你应该能看到类似这样的内容 - 可执行文件的路径: "C:\Python27\lib\site-packages\win32\PythonService.exe"

我猜另一个电脑上没有安装Python。如果你想在没有安装Python的机器上运行这个服务,你需要做一些事情,比如这个,或者你也可以使用cx_freeze来实现。

撰写回答