我正在使用PyInstaller将多模块Python应用捆绑到one-file
exe中。该应用程序的入口点是扩展win32serviceutil.ServiceFramework
的模块-因此,该模块旨在作为Windows服务运行。当我尝试为此应用程序提供用户可配置的logger 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)这里没有权限问题。有没有人试图建立这样的东西来帮助我了解我可能缺少的东西?
答案 0 :(得分:0)
在PyInstaller中使用单文件选项时,我们无法在代码中有效使用__file__
变量来标识捆绑的应用程序或其位置。相反,PyInstaller在运行时设置特殊的系统变量,例如sys._MEIPASS
和sys.executable
;分别指定引导加载程序创建的用于运行应用程序的临时文件夹以及冻结的可执行文件(引导加载程序)的位置。
一旦我更改了路径操作以使用这些变量来定位日志配置文件,文件将被成功读取并且服务正常工作。