0

抱歉,如果我在这里遗漏了一些明显的东西。我有一个 PyQt5 应用程序,我使用很棒的 fbs 包冻结了它。在应用程序中,通过 PyQt 子进程调用 Python 脚本,例如:

    command = "python LaunchPPTKwin.py"
    self.child = QProcess()
    self.child.start("cmd.exe /C python LaunchPPTKwin.py")
    self.child.waitForFinished(-1)

当应用程序在构建应用程序的机器上运行时,这可以正常工作。但是,当我将它带到另一台机器上时,应用程序会运行,但 LaunchPPTKwin.py 脚本从未执行过。我认为这是因为另一台机器没有安装 python 和/或本地没有 LaunchPPTKwin.py 脚本。我的目标是创建一个应用程序,以便用户无需单独下载 python 或脚本即可工作,即使应用程序完全独立。这可以使用fbs吗?

PS 两台机器都使用 Windows 10。

4

2 回答 2

0

想通了:我刚刚使用 Pyinstaller 将被调用的 Python 脚本编译成可执行文件,然后调用该可执行文件。所以我上面的子进程调用变成了:

command = "cmd.exe /C LaunchPPTKwin.exe"
self.child = QProcess()
self.child.start(command)
self.child.waitForFinished(-1)
于 2019-12-18T14:48:20.427 回答
0

未安装 python 或 python 不在搜索路径中,您必须找到它。

如果安装了 python,但不在搜索路径中,则下面的代码应该可以工作。

self.child.start("cmd.exe /C start LaunchPPTKwin.py")

如果根本没有安装 python,你可以更加努力地作弊。

您必须确保您的冻结应用程序可以处理允许它启动另一个脚本的命令行参数。

它需要python文件。添加该文件的基本目录以去除基本名称sys.path.py后缀并将其导入并调用它的主要功能。但这仅在脚本末尾有以下行时才有效

def main():
    the_code_you_want_to_start
    ...


if __name__ == "__main__":
    main()

只有在所有模块(即此文件导入已被您的冻结应用程序使用)时,它才会进一步起作用。

所以你看它有点复杂,但我用 py2exe 应用程序和 pyinstaller 应用程序做了一些类似的事情

于 2019-12-17T00:57:36.560 回答