0

我正在使用 PyInstaller 将我的多模块 Python 应用程序捆绑到一个one-fileexe 中。这个应用程序的入口点是一个扩展模块win32serviceutil.ServiceFramework——所以它是作为 Windows 服务运行的。当我尝试使用此应用程序提供用户可配置的记录器 ini 文件时出现问题。在我的主模块中,我设置了记录器,

log_file_path = path.join(path.dirname(path.abspath(__file__)), 'logging.conf')
logging.config.fileConfig(log_file_path)

我的 PyInstaller 命令如下:

pyinstaller -F <main-file>.py -n <exe-name> --hidden-import=win32timezone --add-data "logging.conf;."

打包后,我将生成的 exe 安装为服务,并成功注册为 Windows 服务。但是,当我尝试启动它时,它失败了。

有趣的是,在我配置的位置创建了一个空日志文件。所以这意味着 1) 应用程序确实读取了我的配置文件,并且 2) 这里没有权限问题。有没有人试图建立这样的东西来帮助阐明我可能会错过的东西?

4

1 回答 1

1

在 PyInstaller 中使用单文件选项时,我们无法__file__在代码中有效地使用变量来识别捆绑的应用程序或其位置。相反,PyInstaller 在运行时设置特殊的系统变量,比如sys._MEIPASSand sys.executable; 分别指定引导加载程序创建的用于运行应用程序的临时文件夹,以及冻结的可执行文件(引导加载程序)的位置。

一旦我更改了路径操作以使用这些变量来定位日志配置文件,文件就被成功读取并且服务正常工作。

于 2019-07-02T23:48:17.480 回答