【问题标题】:Windows services with Python and py2exe带有 Python 和 py2exe 的 Windows 服务
【发布时间】:2011-08-07 06:25:05
【问题描述】:

在使用 py2exe 转换 python windows 服务方面我需要一些帮助。

让我解释一下这个问题。我有一个 python 服务,它可以工作,这里没有问题。我使用 py2exe 将其转换为可执行文件。我通过用这个替换服务的python版本来测试它,它也没有问题。

但是当我将服务的exe版本移动到另一台计算机时,它会在服务管理器中注册但不会启动错误:“系统找不到指定的文件”。丢失的文件是我编写的模块之一。

我玩了一下,然后回到我使用 py2exe 和服务的 exe 版本工作的机器上。我删除了与 python 相关的所有内容,py2exe 创建的所有内容,但“dist”文件夹,我能想到的所有内容都与服务的 python 版本有关。 exe 版本仍然有效(尽管我删除了其他机器上应该丢失的文件)。

尝试了很多不同的东西,但无法让 exe 版本正常工作。如果你们中的任何人有任何想法,我将不胜感激。

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

【问题讨论】:

  • 不太熟悉它在 Windows 上的工作原理,但在 Linux 上,您可以对二进制文件运行 'ldd' 以查看它依赖于哪些动态库以及它们在文件系统上的位置。这将是值得检查的。事实上,我做了一个快速的谷歌搜索,并在 Windows 上找到了这个:dependencywalker.com

标签: python windows-services py2exe


【解决方案1】:

即使您将 .py 脚本转换为 exe,该服务仍然使用 python 解释器来运行服务代码本身。如果您打开“服务”并查看服务属性,您应该会看到类似 - 可执行文件路径: "C:\Python27\lib\site-packages\win32\PythonService.exe"

我猜另一台计算机上没有安装 python。 如果您希望能够在不安装 python 的情况下在机器上运行该服务,您需要执行类似 This 的操作 ,或者你也可以使用cx_freeze

【讨论】:

    【解决方案2】:

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

    其中有一些关于与 windows 系统 dll 冲突的模块的注释。他遇到了问题,因为他有一个名为 version 的模块,import version 导致应用程序出错。

    您可以尝试导入 win32traceutil 作为您服务中的第一件事。这应该允许您运行 win32traceutil 控制台应用程序以显示服务的任何 stdout/stderr 输出。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-05-29
      • 1970-01-01
      • 2023-04-05
      • 1970-01-01
      • 1970-01-01
      • 2012-02-23
      • 1970-01-01
      相关资源
      最近更新 更多