首页 > 解决方案 > pyinstaller:生成 exe 后 popen 不运行

问题描述

我使用pyinstaller编译了我的python应用程序并且exe工作正常,但是当我在没有python的另一台机器上运行它时,包含的代码的任何部分subprocess.Popen()都不会运行。

我读了太多问题,但我无法解决这个问题。

我的流行线:

try:
            process = subprocess.Popen(['python', os.path.abspath('about.py')],stdout=subprocess.PIPE,stderr=subprocess.PIPE,stdin=subprocess.PIPE,
                shell=True)

except Exception as e:
            print(e)

请注意,可执行文件在主机上运行,​​但在另一台机器上运行但在启动 popen 时失败。

===更新====

控制台什么也不显示,也不打印异常,所以我猜这是找不到 python 的问题。我怎样才能解决这个问题?

===更新2====

按照 viilpe 的建议,我使用了 "exec(open..." 但它要求我首先导入 about.py 模块;导入模块在主模块之上运行它。

将 exec(open...) 放在 try\except 中会同时运行主模块和 about 模块;破坏应用程序的 GUI。

我使用“kivy”作为我的 GUI 库。

标签: pythonwindowssubprocesspyinstallerpopen

解决方案


PyInstaller 的全部意义在于使目标计算机能够在没有独立python安装的情况下运行您的脚本。您不能subprocess在未(必须)安装的工具上运行 a 。

有多种方法可以将 Python 作为其本身的子进程运行;从探索multiprocessing图书馆开始。

如果运行 Python 两次的要求并不难,那么绝对最简单的解决方案是import about将代码作为脚本的一部分运行。这可能需要对about.py.


推荐阅读