从Pyinstaller运行外部Python脚本

时间:2018-03-06 09:30:22

标签: python subprocess pyinstaller popen

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

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

1 个答案:

答案 0 :(得分:0)

只需分享一些我针对此问题(至少对于我的用例而言)的方法即可。

第一种方法是在安装过程中生成的结果脚本中,如果它为空(即当前目录),我会明确删除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)

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