【问题标题】:Running external Python script from Pyinstaller从 Pyinstaller 运行外部 Python 脚本
【发布时间】:2018-08-14 02:40:23
【问题描述】:

我使用 Pyinstaller 编写了一个应用程序,它在目标机器上安装 Python 和一些包。在应用程序结束时,我应该生成一个 Python 脚本并使用subprocess.Popen()。但是,脚本似乎无法执行它,因为它似乎仍在使用应用程序(pyinstaller)的运行时环境。但是,在安装成功后单独运行生成的脚本。

有没有办法在 pyinstaller 的上下文之外生成一个进程?

【问题讨论】:

  • 这个article 可能会对这种情况有所了解。很可能,您没有“正确”使用Popen - 就像 pyinstaller 在您的操作系统中处理它的方式一样。
  • 至于修改运行的 env pyinstaller 应用程序,这里的文档中有提及:pyinstaller.readthedocs.io/en/stable/…

标签: python subprocess pyinstaller popen


【解决方案1】:

只是分享我为这个问题所做的一些方法(至少对于我的用例)。

第一种方法是在安装过程中生成的脚本中,如果PYTHONPATH 为空(即当前目录),我会明确删除它的第一个条目。这可确保首先加载当前上下文之外的必要 Python 库(PyInstaller 引导加载程序)。即

if not sys.path[0]:
    sys.path.pop(0)

对于第二种方法,在某些情况下,LD_LIBRARY_PATH 环境变量引用了提取的安装程序的目录。通常发生在 Linux 中,我会将修改后的环境变量集发送到 subprocess.Popen(),其中删除了 LD_LIBRARY_PATH

pip_env = os.environ
if 'LD_LIBRARY_PATH' in pip_env:
    pip_env.pop('LD_LIBRARY_PATH')
subprocess.call("<command here>", shell=True, env=pip_env)

不过,请注意使用上述方法。虽然它适用于我的用例,但它可能会导致其他用例出现意外问题。

【讨论】:

    猜你喜欢
    • 2015-10-01
    • 2011-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多